1 / 33

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

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

nascha
Download Presentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

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

  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 Отношения между таблицами

  4. Декартово произведения образуется, если: • Опущено условие соединения • Условие соединения недействительно Результат: • Все строки первой таблицы соединяются со всеми строками второй • Во избежание получения декартова произведения предложение WHERE всегда должно включать допустимое условие соединения ПРАВИЛО: количество условий соединения = количество таблиц - 1 Декартово произведение

  5. Для отображения данных из двух или более связанных таблиц необходимо задать простое условие соединения в предложении WHERE Синтаксис: SELECT таблица.столбец, таблица.столбец FROM таблица1, таблица2 WHERE таблица1.столбец1 = таблица2.столбец2 где: таблица, столбец таблица и столбец, из которых производится выборка данных Таблица1.столбец1= условие, соединяющее таблица2.столбец2 таблицы (или задающее их взаимосвязь) Простой запрос с соединением

  6. сервер S_EMP S_DEPT LAST_NAME DEPT_ID-------------- -----------Velasquez 50Ngao 41 Nagayama 31 Ropeburn 50Urguhart 41Menchu 42 Biri 43 Havel 45 ID NAME ---------- ----------- 50 Administration 41 Operations 31 Sales 50 Administration 41 Operations 42 Operations 43 Operations 45 Operations Эквисоединение: пример

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

  8. сервер S_EMP S_DEPT LAST_NAME DEPT_ID-------------- -----------Velasquez 50Ngao 41 Nagayama 31 Ropeburn 50Urguhart 41Menchu 42 Biri 43 Havel 45 ID NAME ---------- ----------- 50 Administration 41 Operations 31 Sales 50 Administration 41 Operations 42 Operations 43 Operations 45 Operation Дополнительные условия поиска иоператор AND: пример

  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; Псевдонимы таблиц

  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; Не-эквисоединения: пример

  11. Существует три типа join-выражений: inner join; outer join; cross join; Операторы Inner Join и Outer (left, right, full) Join в SQL (Oracle)

  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) ) Пример

  13. Содержимое таблиц

  14. table_name1 join_type join table_name2on condition … Конструкция joinвыглядит так

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

  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 Inner join

  17. Inner join

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

  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 Inner join

  20. Inner join

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

  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 Full outer join

  23. Full outer join

  24. Этот тип join еще называют декартовым произведением (на английском - cartesian product). select t_resources.t_name, t_users.t_nick from t_resources, t_users cross join

  25. Синтаксис SELECT таблица.столбец, таблица.столбец FROM таблица1, таблица2 WHERE таблица1.столбец = таблица2.столбец(+); • ИЛИ SELECT таблица.столбец, таблица.столбец FROM таблица1, таблица2 WHERE таблица1.столбец(+) = таблица2.столбец; Где: таблица1.столбец = условие, соединяющее таблица2.столбецтаблицы (или задающее их отношение) (+) символ внешнего соединения; можетиспользоваться на любой стороне условия в предложении WHERE, но не по обеим сторонам. Символ внешнего соединения указывается после имени таблицы, в которой нет соответствующих строк. ВНЕШНЕЕ СОЕДИНЕНИЕ

  26. сервер S_EMP S_CUSTOMER LAST_NAME ID-------------- -----------Magee 11Magee 11 Magee 11 Giljum 12 Giljum 12 Sedeghi 13 Dumas 15 SALES_REP_ID NAME ---------- ----------- 11 Womanaport 11 Beisbol Si 11 Ojibway Retail 12 Unisports 12 Futbol Sonora 13 Hamada Sport 15 Sportique Sweet Rock Sports Внешние соединения

  27. Вывод имени торгового представителя и названия каждой фирмы-клиента, включая тех, кто не имеет торгового представителя 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 Внешние соединения: пример

  28. сервер S_EMP(WORKER) S_EMP(MANAGER) LAST_NAME MANAGER_ID-------------- -----------Ngao 1Nagayama 1 Ropeburn 1 Urguhart 2 Menchu 2 Biri 2 Magee 3 Giljum 3 . . . ID LAST_NAME ----------- ----------- 1 Velasquez 1 Velasquez 1 Velasquez 2 Ngao 2 Ngao 2 Ngao 3 Nagayama 3 Nagayama Соединение таблицы с собой

  29. Строки таблицы соединяются со строками этой же самой таблицы • В предложении FROM наличие двух таблиц имитируется путем использования двух псевдонимов таблицы SQL> SELECT worker.last_name||' works for ’|| 2 manager.last_name 3 FROM s_empworker, s_empmanager 4 WHERE worker.manager_id = manager.id; Соединение таблицы с собой: пример

  30. Операторы множеств • Позволяют объединять результаты разных запросов в единую выборку • Количество столбцов и последовательность типов данных в списках SELECT запросов должны совпадать • UNION • UNION ALL • INTERSECT • MINUS

  31. Операторы множеств: пример • SQL> select last_name, manager_id from s_emp • 2 union • 3 select name, id from s_dept; LAST_NAME MANAGER_ID ------------------------- ---------- Administration 50 Biri 2 Catchpole 2 Chang 9 Dancs 10 Dumas 3 …

  32. Имеется несколько способов соединения таблиц: • Эквисоединение • Не-эквисоединение • Внешнее соединение • Соединение с собой • Операторы множеств • Отсутствие предложения WHERE приводит к возникновению декартова произведения таблиц • Использование псевдонимов таблиц ускоряет доступ к базе данных • Для соединения таблицы с собой использование псевдонимов обязательно Заключение

More Related