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

Содержание

Слайд 2

Цели Создавать запрос для получения данных из нескольких таблиц Присоединять таблицу

Цели

Создавать запрос для получения данных из нескольких таблиц
Присоединять таблицу к себе

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

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

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

Слайд 4

Соединенная таблица Соединенная таблица – это таблица, полученная из двух других

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

Соединенная таблица – это таблица, полученная из двух других (реальных

или производных от них) таблиц в соответствии с правилами соединения конкретного типа.
Общий синтаксис описания соединенной таблицы:

T1 тип_соединения T2 [условие_соединения]

Слайд 5

Типы соединений Перекрестное соединение CROSS JOIN Соединения с сопоставлениями строк T1

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

Перекрестное соединение
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

Перекрестное соединение
Соединенную таблицу образуют все возможные сочетания строк из T1 и

T2 (т. е. их декартово произведение), а набор ее столбцов объединяет в себе столбцы Т1 со следующими за ними столбцами Т2.

T1 CROSS JOIN T2

SELECT last_name, department_name
FROM employees
CROSS JOIN departments;

Слайд 7

INNER JOIN Для каждой строки R1 из Т1 в результирующей таблице

INNER JOIN

Для каждой строки R1 из Т1 в результирующей таблице содержится

строка для каждой строки в Т2, удовлетворяющей условию соединения с R1.

SELECT e.employee_id, e.last_name, e.department_id
FROM employees e
INNER JOIN departments d
ON (e.department_id = d.department_id);

Слайд 8

LEFT OUTER JOIN Сначала выполняется внутреннее соединение (INNER JOIN). Затем в

LEFT OUTER JOIN

Сначала выполняется внутреннее соединение (INNER JOIN). Затем в результат

добавляются все строки из Т1, которым не соответствуют никакие строки в Т2, а вместо значений столбцов Т2 вставляются NULL.

SELECT e.employee_id, e.last_name, e.department_id
FROM employees e
LEFT JOIN departments d
ON (e.department_id = d.department_id);

Слайд 9

RIGHT OUTER JOIN Сначала выполняется внутреннее соединение (INNER JOIN). Затем в

RIGHT OUTER JOIN

Сначала выполняется внутреннее соединение (INNER JOIN). Затем в результат

добавляются все строки из Т2, которым не соответствуют никакие строки в Т1, а вместо значений столбцов Т1 вставляются NULL.

SELECT e.employee_id, e.last_name, e.department_id
FROM employees e
RIGHT JOIN departments d
ON (e.department_id = d.department_id);

Слайд 10

FULL OUTER JOIN Сначала выполняется внутреннее соединение (INNER JOIN). Затем в

FULL OUTER JOIN

Сначала выполняется внутреннее соединение (INNER JOIN). Затем в результат

добавляются все строки из Т1, которым не соответствуют никакие строки в Т2, а вместо значений столбцов Т2 вставляются NULL. И наконец, в результат включаются все строки из Т2, которым не соответствуют никакие строки в Т1, а вместо значений столбцов Т1 вставляются NULL.

SELECT e.employee_id, e.last_name
FROM employees e
FULL JOIN departments d
ON (e.department_id = d.department_id);

Слайд 11

NATURAL JOIN Выражение NATURAL JOIN основывается на всех колонках двух таблиц,

NATURAL JOIN

Выражение NATURAL JOIN основывается на всех колонках двух таблиц,

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

Соединение с помощью Natural Join SELECT department_id, department_name, location_id, city FROM departments NATURAL JOIN locations;

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

SELECT department_id, department_name, location_id, city
FROM

departments
NATURAL JOIN locations;
Слайд 13

USING Clause Если несколько колонок имеют одинаковые названия и различные типы

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);

Соединение с помощью 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.

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

MANAGER_ID в таблице WORKER равно
EMPLOYEE_ID

в таблице MANAGER.
Слайд 18

Соединение с помощью ON Clause (Self-Join) SELECT e.last_nameemp, m.last_name mgr FROM

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

SELECT e.last_nameemp, m.last_name mgr
FROM

employees e
JOIN employees m
ON (e.manager_id = m.employee_id);
Слайд 19

Дополнительные условия при соединении SELECT e.employee_id, e.last_name, e.department_id, d.department_id, d.location_id FROM

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

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 employee_id, city, department_name

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

SELECT employee_id, city, department_name

FROM employees e
JOIN departments d
ON d.department_id = e.department_id
JOIN locations l
ON d.location_id = l.location_id;
Слайд 21

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

Non-Equijoins

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


самой высокой зарплатой в таблице JOB_GRADES