- •Агрегатные функции
- •Группировка
- •Умножение таблиц самих на себя
- •I способ
- •II способ
- •Операция in
- •Запросы на добавление новых записей (строк)
- •Запросы на удаление записей (строк)
- •Запросы на изменение записей (строк)
- •Ограничения
- •Запросы на создание таблиц
- •Запросы на удаление таблиц
- •Запросы на изменение таблиц
- •Именованные ограничения
Умножение таблиц самих на себя
Задание: Вывести номера заказчиков, которые что-либо заказывали и 12.10.2008, и 22.10.2008.
Z1 |
Z2 |
||||||||
Nzakaza (*) |
Nzakazchika |
Nprod |
DataZakaza |
Tsena |
Nzakaza (*) |
Nzakazchika |
Nprod |
DataZakaza |
Tsena |
1 |
1 |
1 |
12.10.2008 |
1000 |
1 |
1 |
1 |
12.10.2008 |
1000 |
2 |
2 |
2 |
16.10.2008 |
2000 |
1 |
1 |
1 |
12.10.2008 |
1000 |
3 |
2 |
1 |
29.09.2008 |
5000 |
1 |
1 |
1 |
12.10.2008 |
1000 |
4 |
3 |
2 |
20.10.2008 |
1500 |
1 |
1 |
1 |
12.10.2008 |
1000 |
5 |
1 |
1 |
22.10.2008 |
2500 |
1 |
1 |
1 |
12.10.2008 |
1000 |
1 |
1 |
1 |
12.10.2008 |
1000 |
2 |
2 |
2 |
16.10.2008 |
2000 |
2 |
2 |
2 |
16.10.2008 |
2000 |
2 |
2 |
2 |
16.10.2008 |
2000 |
3 |
2 |
1 |
29.09.2008 |
5000 |
2 |
2 |
2 |
16.10.2008 |
2000 |
4 |
3 |
2 |
20.10.2008 |
1500 |
2 |
2 |
2 |
16.10.2008 |
2000 |
5 |
1 |
1 |
22.10.2008 |
2500 |
2 |
2 |
2 |
16.10.2008 |
2000 |
1 |
1 |
1 |
12.10.2008 |
1000 |
3 |
2 |
1 |
29.09.2008 |
5000 |
2 |
2 |
2 |
16.10.2008 |
2000 |
3 |
2 |
1 |
29.09.2008 |
5000 |
3 |
2 |
1 |
29.09.2008 |
5000 |
3 |
2 |
1 |
29.09.2008 |
5000 |
4 |
3 |
2 |
20.10.2008 |
1500 |
3 |
2 |
1 |
29.09.2008 |
5000 |
5 |
1 |
1 |
22.10.2008 |
2500 |
3 |
2 |
1 |
29.09.2008 |
5000 |
1 |
1 |
1 |
12.10.2008 |
1000 |
4 |
3 |
2 |
20.10.2008 |
1500 |
2 |
2 |
2 |
16.10.2008 |
2000 |
4 |
3 |
2 |
20.10.2008 |
1500 |
3 |
2 |
1 |
29.09.2008 |
5000 |
4 |
3 |
2 |
20.10.2008 |
1500 |
4 |
3 |
2 |
20.10.2008 |
1500 |
4 |
3 |
2 |
20.10.2008 |
1500 |
5 |
1 |
1 |
22.10.2008 |
2500 |
4 |
3 |
2 |
20.10.2008 |
1500 |
1 |
1 |
1 |
12.10.2008 |
1000 |
5 |
1 |
1 |
22.10.2008 |
2500 |
2 |
2 |
2 |
16.10.2008 |
2000 |
5 |
1 |
1 |
22.10.2008 |
2500 |
3 |
2 |
1 |
29.09.2008 |
5000 |
5 |
1 |
1 |
22.10.2008 |
2500 |
4 |
3 |
2 |
20.10.2008 |
1500 |
5 |
1 |
1 |
22.10.2008 |
2500 |
5 |
1 |
1 |
22.10.2008 |
2500 |
5 |
1 |
1 |
22.10.2008 |
2500 |
Запрос:
SELECT Z1.Nzakazchika
FROM ZAKAZY Z1, ZAKAZY Z2
WHERE ( Z1. Nzakazchika = Z2. Nzakazchika ) and (Z1.DataZakaza =’12.10.2008’ )
and (Z2.DataZakaza =’22.10.2008’ )
Результат запроса:
Nzakazchika |
1 |
Задания:
Какой будет результат предыдущего запроса для нижеуказанной таблицы ZAKAZY:
Nzakaza (*) |
Nzakazchika |
Nprod |
DataZakaza |
Tsena |
1 |
1 |
1 |
12.10.2008 |
1000 |
2 |
2 |
2 |
16.10.2008 |
2000 |
3 |
2 |
1 |
29.09.2008 |
5000 |
4 |
3 |
2 |
20.10.2008 |
1500 |
5 |
1 |
1 |
22.10.2008 |
2500 |
6 |
2 |
2 |
22.10.2008 |
2300 |
Какой будет результат предыдущего запроса для нижеуказанной таблицы ZAKAZY:
Nzakaza (*) |
Nzakazchika |
Nprod |
DataZakaza |
Tsena |
1 |
1 |
1 |
12.10.2008 |
1000 |
2 |
2 |
2 |
16.10.2008 |
2000 |
3 |
2 |
1 |
29.09.2008 |
5000 |
4 |
3 |
2 |
20.10.2008 |
1500 |
5 |
1 |
1 |
22.10.2008 |
2500 |
6 |
2 |
2 |
22.10.2008 |
2300 |
7 |
2 |
1 |
12.10.2008 |
2100 |
Какой будет результат предыдущего запроса для нижеуказанной таблицы ZAKAZY:
Nzakaza (*)
Nzakazchika
Nprod
DataZakaza
Tsena
1
1
1
12.10.2008
1000
2
2
2
16.10.2008
2000
3
2
1
29.09.2008
5000
4
3
2
20.10.2008
1500
5
1
1
23.10.2008
2500
6
2
2
22.10.2008
2300
7
2
1
12.10.2008
2100
Отобразите результат следующего запроса:
SELECT *
FROM ZAKAZCHIKI ZAK1, ZAKAZCHIKI ZAK2
ZAKAZCHIKI
Nzakazchika (*) |
FIO |
Adres |
1 |
Иванов А.Д. |
М |
2 |
Родин Н.Р. |
СПб |
3 |
Михайлова Г.С. |
СПб |
Отобразите результат следующего запроса:
SELECT ZAK1.FIO, ZAK2.FIO
FROM ZAKAZCHIKI ZAK1, ZAKAZCHIKI ZAK2
WHERE ZAK1.FIO <> ZAK2.FIO
Отобразите результат следующего запроса:
SELECT ZAK1.FIO, ZAK2.FIO
FROM ZAKAZCHIKI ZAK1, ZAKAZCHIKI ZAK2
WHERE ZAK1.FIO < ZAK2.FIO
Напишите запрос, который выводит пары заказчиков, проживающих в одном городе, и отобразите результат запроса
Напишите запрос, который выводит пары заказчиков, проживающих в разных городах, и отобразите результат запроса
Сколько строк и столбцов будет в следующем запросе? (для всех трех версий таблицы ZAKAZY)
SELECT *
FROM ZAKAZY Z1, ZAKAZY Z2, ZAKAZCHIKI
Отобразите результат следующего запроса (для двух последних версий таблицы ZAKAZY):
SELECT FIO
FROM ZAKAZY Z1, ZAKAZY Z2, ZAKAZCHIKI
WHERE (Z1. Nzakazchika = ZAKAZCHIKI. Nzakazchika)
and ( Z1. Nzakazchika = Z2. Nzakazchika )
and (Z1.DataZakaza =’12.10.2008’ ) and (Z2.DataZakaza =’22.10.2008’ )
Напишите запрос, выводящий номера заказчиков, приобретавших заказы и у первого, и у второго продавцов и отобразите результат запроса (используйте последнюю версию таблицы ZAKAZY).
Напишите запрос, выводящий ФИО заказчиков, приобретавших заказы и у первого, и у второго продавцов и отобразите результат запроса (используйте последнюю версию таблицы ZAKAZY).
Вложенный оператор SELECT
Среда программирования Delphi
Вид запущенного приложения
Ввод текста запроса
В секции WHERE правым операндом для = < > <= >= <> может быть вложенный оператор SELECT. В этом случае SELECT должен возвращать только одно значение.
Для каждой строки внешнего оператора SELECT формируется свой вложенный оператор SELECT
Задание: вывести номера заказов для заказчика Родина Н.Р.
Запрос:
SELECT NZAKAZA
FROM ZAKAZY
WHERE NZAKAZCHIKA =
( SELECT NZAKAZCHIKA
FROM ZAKAZCHIKI
WHERE FIO = “Родин Н.Р.”
)
Результат выполнения вложенного оператора SELECT
Nzakazchika |
2 |
В результате внешний SELECT будет выглядеть так:
SELECT NZAKAZA
FROM ZAKAZY
WHERE NZAKAZCHIKA = 2
! Для каждой строки внешнего SELECT формируется вложенный SELEC T.
(В данном случае все вложенные операторы SELECT одинаковы для каждой строки внешнего SELECT и дают одинаковый результат)
Результат всего запроса:
Nzakaza |
2 |
3 |
6 |
7 |
----------------------------------------------------------------------------------------------------
Задание: вывести номер заказчика, который приобрел самый первый заказ (дата заказа самая ранняя, это не обязательно заказ N1).
Запрос:
SELECT NZAKAZCHIKA
FROM ZAKAZY
WHERE DataZakaza =
( SELECT min(DataZakaza)
FROM ZAKAZY
)
Результат выполнения вложенного оператора SELECT
min(DataZakaza) |
29.09.2008 |
В результате внешний SELECT будет выглядеть так:
SELECT NZAKAZCHIKA
FROM ZAKAZY
WHERE DataZakaza = “29.09.2008”
(В данном случае тоже все вложенные операторы SELECT одинаковы для каждой строки внешнего SELECT и дают одинаковый результат)
Результат всего запроса:
Nzakazchika |
2 |
---------------------------------------------------------------------------------------------
Задание: вывести ФИО заказчика, который приобрел самый первый заказ (дата заказа самая ранняя, это не обязательно заказ N1).
