соединения и подзапросы SQL. Соединения и подзапросы в sql. Изучение видов запросов соединения в sql
Скачать 1.18 Mb.
|
Оглавление Введение Наиболее полезны запросы, которые выбирают информацию из нескольких таблиц базы данных. SQL позволяет получить ответы на эти запросы посредством запросов соединения (многотабличных), они соединяют данные из нескольких таблиц. Возможности соединения, являются частью SQL с самых первых дней. Другое понятие – подзапрос, не так широко известно, как понятие соединения, но оно играет важную роль в SQL. Подзапросы SQL, позволяют использовать один запрос как часть другого. Возможность применения одного запроса внутри другого и была причиной появления слова "структурированный" в названии SQL "язык структурированных запросов". Цель практической работы: получение информации из баз данных по средством SQL запросов с использованием запросов соединения и подзапросов на основе Oracle SQL Developer. Задачи: Изучение видов запросов соединения в SQL; Изучение возможностей запросов соединения; Изучение подзапросов; Вывести адреса отделов компании используя данные из двух различных таблиц; Используя подзапрос вывести данные о сотрудниках подчиненных определенному менеджеру; Подзапросы и соединения Соединения в SQL Соединения позволяют выбирать строки одновременно из нескольких таблиц. Эта задача очень важна в практической работе с базами данных. Соединение – это табличная операция, на вход которой подаются две разные таблицы и которая применяет связанные столбцы этих таблиц для того, чтобы объединить их строки в некую одну общую таблицу. С помощью цепочки возможно сгруппировать любое число таблиц. Важность такой операции заключается в том, что аккумулируемые данные редко хранятся в одной таблице. Именно связи между различными таблицами дают возможность анализировать данные как систему. И только анализируя данные о произвольном объекте как единое целое (то есть работая с моделью данных), мы можем получить о нем адекватное представление. Виды соединений В SQL определены специальные операторы, облегчающие выполнение некоторых распространенных операций соединения. Специальные операторы соединения: NATURAL JOIN (Естественное соединение) SPECIFIED JOIN (Явное соединение) подразделяется на: Join c USING; Join c ON; OUTER JOINS: LEFT OUTER JOIN; RIGHT OUTER JOIN; FULL OUTER JOIN; CROSS JOIN (Перекрестное соединение); NATURAL JOIN и SPECIFIED JOIN NATURAL JOIN имеет следующий принцип работы: NATURAL JOIN создает соединение по всем столбцам в двух таблицах с одинаковыми именами. Выбирает строки из двух таблиц, которые имеют одинаковые значения во всех совпадающих столбцах. Если столбцы с одинаковыми именами имеют разные типы данных, возвращается ошибка. На практике создатель базы данных часто использует одно и то же имя для столбца, который содержит идентификатор клиента или номер служащего, во всех таблицах, содержащих эти данные, поэтому зачастую связанные столбцы, используемые при соединении двух таблиц, имеют одно и то же имя в обеих таблицах. В таком случае большинство естественных соединений между двумя таблицами были бы соединениями по равенству на основе имен столбцов, имеющихся в обеих таблицах. Такое соединение в стандарте SQL так и называется - естественное соединение. Пример такого соединения: SELECT ORDER_NUМ , AМOUNT , DESCRI PTION FROM ORDERS NATURAL JOIN PRODUCTS ; Эта инструкция указывает СУБД на необходимость соединения таблиц ORDERS и PRODUCTS по всем столбцам, имеющим в этих таблицах одинаковые имена. В этой ситуации синтаксис USING позволяет явно указать имена связанных столбцов: SELECT ORDER_NUМ, AМOUNT, DESCRIPTION FROM ORDERS JOIN PRODUCTS USING (MFR, PRODUCT}; В данном примере это столбцы MFR и PRODUCT. Пример составления запроса с использованием ON: SELECT ORDER_NUМ, AМOUNT, DESCRI PTION FROM ORDERS JOIN PRODUCTS ON ORDERS. MFR = PRODUCTS. MFR AND ORDERS. PRODUCT = PRODUCTS. PRODUCT; Зачастую соединение с помощью предложения USING оказывается предпочтительнее явного указания NATURAL JOIN. Например, если за поддержку таблиц ORDERS и PRODUCTS отвечают два разных администратора возможна ситуация, когда они оба случайно выбирают одно и то же имя для вновь добавляемого столбца, хотя эти столбцы не имеют между собой ничего общего. В этой ситуации инструкция с применением NATURAL JOIN попытается использовать новые столбцы для соединения таблиц, что, скорее всего, приведет к ошибке. Предложение USING защищает запрос от ошибок, связанных с такими изменениями в структуре базы данных. 1.4 Outer JOINS Соединение между двумя таблицами, которое возвращает результаты ВНУТРЕННЕГО соединения, а также несовпадающие строки из левой (или правой) таблицы, называется левым (или правым) ВНЕШНИМ (LEFT/RIGHT OUTER) соединением. Соединение между двумя таблицами, которое возвращает результаты ВНУТРЕННЕГО соединения, а также результаты левого и правого соединений, является полным ВНЕШНИМ (FULL OUTER) соединением. Cтандартное SQL-соединение потенциально может привести к потере информации, если соединяемые таблицы содержат несвязанные строки. Внешнее соединение является расширением стандартного соединения и исключает возникновение подобной ошибки. В следующем примере информация о работнике «Tom» была утеряна так как он еще не получил назначения ни в один офис: Рис. 1. Результат запроса информации о работниках и их офисах Рис. 2. Пример стандартного запроса и результат запроса FULL OUTER (полное внешнее) соединение является соединением, "сохраняющим информацию" в случае отсутствия необходимой информации в одной из строк таблиц будет выведено значение NULL. Соединение будет происходить по следующему принципу: Начать со внутреннего соединения двух таблиц обычным способом; Для каждой строки первой таблицы, которая не имеет связи ни с одной строкой второй таблицы, добавить в результаты запроса строку со значениями столбцов из первой таблицы, а вместо значений столбцов второй таблицы использовать значения NULL; Для каждой строки второй таблицы, которая не имеет связи ни с одной строкой первой таблицы, добавить в результаты запроса строку со значениями столбцов из второй таблицы, а вместо значений столбцов первой таблицы использовать значения NULL; Рис. 3. Результат запроса с использованием соединения «FULLOUTER» Левое внешнее соединение двух таблиц получается, если выполнить шаги 1 и 2 из предыдущего описания соединения, а шаг 3 пропустить. Таким образом, левое внешнее соединение включает все несвязанные строки первой (левой) таблицы, дополняя их значениями NULL, но не включает несвязанные строки второй (правой) таблицы. Аналогично правое внешнее соединение двух таблиц получается, если выполнить шаги 1 и 3, а шаг 2 пропустить. 1.5. CROSS JOIN C ROSS JOIN создает перекрестное произведение двух таблиц. Это также называется декартовым произведением между двумя таблицами. CROSS JOIN содержит все возможные пары строк из двух таблиц. Оно является результатом "умножения" двух таблиц, превращая таблицы из 20 и 8 строк в таблицу с 160 парами этих строк. Перекрестным соединениям не сопутствуют никакие "связанные столбцы" или "условия отбора", поэтому предложения ON и US ING в них не допускаются. Рис. 5. Декартово произведение таблиц Пример запроса, который генерирует полное произведение таблиц EMPLOYEES (работников) и DEPARTMENTS (отделов): SELECT * FROM EMPLOYEES CROSS JOIN DEPARTMENTS; 1.6. Подзапросы П одзапросом называется запрос внутри другого запроса SQL. Результаты подзапроса используются СУБД для определения результатов запроса более высокого уровня, содержащего данный подзапрос. Подзапросы обеспечивают эффективный естественный способ обработки запросов, которые выражаются через результаты других запросов. Вот пример такого запроса: Рис. 6. Подзапроса Синтаксис подзапроса: Подзапрос (внутренний запрос) выполняется перед основным запросом (внешним запросом). Результат подзапроса используется основным запросом. Правила работы с подзапросами: Подзапросы заключаются в круглые скобки Подзапросы обычно располагаются справа от условия сравнения для удобочитаемости (однако подзапрос может стоять по обе стороны от оператора сравнения) Однострочные операторы используются с однострочными подзапросами, а многострочные операторы – с многострочными подзапросами. Пример написания запроса с использованием подзапроса: Рис. 7. Запрос с подзапросом и результат Подзапросы бывают двух типов: однострочные и много строчные. Однострочные подзапросы возвращают одну строку и используются с однострочными операторами сравнения. М ногострочные подзапросы возвращают более одной строки и используются с многострочными операторами: Рис. 8. Пример многострочных операторов П ример использование оператора ANY в подзапросе: Рис. 9. Запрос с использованием ANY и результат П ример использование оператора ALL в подзапросе. Рис. 10. Запрос с использованием ALL и результат Написание запросов. Написание запросов с использованием соединения Поставленная задача: вывести адреса всех отделов (Таблица departments). Использовать таблицы Locations и countries. Поля: Название отдела, улица, город, штат, страна. Рис. 11. Запрос с использованием соединения JOINON Написание запросов с использованием подзапросов Поставленная задача: используя подзапрос вывести фамилию и дату приема на работу всех сотрудников, которые работают в том же отделе, что и “Russell”, исключая самого работника. Рис. 12. Запрос с использованием подзапроса Заключение В ходе производственной практики были получены знания о составлении SQL запросов с использованием подзапросов и запросов соединения. Были изучены виды запросов соединения в SQL, возможности запросов соединения, изучены подзапросы. Были выполнены все поставленные задачи. Список литературы SQL. Полное руководство. Третье издание. Джеймс Р. Грофф Пол Н. Вайнберг Эндрю Дж. Оппель. 2015 г. SQL QUICK START Крис Фиайли. |