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

Содержание

Слайд 2

А.М. Гудов Цели занятия Команды SELECT для выборки данных из более,

А.М. Гудов

Цели занятия

Команды SELECT для выборки данных из более, чем одной

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

А.М. Гудов Что такое соединение? Соединение используется для запроса данных из

А.М. Гудов

Что такое соединение?

Соединение используется для запроса данных из более, чем

одной таблицы.
Строки соединяются с помощью общих значений - как правило, значений первичных и внешних ключей.
Способы соединения:
Эквисоединение;
Не-эквисоединение
Внешнее соединение;
Соединение таблицы с собой;
Операторы множеств.
Слайд 4

А.М. Гудов S_EMP Table ID LAST_NAME DEPT_ID -- --------------- ------- 1

А.М. Гудов

S_EMP Table
ID LAST_NAME DEPT_ID
-- --------------- -------
1 Velasquez 50
2 Ngao 41

3 Nagayama 31
4 Quick-To-See 10
5 Ropeburn 50
6 Urguhart 41
7 Menchu 42
8 Biri 43
9 Catchpole 44
10 Havel 45
11 Magee 31
12 Giljum 32
13 Sedeghi 33
14 Nguyen 34
15 Dumas 35
16 Maduro 41

Отношения между таблицами

S_DEPT Table
ID NAME REGION_ID
-- --------------- ---------
30 Finance 1
31 Sales 1
32 Sales 2
43 Operations 3
50 Administration 1

S_REGION Table
ID NAME
-- ---------------------
1 North America
2 South America
3 Africa / Middle East
4 Asia
5 Europe

Слайд 5

А.М. Гудов Декартово произведение Декартово произведения образуется , если: Опущено условие

А.М. Гудов

Декартово произведение

Декартово произведения образуется , если:
Опущено условие соединения.
Условие соединения недействительно.
Все

строки первой таблицы соединяются со всеми строками второй таблицы.
Во избежание получения декартова произведения предложение WHERE всегда должно включать допустимое условие соединения.
Слайд 6

А.М. Гудов Простой запрос с соединением В предложении WHERE указывается допустимое

А.М. Гудов

Простой запрос с соединением

В предложении WHERE указывается допустимое условие соединения.
Читать

предложение легче, если каждому имени столбца предшествует имя таблицы.
Если столбцы с одинаковыми именами имеются более, чем в одной таблице, имя таблицы перед именем столбца обязательно.

SELECT table.column, table.column
FROM table1, table2
WHERE table1.column1 = table2.column2;

Слайд 7

А.М. Гудов Эквисоединение: пример S_EMP S_DEPT LAST_NAME DEPT_ID ID NAME ---------

А.М. Гудов

Эквисоединение: пример

S_EMP

S_DEPT

LAST_NAME DEPT_ID ID NAME --------- ------- -- --------------- Velasquez 50 50 Administration Ngao 41 41 Operations Nagayama 31 31 Sales Ropeburn 50 50 Administration Urguhart 41 41 Operations Menchu 42 42 Operations Biri 43 43 Operations Havel 45 45 Operations ... ...

Слайд 8

А.М. Гудов Различение столбцов с одинаковыми именами Для различения одноименных столбцов

А.М. Гудов

Различение столбцов с одинаковыми именами

Для различения одноименных столбцов из разных

таблиц используются префиксы в виде имен таблиц.
Использование префиксов в виде имен таблиц увеличивает производительность.
Одноименные столбцы из разных таблиц можно различать по их псевдонимам.
Слайд 9

А.М. Гудов Дополнительные условия поиска и оператор AND S_EMP S_DEPT LAST_NAME

А.М. Гудов

Дополнительные условия поиска и оператор AND

S_EMP

S_DEPT

LAST_NAME DEPT_ID ID NAME --------- ------- -- --------------- Velasquez 50 50 Administration Ngao 41 41 Operations Nagayama 31 31 Sales Ropeburn 50 50 Administration Urguhart 41 41 Operations Menchu 42 42 Operations Biri 43 43 Operations Havel 45 45 Operations ... ...

Дополнительное условие

Слайд 10

А.М. Гудов Псевдонимы таблиц Перед именами столбцов рекомендуется указывать псевдонимы таблиц.

А.М. Гудов

Псевдонимы таблиц

Перед именами столбцов рекомендуется указывать псевдонимы таблиц.
Псевдонимы таблиц действительны

только для данной команды SELECT.
Если псевдоним таблицы создан, перед ссылкой на столбец следует указывать его, а не имя таблицы.

SQL> SELECT c.name "Customer Name",
2 c.region_id "Region ID",
3 r.name "Region Name"
4 FROM s_customer c, s_region r
5 WHERE c.region_id = r.id;

Слайд 11

А.М. Гудов Не-эквисоединения: пример Не-эквисоединение возникает в случае, если ни один

А.М. Гудов

Не-эквисоединения: пример

Не-эквисоединение возникает в случае, если ни один столбец одной

таблицы не соответствует точно столбцу другой таблицы.
Условие соединения содержит оператор, не являющийся оператором равенства (=)

SQL> SELECT e.ename, e.job, e.sal, s.grade
2 FROM emp e, salgrade s
3 WHERE e.sal BETWEEN s.losal AND s.hisal;

Слайд 12

А.М. Гудов Внешние соединения Внешнее соединение используется для выборки строк, не

А.М. Гудов

Внешние соединения

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

условиям соединения.
Оператором внешнего соединения является знак плюс заключенный в скобки (+).
Этот оператор указывается с той стороны, где нет значения, по которому можно было бы произвести соединение.

SELECT table.column, table.column
FROM table1, table2
WHERE table1.column(+) = table2.column;

Слайд 13

А.М. Гудов Внешние соединения S_EMP S_CUSTOMER SALES_ LAST_NAME ID REP_ID NAME

А.М. Гудов

Внешние соединения

S_EMP

S_CUSTOMER

SALES_ LAST_NAME ID REP_ID NAME --------- -- ------ -------------- Magee 11 11 Womansport Magee 11 11 Beisbol Si! Magee 11 11 Ojibway Retail Giljum 12 12 Unisports Giljum 12 12 Futbol Sonora Sedeghi 13 13 Hamada Sport Dumas 15 15 Sportique Sweet Rock Sports

Клиент “Sweet

Rock Sports не имеет торгового представителя
Слайд 14

А.М. Гудов Внешние соединения: пример Оператор внешнего соединения может использоваться только

А.М. Гудов

Внешние соединения: пример

Оператор внешнего соединения может использоваться только на одной

стороне выражения.
Условие, предполагающее внешнее соединение, не может:
Использовать оператор IN.
Быть связанным с другими условиями с помощью оператора OR.

Вывод имени торгового представителя и названия каждой фирмы-клиента, включая тех, кто не имеет торгового представителя.

SQL> SELECT e.last_name, e.id, c.name
2 FROM s_emp e, s_customer c
3 WHERE e.id (+) = c.sales_rep_id
4 ORDER BY e.id;

Слайд 15

А.М. Гудов Соединение таблицы с собой S_EMP (WORKER) S_EMP (MANAGER) LAST_NAME

А.М. Гудов

Соединение таблицы с собой

S_EMP (WORKER)

S_EMP (MANAGER)

LAST_NAME MANAGER_ID ID LAST_NAME --------- ---------- -- ---------- Ngao 1 1 Velasquez Nagayama 1 1 Velasquez Ropeburn 1 1 Velasquez Urguhart 2 2 Ngao Menchu 2 2 Ngao

Biri 2 2 Ngao Magee 3 3 Nagayma Giljum 3 3 Nagayma ... ...
Слайд 16

А.М. Гудов Соединение таблицы с собой Строки таблицы соединяются со строками

А.М. Гудов

Соединение таблицы с собой

Строки таблицы соединяются со строками этой же

самой таблицы.
В предложении FROM наличие двух таблиц имитируется путем использования двух псевдонимов таблицы.

SQL> SELECT worker.last_name||' works for '||
2 manager.last_name
3 FROM s_emp worker, s_emp manager
4 WHERE worker.manager_id = manager.id;

Слайд 17

А.М. Гудов Заключение Имеется несколько способов соединения таблиц: Эквисоединение Не-эквисоединение Внешнее

А.М. Гудов

Заключение

Имеется несколько способов соединения таблиц:
Эквисоединение
Не-эквисоединение
Внешнее соединение
Соединение с собой
Отсутствие предложения WHERE

приводит к возникновению декартова произведения таблиц.
Использование псевдонимов таблиц ускоряет доступ к базе данных.
Для соединения таблицы с собой использование псевдонимов обязательно.
Слайд 18

А.М. Гудов Обзор практического занятия Соединение таблиц с помощью эквисоединений. Выполнение

А.М. Гудов

Обзор практического занятия

Соединение таблиц с помощью эквисоединений.
Выполнение внешних соединений и

соединений таблицы с собой.
Включение дополнительных условий.