Выборка информации из нескольких таблиц
Цели
Получение информации из нескольких таблиц
Соединенная таблица
Типы соединений
Перекрестное соединение
INNER JOIN
LEFT OUTER JOIN
RIGHT OUTER JOIN
FULL OUTER JOIN
NATURAL JOIN
Соединение с помощью Natural Join
USING Clause
Соединение с помощью USING Clause
Правила для одноименных колонок
Использование псевдонимов
Соединение с помощью ON Clause (Self-Join)
Дополнительные условия при соединении
Соединение нескольких таблиц с помощью ON Clause
Non-Equijoins
Non-Equijoins
673.80K
Категория: Базы данныхБазы данных

Выборка информации из нескольких таблиц

1. Выборка информации из нескольких таблиц

2. Цели

• Создавать запрос для получения данных из нескольких таблиц
• Присоединять таблицу к себе самой, используя self-join
• Узнать о внешних соединениях
• Создавать Декартово произведение строк двух или нескольких
таблиц

3. Получение информации из нескольких таблиц

4. Соединенная таблица

• Соединенная таблица – это таблица, полученная из двух других
(реальных или производных от них) таблиц в соответствии с
правилами соединения конкретного типа.
• Общий синтаксис описания соединенной таблицы:
T1 тип_соединения T2 [условие_соединения]

5. Типы соединений

• Перекрестное соединение
• CROSS JOIN
• Соединения с сопоставлениями строк
T1 {[INNER]|{LEFT|RIGHT|FULL} [OUTER]} JOIN T2
ON логическое_выражение
T1 {[INNER]|{LEFT|RIGHT|FULL} [OUTER]} JOIN T2
USING (список столбцов соединения)
T1 NATURAL {[INNER]|{LEFT|RIGHT|FULL} [OUTER]} JOIN T2

6. Перекрестное соединение

T1 CROSS JOIN T2
• Соединенную таблицу образуют все возможные сочетания строк
из T1 и T2 (т. е. их декартово произведение), а набор ее столбцов
объединяет в себе столбцы Т1 со следующими за ними
столбцами Т2.
SELECT last_name, department_name
FROM employees
CROSS JOIN departments;

7. INNER JOIN

• Для каждой строки R1 из Т1 в результирующей таблице
содержится строка для каждой строки в Т2, удовлетворяющей
условию соединения с R1.
SELECT
FROM
INNER
ON
e.employee_id, e.last_name, e.department_id
employees e
JOIN departments d
(e.department_id = d.department_id);

8. LEFT OUTER JOIN

• Сначала выполняется внутреннее соединение (INNER JOIN). Затем
в результат добавляются все строки из Т1, которым не
соответствуют никакие строки в Т2, а вместо значений столбцов
Т2 вставляются NULL.
SELECT
FROM
LEFT
ON
e.employee_id, e.last_name, e.department_id
employees e
JOIN departments d
(e.department_id = d.department_id);

9. RIGHT OUTER JOIN

• Сначала выполняется внутреннее соединение (INNER JOIN). Затем
в результат добавляются все строки из Т2, которым не
соответствуют никакие строки в Т1, а вместо значений столбцов
Т1 вставляются NULL.
SELECT
FROM
RIGHT
ON
e.employee_id, e.last_name, e.department_id
employees e
JOIN departments d
(e.department_id = d.department_id);

10. FULL OUTER JOIN

• Сначала выполняется внутреннее соединение (INNER JOIN). Затем
в результат добавляются все строки из Т1, которым не
соответствуют никакие строки в Т2, а вместо значений столбцов
Т2 вставляются NULL. И наконец, в результат включаются все
строки из Т2, которым не соответствуют никакие строки в Т1, а
вместо значений столбцов Т1 вставляются NULL.
SELECT
FROM
FULL
ON
e.employee_id, e.last_name
employees e
JOIN departments d
(e.department_id = d.department_id);

11. NATURAL JOIN

• Выражение NATURAL JOIN основывается на всех
колонках двух таблиц, имеющих одинаковые
названия
• Выбирает строки из двух таблиц, имеющих
одинаковые значения в совпадающих столбцах
• Если у совпадающих колонок разные типы данных
– это ошибка.

12. Соединение с помощью Natural Join

SELECT department_id, department_name, location_id, city
FROM departments
NATURAL JOIN locations;

13. USING Clause

• Если несколько колонок имеют одинаковые названия и
различные типы данных NATURAL JOIN может быть изменен на
USING Clause.
• Используйте USING clause в тех случаях, когда требуется
соединить таблицы по одному столбцу, при наличии нескольких
совпадающих
• Не используйте имена таблиц и альясы для колонок, по которым
идет соединение
• NATURAL JOIN и USING clauses взамиоисключаемые.

14. Соединение с помощью USING Clause

SELECT employees.employee_id, employees.last_name,
departments.location_id, department_id
FROM employees JOIN departments
USING (department_id);

15. Правила для одноименных колонок

• Используйте префиксы для определения принадлежности
столбца к таблице
• Используйте префиксы для повышения производительности
• Используйте псевдонимы (альясы) для колонок, имеющих
одинаковые названия, но принадлежащим разным таблицам
• Не используйте псевдонимы для столбцов, которые
определены в предложении USING и перечислены в другом
месте в операторе SQL

16. Использование псевдонимов

• Используйте псевдонимы таблиц для упрощения
запросов
• Используйте псевдонимы для повышения
производительности
SELECT e.employee_id, e.last_name,
d.location_id, department_id
FROM employees e JOIN departments d
USING (department_id);

17.

Соединение с помощью ON Clause (Self-Join)
MANAGER_ID в таблице WORKER равно
EMPLOYEE_ID в таблице MANAGER.

18. Соединение с помощью ON Clause (Self-Join)

SELECT
FROM
JOIN
ON
e.last_nameemp, m.last_name mgr
employees e
employees m
(e.manager_id = m.employee_id);

19. Дополнительные условия при соединении

SELECT e.employee_id, e.last_name, e.department_id,
d.department_id, d.location_id
FROM employees e
JOIN departments d
ON (e.department_id = d.department_id)
AND e.manager_id = 149;

20. Соединение нескольких таблиц с помощью ON Clause

SELECT
FROM
JOIN
ON
JOIN
ON
employee_id, city, department_name
employees e
departments d
d.department_id = e.department_id
locations l
d.location_id = l.location_id;

21. Non-Equijoins

Зарплата в таблице EMPLOYEES
должна быть между самой низкой зарплатой и
самой высокой зарплатой в таблице JOB_GRADES

22. Non-Equijoins

SELECT
FROM
JOIN
ON
e.last_name, e.salary, j.grade_level
employees e
job_grades j
e.salary BETWEEN j.lowest_sal AND j.highest_sal;
English     Русский Правила