
- •Занятие 3 Инструкция select Простая выборка
- •Выборка с условием (фильтрация)
- •Фильтрация по одному полю
- •Расширенные условия отбора
- •Сортировка
- •Вычисляемые поля
- •Математические операции между столбцами.
- •Функция round
- •Текстовые операции. Сцепление столбцов. Функции len, left
- •Функции Даты
- •Условный оператор iif
- •Занятие 7 Статистические функции в sql
- •Группировка данных
- •Группировка по одному столбцу
- •Группировка по нескольким столбцам
- •Фильтрация групп
- •Сортировка групп
- •Примеры:
- •Фамилия бажанова коваленко лапина
- •Занятие 8 Подзапросы
- •Использование подзапросов возвращающих одно значение
- •Использование подзапросов возвращающих несколько значений
- •Примеры с подзапросами
- •Соединение таблиц
- •Инструкции на изменение данных Инструкция: delete
- •Инструкция update
- •Инструкция: insert into
- •Insert into ИмяТаблицы
- •Комбинированные запросы
Занятие 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
Заказано
Е
Адрес
КодТовара
Париж
6
Рим
3
Лондон
2
Париж
5
Париж
8
Париж
1
Рим
8
Лондон
9
Рим
9
Мадрид
4
Лондон
5
Рим
5
Мадрид
7
Т
КодТовара
Товар
Цена
1
Кока-кола
50
2
Пиво
60
3
Торт
350
4
Фанта
40
5
Шампанское
150
6
Морс
100
7
Сапоги
3000
8
Валенки
5000
9
Кефир
20
Пример: Показать все товары заказанные Парижем:
Пример: Показать все товары ….?
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-й группы.
------------------------------------------------------------------------------------------------------------
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-й группы.