Учебники

Teradata — Joins

Объединение используется для объединения записей из более чем одной таблицы. Таблицы объединяются на основе общих столбцов / значений из этих таблиц.

Существуют разные типы соединений.

  • Внутреннее соединение
  • Левое внешнее соединение
  • Правое внешнее соединение
  • Полное внешнее соединение
  • Самостоятельное присоединение
  • Перекрестное соединение
  • Декартово-Производственное Объединение

ВНУТРЕННЕЕ СОЕДИНЕНИЕ

Внутреннее объединение объединяет записи из нескольких таблиц и возвращает значения, которые существуют в обеих таблицах.

Синтаксис

Ниже приводится синтаксис оператора INNER JOIN.

SELECT col1, col2, col3…. 
FROM  
Table-1 
INNER JOIN 
Table-2 
ON (col1 = col2) 
<WHERE condition>;

пример

Рассмотрим следующую таблицу сотрудников и таблицу зарплат.

Сотрудник № Имя Фамилия JoinedDate DepartmentNo Дата рождения
101 Майк Джеймс 3/27/2005 1 1/5/1980
102 Роберт Williams 4/25/2007 2 3/5/1983
103 Питер Павел 3/21/2007 2 4/1/1983
104 Alex Стюарт 2/1/2008 2 11/6/1984
105 Роберт Джеймс 1/4/2008 3 12/1/1984
Сотрудник № Валовой дедукция NetPay
101 40000 4000 36000
102 80000 6000 74000
103 90000 7000 83000
104 75000 5000 70000

Следующий запрос объединяет таблицу 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 не включен в результат, поскольку у него нет соответствующих записей в таблице зарплаты.

*** 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 возвращает все записи из правой таблицы и возвращает только совпадающие строки из левой таблицы.

  • ПОЛНОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ объединяет результаты как ЛЕВЫХ ВНЕШНИХ, так и ПРАВИЛЬНЫХ ВНЕШНИХ СОЕДИНЕНИЙ. Он возвращает как совпадающие, так и не совпадающие строки из соединенных таблиц.

LEFT OUTER JOIN возвращает все записи из левой таблицы и возвращает только совпадающие записи из правой таблицы.

RIGHT OUTER JOIN возвращает все записи из правой таблицы и возвращает только совпадающие строки из левой таблицы.

ПОЛНОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ объединяет результаты как ЛЕВЫХ ВНЕШНИХ, так и ПРАВИЛЬНЫХ ВНЕШНИХ СОЕДИНЕНИЙ. Он возвращает как совпадающие, так и не совпадающие строки из соединенных таблиц.

Синтаксис

Ниже приводится синтаксис оператора 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, поскольку в таблице зарплат нет соответствующих записей.

*** 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.