Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
теория2.doc
Скачиваний:
7
Добавлен:
01.03.2025
Размер:
651 Кб
Скачать

Умножение таблиц самих на себя

Задание: Вывести номера заказчиков, которые что-либо заказывали и 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

Задания:

  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

  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

7

2

1

12.10.2008

2100

  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

    23.10.2008

    2500

    6

    2

    2

    22.10.2008

    2300

    7

    2

    1

    12.10.2008

    2100

  2. Отобразите результат следующего запроса:

SELECT *

FROM ZAKAZCHIKI ZAK1, ZAKAZCHIKI ZAK2

ZAKAZCHIKI

Nzakazchika (*)

FIO

Adres

1

Иванов А.Д.

М

2

Родин Н.Р.

СПб

3

Михайлова Г.С.

СПб

  1. Отобразите результат следующего запроса:

SELECT ZAK1.FIO, ZAK2.FIO

FROM ZAKAZCHIKI ZAK1, ZAKAZCHIKI ZAK2

WHERE ZAK1.FIO <> ZAK2.FIO

  1. Отобразите результат следующего запроса:

SELECT ZAK1.FIO, ZAK2.FIO

FROM ZAKAZCHIKI ZAK1, ZAKAZCHIKI ZAK2

WHERE ZAK1.FIO < ZAK2.FIO

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

  2. Напишите запрос, который выводит пары заказчиков, проживающих в разных городах, и отобразите результат запроса

  3. Сколько строк и столбцов будет в следующем запросе? (для всех трех версий таблицы ZAKAZY)

SELECT *

FROM ZAKAZY Z1, ZAKAZY Z2, ZAKAZCHIKI

  1. Отобразите результат следующего запроса (для двух последних версий таблицы 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’ )

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

  2. Напишите запрос, выводящий ФИО заказчиков, приобретавших заказы и у первого, и у второго продавцов и отобразите результат запроса (используйте последнюю версию таблицы 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).