Поддерживаемые 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 в базе данных Ora...
Операции SQL в базе данных Ora... 1582 просмотров Antoni Wed, 11 Apr 2018, 12:22:28
Операторы SQL для работы с баз...
Операторы SQL для работы с баз... 2687 просмотров sepia Mon, 16 Apr 2018, 13:56:44
Вызов кода PL/SQL из других яз...
Вызов кода PL/SQL из других яз... 1662 просмотров Максим Николенко Fri, 19 Jan 2018, 05:23:34
Тип данных RAW в PL/SQL
Тип данных RAW в PL/SQL 1544 просмотров Doctor Thu, 12 Jul 2018, 08:41:33

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

Будьте первым прокомментировавшим
Пожалуйста, авторизуйтесь, для комментирования