Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
SQL Учебник.doc
Скачиваний:
1
Добавлен:
01.03.2025
Размер:
1.28 Mб
Скачать

Занятие 8 Подзапросы

Определение:

Подзапрос- это запрос, вложенный в другой запрос. Подзапросы часто называют подчиненными запросами.

Подчиненный запрос можно использовать вместо выражения в списке полей инструкции SELECT или в предложениях WHERE и HAVING.

Использование подзапросов наиболее эффективно в реляционных базах данных, в которых описаны все таблицы и отношения подчиненности между ними.

Пример синтаксиса подзапроса используемого в WHERE

S ELECT имена полей

FROM имена таблиц

WHERE поле сравнение (SELECT имя поля

FROM имена таблиц

WHERE условие

……………………..)

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

Использование подзапросов возвращающих одно значение

П

SELECT Фамилия

FROM Отдел

WHERE Оклад < (SELECT AVG(Оклад)

FROM Отдел)

Сначала подзапрос определяет среднее значение оклада и возвращает его.

Главный запрос сравнивает все оклады с возвращенным средним значением и возвращает фамилии сотрудников, чей оклад меньше среднего.

ример:
Вывести фамилии сотрудников отдела, оклад которых ниже среднего в отделе.

Использование подзапросов возвращающих несколько значений

В этом случае необходимо использовать предикаты IN, ANY, ALL.

------------------------------------------------------------------------------------------------------------------------------

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

И наоборот, предикат NOT IN используется для отбора в главном запросе только тех записей, которые содержат значения, не совпадающие ни с одним из отобранных подчиненным запросом

SELECT *

FROM Т1

W

Заказано

HERE Х IN (SELECT Z FROM T2)

Е

Адрес

КодТовара

Париж

6

Рим

3

Лондон

2

Париж

5

Париж

8

Париж

1

Рим

8

Лондон

9

Рим

9

Мадрид

4

Лондон

5

Рим

5

Мадрид

7

сли Х=10 а Z(3, 5, 7, 10, 8) то ИСТИНА

Т

КодТовара

Товар

Цена

1

Кока-кола

50

2

Пиво

60

3

Торт

350

4

Фанта

40

5

Шампанское

150

6

Морс

100

7

Сапоги

3000

8

Валенки

5000

9

Кефир

20

овары

Пример: Показать все товары заказанные Парижем:

Frame188

Пример: Показать все товары ….?

SELECT Товар

FROM Товары

WHERE КодТовара IN (SELECT КодТовара

FROM Заказано

WHERE Адрес =”Рим” AND КодТовара IN (SELECT КодТовара

FROM Заказано

WHERE Адрес =”Париж”))

2. Предикат ANY используется для отбора записей в главном запросе, которые удовлетворяют сравнению хотя бы с одним значением из всех отобранных в подчиненном запросе.

SELECT * FROM Т1 WHERE Х < ANY (SELECT Z FROM T2)

Если Х=6 а Z(3, 5, 7, 10, 8) то ИСТИНА

Если Х=16 а Z(3, 5, 7, 10, 8) то ЛОЖЬ

ПРИМЕР:

Показать фамилии студентов 1-й группы, балл которых больше хотя бы одного балла студентов 2-й группы.

Frame190

------------------------------------------------------------------------------------------------------------

3.Предикат ALL используется для отбора в главном запросе только тех записей, которые удовлетворяют сравнению со всеми записями, отобранными в подчиненном запросе.

SELECT * FROM Т1 WHERE Х > ALL (SELECT Z FROM T2)

Если Х=6 а Z(3, 5, 7, 10, 8) то ЛОЖЬ

Если Х=15 а Z(3, 5, 7, 10, 8) то ИСТИНА

ПРИМЕР:

Показать фамилии студентов 1-й группы, балл которых, больше всех из баллов, студентов 2-й группы.

Frame191

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]