Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Управл_данными / 11-подзапросы

.pdf
Скачиваний:
16
Добавлен:
03.06.2015
Размер:
764.56 Кб
Скачать

Управление данными

SQL Подзапросы

Зудилин А.Э. 2013

Подзапросы

Операторы SELECT представляют собой запросы SQL.

Все операторы SELECT, с которыми мы имели дело до сих пор, представляли собой простые запросы: посредством оператора SELECT извлекались данные из одной таблицы.

Язык SQL позволяет также создавать сложные запросы: запросы, в которые вложены другие запросы.

Вложенные запросы называют также подзапросами или подчиненными запросами

2

Два типа подзапросов

Существует два способа использования подзапросов:

1)Фильтрация посредством подзапросов - подзапрос, определяет фильтр в предложении WHERE (в операторе IN)

2)Использование подзапросов в качестве вычисляемых полей

3

Фильтрация с помощью подзапросов

SELECT . . . .

FROM . . . .

WHERE . . . IN( ПОДЗАПРОС )

. . . .

4

Описание БД

Чаще всего в реляционных БД приходится собирать информацию из нескольких таблиц.

5

Использование оператора IN

впростом запросе

Для того чтобы выбрать все области входящие в округа с номерами 1,3,7 нужно выполнить запрос:

SELECT Название

FROM Регионы

WHERE Округ IN( 1,3,7 )

В этом запросе, после оператора IN

в скобках указывается список значений, которые должно принимать поле «Округ».

Список значений здесь сформирован вручную

6

Подзапрос в операторе IN

Можно поручить формирование списка другому запросу SELECT, вставив его вместо списка.

Такой запрос называется вложенным запросом (или подзапросом)

 

 

 

 

 

 

SELECT Название

 

 

 

 

FROM Регионы

SELECT kod FROM Фед_округа WHERE

 

 

WHERE Округ IN(

 

 

Название LIKE '*ск*'

)

 

 

 

 

 

 

Красным цветом выделен подзапрос, создающий список кодов округов

При отладке такого сложного запроса рекомендуется сначала отдельно написать вложенный запрос, убедиться, что он работает, затем скопировать его и вставить в основной (главный) запрос

7

Пример 2

Таблица Orders (заказы) содержит по одной строке для каждого заказа; в ней указываются номер заказа, идентификатор клиента и дата заказа.

Предметы отдельного заказа хранятся в соответствующей таблице

Order_ltems.

Таблица Orders не содержит информацию о клиентах. Она хранит только идентификатор клиента. Информация о клиентах хранится в таблице Client (клиенты)

8

Пример 2

Предположим, что вы хотите получить перечень всех клиентов, которые заказали продукт P001.

Для этого нужно сделать следующее.

1)Выбрать номера всех заказов, в которых содержится продукт P001.

2)Выбрать идентификатор клиента для всех клиентов, которые имеют заказы, перечисленные среди номеров заказов, возвращенных на предыдущем шаге.

3)Выбрать информацию о клиенте для всех клиентов, идентификаторы которых были возвращены на предыдущем шаге

9

Пример 2 Серия простых запросов

Каждый из этих шагов можно выполнить в виде отдельного запроса.

Первый оператор SELECT выбирает столбец order_num для всех продуктов заказа, у которых в столбце prod_id значится P001:

SELECT order_num

FROM Order_Items

WHERE prod_id = 'P001'

Допустим, что результатом этого запроса является список : 104, 105.

Следующий шаг состоит в выборке идентификаторов клиентов, связанных с заказами 104 и 105.

SELECT cli_id

FROM Orders

WHERE order_num IN (104, 105)

10

Соседние файлы в папке Управл_данными