Поддерживаемые Oracle типы соединений в SQL: JOIN и другие

Использование JOIN соединений в SQL запросе в базе данных Oracle на примерахВ Oracle поддерживается несколько типов соединений, отличающихся способом, которым производится объединение строк из двух или более таблиц или представлений. В этой заметке моего блога будут описаны типы соединений, применяемые в Oracle наиболее часто.

Эквисоединение

При эквисоединении (equi-join) две или более таблиц соединяются на основании условия равенства между столбцами. Другими словами, один и тот же столбец имеет одинаковое значение во всех соединяемых таблицах. Ниже приведен пример применения эквисоединения: 

SQL> SELECT e.last_name, d.dept
FROM emp e, dept d WHERE e.emp_id = d.emp_id;

Для показанного выше оператора соединения также можно использовать и следующий новый синтаксис:

SQL> SELECT e.last_name, d.dept
FROM emp e JOIN dept d
USING (emp_id); 

При желании соединить несколько столбцов, можно перечислить их имена в виде разделенного запятыми списка, например: USING (dept_id, emp_name).

 

Естественное соединение

Естественным соединением (natural join) называется эквисоединение, при котором столбцы, которые должны сопоставляться для выполнения соединения, специально не указываются. Oracle автоматически определяет подлежащие соединению столбцы на основании совпадающих столбцов в двух таблицах. Ниже приведен пример применения естественного соединения:

SQL> SELECT e.last_name, d.dept
FROM emp e NATURAL JOIN dept d;

В этом примере условием для выполнения соединения служит наличие идентичных значений в столбце last_name в таблицах emp и dept.

 

Рефлексивное соединение

Под рефлексивным соединением (self join) подразумевается соединение таблицы с самой собой за счет использования псевдонимов. В следующем примере осуществляется соединение таблицы employees с самой собой при помощи псевдонима с удалением всех дублированных строк. 

SQL> DELETE FROM employees X WHERE ROWID >
2 (select MIN(rowid) FROM employees Y
3 where X.key_values = Y.key_values);

Использование JOIN объединения в запросах к базе данных Oracle с примером 

Внутреннее соединение

Внутреннее соединение (inner join), также называемое простым соединением (simple join), предусматривает возврат всех строк, которые удовлетворяют указанному условию соединения. Раньше в синтаксисе внутреннего соединения для указания того, каким образом должны соединяться таблицы, нужно было использовать конструкцию WHERE, например, так: 

SQL> SELECT e.flast_name, d.dept
FROM emp e, dept d WHERE e.emp_id = d.emp_id;

Теперь Oracle позволяет задавать критерии соединения в синтаксисе внутреннего (или простого) соединения за счет применения новой конструкции ON или USING, например: 

SQL> SELECT DISTINCT NVL(dname, 'No Dept'),
COUNT(empno) nbr_emps
FROM emp JOIN DEPT
ON emp.deptno = dept.deptno
WHERE emp.job IN ('MANAGER', 'SALESMAN', 'ANALYST')
GROUP BY dname;

 

Внешнее соединение

Внешнее соединение (outer join) применяется для возврата всех строк, которые удовлетворяют указанному условию соединения, плюс некоторых или всех строк из таблицы, в которой нет подходящих строк, удовлетворяющих указанному условию соединения. Существуют три вида внешнего соединения: левое внешнее соединение (left outer join), правое внешнее соединение (right outer join) и полное внешнее соединение (full outer join). В операторе полного внешнего соединения слово OUTER обычно опускается.

Oracle позволяет использовать операцию внешнего соединения, подразумевающую применение знака плюс (+) для обозначения недостающих значений в одной таблице, но рекомендует лучше использовать вместо нее более новый синтаксис соединения ISO/ANSI. Ниже приведен пример типичного запроса с оператором полного внешнего соединения: 

SQL> SELECT DISTINCT NVL(dept_name, 'No Dept') deptname,
COUNT(empno) nbr_emps
FROM emp FULL JOIN dept
ON dept.deptno = emp.deptno
GROUP BY dname;

Вас заинтересует / Intresting for you:

SQL: Правила выполнения однота...
SQL: Правила выполнения однота... 1442 просмотров Дэйзи ак-Макарова Sat, 31 Jul 2021, 06:47:05
Значения NULL в языке SQL: отс...
Значения NULL в языке SQL: отс... 2590 просмотров Antoni Mon, 21 Jun 2021, 19:57:18
Типы данных SQL: стандарт ANSI...
Типы данных SQL: стандарт ANSI... 4857 просмотров Дэн Sat, 05 Jun 2021, 09:43:17
Операции SQL в базе данных Ora...
Операции SQL в базе данных Ora... 6769 просмотров Antoni Wed, 11 Apr 2018, 12:22:28
Войдите чтобы комментировать