Терадата - присоединяется
Объединение используется для объединения записей из более чем одной таблицы. Таблицы объединяются на основе общих столбцов / значений из этих таблиц.
Доступны разные типы объединений.
- Внутреннее соединение
- Левое внешнее соединение
- Правое внешнее соединение
- Полное внешнее соединение
- Самостоятельное присоединение
- Крестовое соединение
- Декартово производственное объединение
ВНУТРЕННЕЕ СОЕДИНЕНИЕ
Внутреннее объединение объединяет записи из нескольких таблиц и возвращает значения, существующие в обеих таблицах.
Синтаксис
Ниже приводится синтаксис оператора INNER JOIN.
SELECT col1, col2, col3….
FROM
Table-1
INNER JOIN
Table-2
ON (col1 = col2)
<WHERE condition>;
пример
Рассмотрим следующую таблицу сотрудников и таблицу заработной платы.
Работник № | Имя | Фамилия | Дата присоединения | Отдел Нет | День рождения |
---|---|---|---|---|---|
101 | Майк | Джеймс | 27.03.2005 | 1 | 05.01.1980 |
102 | Роберт | Уильямс | 25.04.2007 | 2 | 05.03.1983 |
103 | Питер | Павел | 21.03.2007 | 2 | 01.04.1983 |
104 | Alex | Стюарт | 01.02.2008 | 2 | 06.11.1984 |
105 | Роберт | Джеймс | 04.01.2008 | 3 | 01.12.1984 |
Работник № | Валовой | Удержание | NetPay |
---|---|---|---|
101 | 40 000 | 4 000 | 36 000 |
102 | 80 000 | 6000 | 74 000 |
103 | 90 000 | 7 000 | 83 000 |
104 | 75 000 | 5 000 | 70 000 |
Следующий запрос объединяет таблицу Employee и таблицу Salary в общем столбце EmployeeNo. Каждой таблице назначается псевдоним A и B, а ссылки на столбцы имеют правильный псевдоним.
SELECT A.EmployeeNo, A.DepartmentNo, B.NetPay
FROM
Employee A
INNER JOIN
Salary B
ON (A.EmployeeNo = B. EmployeeNo);
Когда вышеуказанный запрос выполняется, он возвращает следующие записи. Сотрудник 105 не включается в результат, поскольку у него нет соответствующих записей в таблице Salary.
*** Query completed. 4 rows found. 3 columns returned.
*** Total elapsed time was 1 second.
EmployeeNo DepartmentNo NetPay
----------- ------------ -----------
101 1 36000
102 2 74000
103 2 83000
104 2 70000
ВНЕШНЕЕ СОЕДИНЕНИЕ
LEFT OUTER JOIN и RIGHT OUTER JOIN также объединяют результаты из нескольких таблиц.
LEFT OUTER JOIN возвращает все записи из левой таблицы и возвращает только совпадающие записи из правой таблицы.
RIGHT OUTER JOIN возвращает все записи из правой таблицы и возвращает только совпадающие строки из левой таблицы.
FULL OUTER JOINобъединяет результаты как LEFT OUTER, так и RIGHT OUTER JOINS. Он возвращает как совпадающие, так и несовпадающие строки из соединенных таблиц.
Синтаксис
Ниже приведен синтаксис оператора OUTER JOIN. Вам необходимо использовать одну из опций LEFT OUTER JOIN, RIGHT OUTER JOIN или FULL OUTER JOIN.
SELECT col1, col2, col3….
FROM
Table-1
LEFT OUTER JOIN/RIGHT OUTER JOIN/FULL OUTER JOIN
Table-2
ON (col1 = col2)
<WHERE condition>;
пример
Рассмотрим следующий пример запроса LEFT OUTER JOIN. Он возвращает все записи из таблицы Employee и соответствующие записи из таблицы Salary.
SELECT A.EmployeeNo, A.DepartmentNo, B.NetPay
FROM
Employee A
LEFT OUTER JOIN
Salary B
ON (A.EmployeeNo = B. EmployeeNo)
ORDER BY A.EmployeeNo;
Когда вышеуказанный запрос выполняется, он дает следующий результат. Для сотрудника 105 значение NetPay равно ПУСТО (NULL), поскольку для него нет соответствующих записей в таблице Salary.
*** Query completed. 5 rows found. 3 columns returned.
*** Total elapsed time was 1 second.
EmployeeNo DepartmentNo NetPay
----------- ------------ -----------
101 1 36000
102 2 74000
103 2 83000
104 2 70000
105 3 ?
КРЕСТНОЕ СОЕДИНЕНИЕ
Cross Join объединяет каждую строку из левой таблицы с каждой строкой из правой таблицы.
Синтаксис
Ниже приводится синтаксис оператора CROSS JOIN.
SELECT A.EmployeeNo, A.DepartmentNo, B.EmployeeNo,B.NetPay
FROM
Employee A
CROSS JOIN
Salary B
WHERE A.EmployeeNo = 101
ORDER BY B.EmployeeNo;
Когда вышеуказанный запрос выполняется, он дает следующий результат. EmployeeNo 101 из таблицы Employee объединяется с каждой записью из таблицы Salary.
*** Query completed. 4 rows found. 4 columns returned.
*** Total elapsed time was 1 second.
EmployeeNo DepartmentNo EmployeeNo NetPay
----------- ------------ ----------- -----------
101 1 101 36000
101 1 104 70000
101 1 102 74000
101 1 103 83000