БД и их безопасность
План
Вопросы по предыдущей лекции
Подзапросы
Подзапросы
Подзапросы + Оператор IN
Получение набора значений
Подзапрос как спецификация столбца
Оператор EXISTS
Построение вычисляемых полей
Построение вычисляемых полей
Построение вычисляемых полей
UNION
UNION
UNION
Объединение и повторяющиеся строки
Объединение и сортировка
Вложенные объединения
Безопасность при использовании UNION
Многотабличные запросы (соединения)
Пример двухтабличного запроса
Пример двухтабличного запроса
Простое соединение таблиц
JOIN
JOIN
Естественные соединения (Natural join)
Естественные соединения
Запросы к трем и более таблицам
Запросы к трем и более таблицам
комбинация отношений "предок-потомок"
Умножение таблиц (CROSS JOIN)
Правила выполнения многотабличных запросов на выборку
Соединения JOIN
INNER JOIN
Inner join
Left join
Left join
Left Join with Where clause
RIGHT JOIN
Right join
Right Join with Where clause
Full Outer Join
Full Outer Join
Full Outer Join using where clause
СРО
TEST
2.35M
Category: databasedatabase

Лекция 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 -
English     Русский Rules