Similar presentations:
Лекция 5. Многотабличные запросы — копия (2)(1)(1)
1. БД и их безопасность
ЛЕКЦИЯ 5. РАБОТА С НЕСКОЛЬКИМИТАБЛИЦАМИ
2. План
ПодзапросыUNION
JOIN
3. Вопросы по предыдущей лекции
К подъязыкам SQL относятся DDL, DML, DCL.Объясните назначение каждого из них и приведите
по одной команде для примера.
В чём отличие предложения WHERE и HAVING?
Когда использовать каждое из них?
Что делает агрегатная функция COUNT(*), и чем она
отличается от COUNT(имя_столбца)?
Что делают операторы LIMIT и OFFSET в SQL?
Приведите пример запроса, который вернёт вторую
«страницу» из 5 записей.
4. Подзапросы
Подзапрос - очень мощное средство языка SQL. Он позволяет строитьсложные иерархии запросов, многократно выполняемые в процессе
построения результирующего набора или выполнения одного из
операторов изменения данных ( DELETE , INSERT , UPDATE ).
Условно подзапросы иногда подразделяют на три типа, каждый из
которых является сужением предыдущего:
табличный подзапрос, возвращающий набор строк и столбцов;
подзапрос строки, возвращающий только одну строку, но, возможно,
несколько столбцов (такие подзапросы часто используются во
встроенном SQL);
скалярный подзапрос, возвращающий значение одного столбца в
одной строке.
5. Подзапросы
Подзапрос SQL - это запрос, который включается в другой запрос.Подзапросы позволяют использовать результат выполнения
внутреннего запроса во внешнем запросе, что позволяет строить
сложные запросы из более простых.
6.
Пример подзапроса, который выводит все продукты, цена которых вышесредней по всем продуктам:
7. Подзапросы + Оператор IN
Нередко подзапросы применяются вместе с оператором IN, который выбирает из наборазначений. И подзапрос как раз может предоставить требуемый набор значений.
Например, выберем все товары из таблицы Products, на которые есть заказы в таблице
Orders:
То есть подзапрос в данном случае выбирает все идентификаторы товаров из Orders, затем
по этим идентификаторам извлекаются товары из Products.
Добавив оператор NOT, мы можем выбрать те товары, на которые нет заказов в таблице
Orders:
8. Получение набора значений
При использовании ключевогослова ALL условие в операции сравнения
должно быть верно для всех значений, которые
возвращаются подзапросом.
Например, найдем все товары, цена которых
меньше чем у любого товара фирмы Apple:
9. Подзапрос как спецификация столбца
Результатподзапроса может представлять
отдельный столбец в выборке.
Например, выберем все заказы и добавим к ним
информацию о названии товара:
10. Оператор EXISTS
Оператор EXISTS проверяет, возвращает ли подзапроскакое-либо значение.
Применение оператора имеет следующий формальный
синтаксис:
Например, найдем все товары из таблицы Products, на
которые есть заказы в таблице Orders:
11. Построение вычисляемых полей
В общем случае для создания вычисляемого(производного) поля в списке SELECT следует
указать некоторое выражение языка SQL.
В
этих
выражениях
применяются
арифметические операции сложения, вычитания,
умножения и деления, а также встроенные
функции языка SQL.
12. Построение вычисляемых полей
Пример: Рассчитать общую стоимость длякаждой сделки.
Этот запрос использует расчет результирующих
столбцов на основе арифметических выражений.
13. Построение вычисляемых полей
Пример: Получить список фирм с указаниемфамилии и инициалов клиентов.
В запросе использована встроенная функция Left, позволяющая
вырезать в текстовой переменной один символ слева в данном случае
14. UNION
Иногда появляется необходимость объединениярезультатов двух или более запросов в одну
таблицу.
SQL
поддерживает такую возможность с
помощью операции UNION в инструкции
SELECT.
Пример: Вывести список всех товаров, цена
которых превышает $2000 или которых было
заказано более чем на $30 000 за один раз.
15.
16. UNION
17. UNION
На таблицы результатов запроса, которые можно объединять с помощьюоперации UNION, накладываются следующие ограничения:
• эти таблицы должны содержать одинаковое число столбцов;
• тип данных каждого столбца первой таблицы должен совпадать с типом
данных соответствующего столбца во второй таблице;
• ни одна из двух таблиц не может быть отсортирована с помощью
предложения ORDER ВY, однако объединенные результаты запроса можно
отсортировать.
18. Объединение и повторяющиеся строки
Если в таблице результатов операции UNIONнеобходимо сохранить повторяющиеся строки,
сразу за ключевым словом UNION следует
указать предикат ALL.
19. Объединение и сортировка
объединенные результаты запросов, возвращенные операциейUNION, можно отсортировать с помощью предложения ORDER
ВY, следующего за второй инструкцией SELECT.
Поскольку столбцы таблицы результатов запроса на объединение
не имеют имен, в этом предложении следует указывать номера
столбцов
20. Вложенные объединения
Скобки в запросе показывают, какая операция UNION должна выполнятьсяпервой.
21. Безопасность при использовании UNION
❗ Часто UNION применяется в SQL-инъекциях.Например:
' OR 1=1 UNION SELECT username, password FROM
users -
database