Объединение таблиц Подзапросы Оператор SELECT дает возможность выборки информации сразу из нескольких таблиц, которые перечислены в списке FROM. Такая выборка включает в себя два основных этапа: 1. построение промежуточной таблицы, представляющей собой декартово произведение таблиц из списка FROM (т.е. таблицы, строки которой представляют собой все возможные сочетания строк исходных таблиц); 2. копирование в результирующую таблицу всех строк промежуточной, отвечающих критерию из WHERE (если таковой определен). Продолжаем работу работу При запуске создавать новое соединение с базой данных уже не надо, оно сохранилось. Заполните только поле «Пароль» На предыдущем занятии Вы коснулись работы с несколькими таблицами, в данной работе познакомимся с особенностями таких запросов. Задание : Выберите все заказы с клиентами их заказавшими. У клиента должны присутствовать адресные реквизиты. Далее усложните этот запрос добавив столбец с количеством наименований продуктов в заказе. (вспомните группировку ) Условие накладываемое на группу Поля группировки указываются в операторе GROUP BY, как Вы уже знаете Для отбора групп по условию существует оператор HAVING. Его синтаксис аналогичен выражению WHERE и мало того их можно использовать вместе! В примере выведены те клиенты, у которых сумма всех заказов больше 10000 Задание : Измените первый запрос таким образом, чтобы он выводил только те заказы, в которых наименований продуктов больше 3. Операторы INNER JOIN и OUTER (left\right\full) JOIN Инструкция Join позволяет объединить колонки из нескольких таблиц в одну. Объединение происходит временное и целостность таблиц не нарушается. Заказы с теми пользователями кто их занес, но в данном случае утеряны те заказы, у которых не указан пользователь Данный запрос помог нам вывести все заказы, вне зависимости указан ли пользователь или нет. Операторы INNER JOIN и OUTER (left\right\full) JOIN Left join из главной таблицы будут выбраны все записи, даже если в присоединяемой таблице нет совпадений, то есть условие condition не учитывает присоединяемую (правую) таблицу. Right join отображает все строки удовлетворяющие правой части условия condition, даже если они не имеют соответствия в главной (левой) таблице Inner join необходим для получения только тех строк, для которых существует соответствие записей главной таблицы и присоединяемой. Full outer join (ключевое слово outer можно опустить) необходим для отображения всех возможных комбинаций строк из нескольких таблиц. Иными словами, это объединение результатов left и right join. Задание : Создайте запрос, который выводит ВСЕХ сотрудников и отделы, в которых они работают Использование подзапросов Вложенный подзапрос это подзапрос, заключенный в круглые скобки и вложенный в WHERE (HAVING) фразу предложения SELECT или других предложений, использующих WHERE фразу. SQL обладает большой избыточностью в том смысле, что он часто предоставляет несколько различных способов формулировки одного и того же запроса. Данный запрос выводит все заказы с суммой более 1000, вне зависимости указан пользователь или нет. Задание : Создайте 2 запроса, выводящих клиентов с суммой всех заказов более 10000 из списка клиентов определенного штата (один с использованием подзапроса, второй без). Ограничения на подзапросы На подзапросы накладываются следующие ограничения: Подзапросы нельзя использовать в списках предложений order by, group by. Список выбора внутреннего подзапроса, которому предшествует операция сравнения, может содержать только одно выражение или название столбца, и подзапрос должен возвращать единственный результат. При этом тип данных столбца, указанного в конструкции where внешнего оператора, должен быть совместим c типом данных в столбце, указанным в списке выбора подзапроса (правила здесь такие же как и при соединении). Количество вложенных уровней для подзапросов не должно превышать 16. Максимальное число подзапросов на каждой стороне объединения не больше 16.