Lab 7 SQL Многотабличные запросы

advertisement
Объединение таблиц
Подзапросы
Оператор 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.
Download