ВЫБОРКА ДАННЫХ ИЗ НЕСКОЛЬКИХ ТАБЛИЦ

33

Upload: nascha

Post on 15-Jan-2016

98 views

Category:

Documents


0 download

DESCRIPTION

ВЫБОРКА ДАННЫХ ИЗ НЕСКОЛЬКИХ ТАБЛИЦ. Соединение используется для выборки данных из более, чем одной таблицы Строки соединяются с помощью общих значений - как правило, значений первичных и внешних ключей Способы соединения: Эквисоединение Не-эквисоединение Внешнее соединение - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: ВЫБОРКА ДАННЫХ ИЗ НЕСКОЛЬКИХ ТАБЛИЦ
Page 2: ВЫБОРКА ДАННЫХ ИЗ НЕСКОЛЬКИХ ТАБЛИЦ

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

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

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

Page 3: ВЫБОРКА ДАННЫХ ИЗ НЕСКОЛЬКИХ ТАБЛИЦ

S_EMP Table ID LAST_NAME DEPT_ID----- ----------------------------- ------------- 1 Velasquez 50 2 Ngao 41 3 Nagayama S_DEPT Table 4 Quick-To-See ID NAME REGION_ID 5 Ropeburn ---- ---------------------------- ----------------- 6 Urguhart 30 Finance 1 7 Menchu 31 Sales 1 8 Biri 32 Sales 9 Catchpole 43 Operations S_REGION Table 10 Havel 50 Administration ID NAME 11 Magee 31 ----- ---------------------------- 12 Giljum 32 1 North America 13 Sedeghi 33 2 South America 14 Nguyen 34 3 Africa / Middle East 15 Dumas 35 4 Asia 16 Maguro 41 5 Europe

Page 4: ВЫБОРКА ДАННЫХ ИЗ НЕСКОЛЬКИХ ТАБЛИЦ

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

Результат: Все строки первой таблицы соединяются со всеми

строками второй Во избежание получения декартова произведения

предложение WHERE всегда должно включать допустимое условие соединения

ПРАВИЛО: количество условий соединения = количество таблиц - 1

Page 5: ВЫБОРКА ДАННЫХ ИЗ НЕСКОЛЬКИХ ТАБЛИЦ

Для отображения данных из двух или более связанных таблиц необходимо задать простое условие соединения в предложении WHERE

Синтаксис:SELECT таблица.столбец, таблица.столбецFROM таблица1, таблица2WHERE таблица1.столбец1 = таблица2.столбец2где: таблица, столбец таблица и столбец, из которых

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

взаимосвязь)

Page 6: ВЫБОРКА ДАННЫХ ИЗ НЕСКОЛЬКИХ ТАБЛИЦ

LAST_NAME DEPT_ID-------------- -----------Velasquez 50Ngao 41 Nagayama 31 Ropeburn 50Urguhart 41Menchu 42 Biri 43 Havel 45

ID NAME

---------- -----------50 Administration41 Operations31 Sales 50 Administration 41 Operations42 Operations43 Operations45 Operations

SS_DEPTS_EMPS_EMP

Page 7: ВЫБОРКА ДАННЫХ ИЗ НЕСКОЛЬКИХ ТАБЛИЦ

Для различения одноименных столбцов из разных таблиц используются префиксы в виде имен таблиц

Использование префиксов в виде имен таблиц увеличивает производительность

Одноименные столбцы из разных таблиц можно различать по их псевдонимам

Page 8: ВЫБОРКА ДАННЫХ ИЗ НЕСКОЛЬКИХ ТАБЛИЦ

LAST_NAME DEPT_ID-------------- -----------Velasquez 50Ngao 41 Nagayama 31 Ropeburn 50Urguhart 41Menchu 42 Biri 43 Havel 45

ID NAME

---------- -----------50 Administration41 Operations31 Sales 50 Administration 41 Operations42 Operations43 Operations45 Operation

SS_DEPTS_EMPS_EMP

Page 9: ВЫБОРКА ДАННЫХ ИЗ НЕСКОЛЬКИХ ТАБЛИЦ

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

Псевдонимы таблиц действительны только для данной команды SELECT

Если псевдоним таблицы создан, перед ссылкой на столбец следует указывать его, а не не имя таблицыSQL> SELECT с.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;

Page 10: ВЫБОРКА ДАННЫХ ИЗ НЕСКОЛЬКИХ ТАБЛИЦ

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

Условие соединения содержит оператор, не являющийся оператором равенства (=)SELECT e.last_name, e.title, e.salary, s.grade

FROM s_emp e, salgrade s

WHERE e.salary BETWEEN s.losal

AND s.hisal;

Page 11: ВЫБОРКА ДАННЫХ ИЗ НЕСКОЛЬКИХ ТАБЛИЦ

Существует три типа join-выражений:

inner join; outer join; cross join;

Page 12: ВЫБОРКА ДАННЫХ ИЗ НЕСКОЛЬКИХ ТАБЛИЦ

create table t_users ( t_id number(11, 0), t_nick varchar(16), primary key (t_id) ) create table t_resources (t_id

number(11, 0), t_name varchar(16), t_userid number (11, 0), primary key (t_id) )

Page 13: ВЫБОРКА ДАННЫХ ИЗ НЕСКОЛЬКИХ ТАБЛИЦ
Page 14: ВЫБОРКА ДАННЫХ ИЗ НЕСКОЛЬКИХ ТАБЛИЦ

table_name1 join_type join table_name2 on condition …

Page 15: ВЫБОРКА ДАННЫХ ИЗ НЕСКОЛЬКИХ ТАБЛИЦ

Необходим для получения только тех строк, для которых существует соответствие записей главной таблицы и присоединяемой. Иными словами условие condition должно выполняться всегда.

Page 16: ВЫБОРКА ДАННЫХ ИЗ НЕСКОЛЬКИХ ТАБЛИЦ

select t_resources.t_name, t_users.t_nick from t_resources inner join t_users on t_users.t_id = t_resources.t_userid

Page 17: ВЫБОРКА ДАННЫХ ИЗ НЕСКОЛЬКИХ ТАБЛИЦ
Page 18: ВЫБОРКА ДАННЫХ ИЗ НЕСКОЛЬКИХ ТАБЛИЦ

В случае с left join из главной таблицы будут выбраны все записи, даже если в присоединяемой таблице нет совпадений, то есть условие condition не учитывает присоединяемую (правую) таблицу.

Page 19: ВЫБОРКА ДАННЫХ ИЗ НЕСКОЛЬКИХ ТАБЛИЦ

select t_resources.t_name, t_users.t_nick from t_resources left join t_users on t_users.t_id = t_resources.t_userid

Page 20: ВЫБОРКА ДАННЫХ ИЗ НЕСКОЛЬКИХ ТАБЛИЦ
Page 21: ВЫБОРКА ДАННЫХ ИЗ НЕСКОЛЬКИХ ТАБЛИЦ

Необходим для отображения всех возможных комбинаций строк из нескольких таблиц. Иными словами, это объединение результатов left и right join (ключевое слово outer можно опустить).

Page 22: ВЫБОРКА ДАННЫХ ИЗ НЕСКОЛЬКИХ ТАБЛИЦ

select t_resources.t_name, t_users.t_nick from t_resources full join t_users on t_users.t_id = t_resources.t_userid

Page 23: ВЫБОРКА ДАННЫХ ИЗ НЕСКОЛЬКИХ ТАБЛИЦ
Page 24: ВЫБОРКА ДАННЫХ ИЗ НЕСКОЛЬКИХ ТАБЛИЦ
Page 25: ВЫБОРКА ДАННЫХ ИЗ НЕСКОЛЬКИХ ТАБЛИЦ

Этот тип join еще называют декартовым произведением (на английском - cartesian product).

select t_resources.t_name, t_users.t_nick from t_resources, t_users

Page 26: ВЫБОРКА ДАННЫХ ИЗ НЕСКОЛЬКИХ ТАБЛИЦ

Синтаксис

SELECT таблица.столбец, таблица.столбец

FROM таблица1, таблица2

WHERE таблица1.столбец = таблица2.столбец(+); ИЛИ

SELECT таблица.столбец, таблица.столбец

FROM таблица1, таблица2

WHERE таблица1.столбец(+) = таблица2.столбец;

Где: таблица1.столбец = условие, соединяющее

таблица2.столбец таблицы (или задающее их отношение)

(+) символ внешнего соединения; может использоваться на любой стороне условия в предложении WHERE, но не по обеим сторонам. Символ внешнего соединения указывается после имени таблицы, в которой нет соответствующих строк.

Page 27: ВЫБОРКА ДАННЫХ ИЗ НЕСКОЛЬКИХ ТАБЛИЦ

LAST_NAME ID-------------- -----------Magee 11Magee 11 Magee 11 Giljum 12 Giljum 12 Sedeghi 13 Dumas 15

SALES_REP_ID NAME

---------- -----------11 Womanaport11 Beisbol Si11 Ojibway Retail12 Unisports12 Futbol Sonora13 Hamada Sport15 Sportique Sweet Rock Sports

SS_CUSTOMERS_EMPS_EMP

Page 28: ВЫБОРКА ДАННЫХ ИЗ НЕСКОЛЬКИХ ТАБЛИЦ

Вывод имени торгового представителя и названия каждой фирмы-клиента, включая тех, кто не имеет торгового представителяSQL> SELECT e.last_name, e.id, с.name 2 FROM s_emp e, s_customer с 3 WHERE e.id(+) = с.sales_rep_id 4 ORDER BY e.id;

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

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

оператора OR

Page 29: ВЫБОРКА ДАННЫХ ИЗ НЕСКОЛЬКИХ ТАБЛИЦ

LAST_NAME MANAGER_ID-------------- -----------Ngao 1Nagayama 1 Ropeburn 1 Urguhart 2 Menchu 2 Biri 2 Magee 3 Giljum 3 . . .

ID LAST_NAME ----------- -----------

1 Velasquez1 Velasquez1 Velasquez2 Ngao2 Ngao2 Ngao3 Nagayama3 Nagayama

SS_EMP (MANAGER)S_EMPS_EMP (WORKER)(WORKER)

Page 30: ВЫБОРКА ДАННЫХ ИЗ НЕСКОЛЬКИХ ТАБЛИЦ

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

В предложении 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;

Page 31: ВЫБОРКА ДАННЫХ ИЗ НЕСКОЛЬКИХ ТАБЛИЦ

Операторы множеств

• Позволяют объединять результаты разных запросов в единую выборку

• Количество столбцов и последовательность типов данных в списках SELECT запросов должны совпадать- UNION- UNION ALL - INTERSECT- MINUS

Page 32: ВЫБОРКА ДАННЫХ ИЗ НЕСКОЛЬКИХ ТАБЛИЦ

Операторы множеств: пример

SQL> select last_name, manager_id from s_emp

2 union

3 select name, id from s_dept;

LAST_NAME LAST_NAME MANAGER_IDMANAGER_ID-------------------------------------------------- ---------- ----------Administration Administration 5050Biri 2Biri 2Catchpole 2Catchpole 2Chang 9Chang 9Dancs Dancs 1010Dumas Dumas 33……

Page 33: ВЫБОРКА ДАННЫХ ИЗ НЕСКОЛЬКИХ ТАБЛИЦ

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

Отсутствие предложения WHERE приводит к возникновению декартова произведения таблиц

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

Для соединения таблицы с собой использование псевдонимов обязательно