Синтаксис Oracle SQL: внутреннее объединение

#sql #oracle #syntax #inner-join

#sql #Oracle #синтаксис #внутреннее объединение

Вопрос:

У меня сейчас нет доступа к базе данных Oracle, поэтому я публикую свой вопрос здесь:

Является ли следующее утверждение допустимым синтаксисом Oracle SQL?

 SELECT a1
FROM t1 INNER JOIN t2
  

Мне особенно интересно, нужно ли нам указывать атрибут соединения для внутреннего соединения.

Лучше всего, будет

Комментарии:

1. или попробуйте естественное объединение, если имена объединяемых столбцов совпадают

2. Пожалуйста, избегайте natural join . Как говорит APC ниже, «это ошибка, ожидающая своего появления».

Ответ №1:

Вы упускаете ON

Нравится

 SELECT a1
FROM t1 INNER JOIN t2
ON t1.SomeID = t2.SomeID
  

Ответ №2:

Итак, это запрос, о котором вы думаете….

 SQL> select e.ename
  2         , d.dname
  3  from emp e inner join dept d
  4  /
from emp e inner join dept d
                           *
ERROR at line 3:
ORA-00905: missing keyword


SQL>
  

Как мы можем видеть, это завершается ошибкой. Синтаксис ВНУТРЕННЕГО ОБЪЕДИНЕНИЯ требует, чтобы мы предоставляли столбцы для объединения…

 SQL> select e.ename
  2         , d.dname
  3  from emp e inner join dept d
  4      on ( d.deptno = e.deptno )
  5  /

ENAME      DNAME
---------- --------------
SCHNEIDER  ACCOUNTING
BOEHMER    ACCOUNTING
KISHORE    ACCOUNTING
ROBERTSON  RESEARCH
...
FEUERSTEIN HOUSEKEEPING
PODER      HOUSEKEEPING
TRICHLER   HOUSEKEEPING

21 rows selected.

SQL>
  

Существует альтернативный синтаксис, ЕСТЕСТВЕННОЕ СОЕДИНЕНИЕ. Этот синтаксис автоматически объединит две таблицы на основе всех столбцов с одинаковыми именами.

 SQL> select e.ename
  2         , d.dname
  3  from emp e natural join dept d
  4  /

ENAME      DNAME
---------- --------------
SCHNEIDER  ACCOUNTING
BOEHMER    ACCOUNTING
KISHORE    ACCOUNTING
ROBERTSON  RESEARCH
...
FEUERSTEIN HOUSEKEEPING
PODER      HOUSEKEEPING
TRICHLER   HOUSEKEEPING

21 rows selected.

SQL>
  

Это изящный трюк, но на самом деле на него не следует полагаться в производственном коде; это ошибка, ожидающая своего появления.

Ответ №3:

Вам нужно будет добавить предложение ON

 SELECT a1
FROM t1 INNER JOIN t2 on t1.a1=t2.a1
  

Ответ №4:

Да, вы должны указать условие соединения:

ИЗ t1 ВНУТРЕННЕЕ СОЕДИНЕНИЕ t2 в t1.f = t2.f