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

SQL-запросы. Теория и задания для проверки

SELECT поля через запятую

FROM таблицы через запятую

WHERE условие отбора строк

Таблица

ZAKAZY

Nzakaza (*)

Nzakazchika

DataZakaza

Tsena

1

1

12.10.2008

1000

2

2

16.10.2008

2000

3

2

29.09.2008

5000

4

3

20.10.2008

1500

5

1

22.10.2008

2500

_____________________________________________________________________________

Пример:

SELECT Nzakaza, Tsena

FROM ZAKAZY

Результат запроса:

Nzakaza (*)

Tsena

1

1000

2

2000

3

5000

4

1500

5

2500

_____________________________________________________________________________

SELECT * FROM ZAKAZY

Результат запроса:

Nzakaza (*)

Nzakazchika

DataZakaza

Tsena

1

1

12.10.2008

1000

2

2

16.10.2008

2000

3

2

29.09.2008

5000

4

3

20.10.2008

1500

5

1

22.10.2008

2500

________________________________________________________________________________

SELECT Nzakaza, DataZakaza, Tsena

FROM ZAKAZY

WHERE DataZakaza>=’15.10.2008’

Результат запроса:

Nzakaza (*)

DataZakaza

Tsena

2

16.10.2008

2000

4

20.10.2008

1500

5

22.10.2008

2500

SELECT Nzakaza, DataZakaza, Tsena

FROM ZAKAZY

WHERE (DataZakaza>=’15.10.2008’) and (Tsena >=2000)

Результат запроса:

Nzakaza (*)

DataZakaza

Tsena

2

16.10.2008

2000

5

22.10.2008

2500

Логические операции: and or not

Запросы на выборку из нескольких таблиц

Таблица

ZAKAZCHIKI

Nzakazchika (*)

FIO

Adres

1

Иванов А.Д.

М

2

Родин Н.Р.

СПб

3

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

СПб

Перемножение таблиц

ZAKAZY*ZAKAZCHIKI

Запрос SELECT * FROM ZAKAZY,ZAKAZCHIKI

Результат запроса:

ZAKAZY

ZAKAZCHIKI

Nzakaza

Nzakazchika

DataZakaza

Tsena

Nzakazchika

FIO

Adres

1

1

12.10.2008

1000

1

Иванов А.Д.

М

2

2

16.10.2008

2000

1

Иванов А.Д.

М

3

2

29.09.2008

5000

1

Иванов А.Д.

М

4

3

20.10.2008

1500

1

Иванов А.Д.

М

5

1

22.10.2008

2500

1

Иванов А.Д.

М

1

1

12.10.2008

1000

2

Родин Н.Р.

СПб

2

2

16.10.2008

2000

2

Родин Н.Р.

СПб

3

2

29.09.2008

5000

2

Родин Н.Р.

СПб

4

3

20.10.2008

1500

2

Родин Н.Р.

СПб

5

1

22.10.2008

2500

2

Родин Н.Р.

СПб

1

1

12.10.2008

1000

3

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

СПб

2

2

16.10.2008

2000

3

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

СПб

3

2

29.09.2008

5000

3

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

СПб

4

3

20.10.2008

1500

3

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

СПб

5

1

22.10.2008

2500

3

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

СПб

ZAKAZY

ZAKAZCHIKI

Nzakaza

Nzakazchika

DataZakaza

Tsena

Nzakazchika

FIO

Adres

1

1

12.10.2008

1000

1

Иванов А.Д.

М

2

2

16.10.2008

2000

1

Иванов А.Д.

М

3

2

29.09.2008

5000

1

Иванов А.Д.

М

4

3

20.10.2008

1500

1

Иванов А.Д.

М

5

1

22.10.2008

2500

1

Иванов А.Д.

М

1

1

12.10.2008

1000

2

Родин Н.Р.

СПб

2

2

16.10.2008

2000

2

Родин Н.Р.

СПб

3

2

29.09.2008

5000

2

Родин Н.Р.

СПб

4

3

20.10.2008

1500

2

Родин Н.Р.

СПб

5

1

22.10.2008

2500

2

Родин Н.Р.

СПб

1

1

12.10.2008

1000

3

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

СПб

2

2

16.10.2008

2000

3

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

СПб

3

2

29.09.2008

5000

3

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

СПб

4

3

20.10.2008

1500

3

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

СПб

5

1

22.10.2008

2500

3

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

СПб

Запрос

SELECT *

FROM ZAKAZY,ZAKAZCHIKI

WHERE ZAKAZY.Nzakazchika= ZAKAZCHIKI.Nzakazchika

Результат запроса:

ZAKAZY

ZAKAZCHIKI

Nzakaza

Nzakazchika

DataZakaza

Tsena

Nzakazchika

FIO

Adres

1

1

12.10.2008

1000

1

Иванов А.Д.

М

5

1

22.10.2008

2500

1

Иванов А.Д.

М

2

2

16.10.2008

2000

2

Родин Н.Р.

СПб

3

2

29.09.2008

5000

2

Родин Н.Р.

СПб

4

3

20.10.2008

1500

3

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

СПб

Запрос

SELECT Nzakaza, DataZakaza, Tsena, ZAKAZCHIKI.Nzakazchika, FIO, Adres

FROM ZAKAZY,ZAKAZCHIKI

WHERE ZAKAZY.Nzakazchika= ZAKAZCHIKI.Nzakazchika

Результат запроса:

Nzakaza

DataZakaza

Tsena

Nzakazchika

FIO

Adres

1

12.10.2008

1000

1

Иванов А.Д.

М

5

22.10.2008

2500

1

Иванов А.Д.

М

2

16.10.2008

2000

2

Родин Н.Р.

СПб

3

29.09.2008

5000

2

Родин Н.Р.

СПб

4

20.10.2008

1500

3

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

СПб

Задание: Вывести ФИО и адрес заказчика, который приобрел заказ N3

Запрос:

SELECT FIO, Adres

FROM ZAKAZY,ZAKAZCHIKI

WHERE (ZAKAZY.Nzakazchika= ZAKAZCHIKI. Nzakazchika) and (Nzakaza=3)

Результат запроса:

FIO

Adres

Родин Н.Р.

СПб

Задание: Вывести все сведения о заказах, которые приобрел Иванов А.Д. во второй половине октября 2008 года.

Запрос:

SELECT Nzakaza, DataZakaza, Tsena

FROM ZAKAZY,ZAKAZCHIKI

WHERE (ZAKAZY.Nzakazchika= ZAKAZCHIKI.Nzakazchika) and

(FIO=’Иванов А.Д.’) and (DataZakaza>=’16.10.2008’) and

(DataZakaza<=’31.10.2008’)

Результат запроса:

Nzakaza

DataZakaza

Tsena

5

22.10.2008

2500

Таблица

PRODAVTSI

Nprod (*)

FIO

Adres

Reiting

1

Лосева А.К.

М

100

2

Титов Д.Б.

СПб

55

Скорректированная таблица 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

Перемножение 3-х таблиц:

SELECT *

FROM ZAKAZY, ZAKAZCHIKI, PRODAVTSI

Перемножение 3-х таблиц с указанием условий связи между таблицами:

SELECT *

FROM ZAKAZY, ZAKAZCHIKI, PRODAVTSI

WHERE (ZAKAZY.Nzakazchika= ZAKAZCHIKI.Nzakazchika) and

(ZAKAZY.Nprod= PRODAVTSI. Nprod)

Nzakaza

Nzakazchika

Nprod

DataZakaza

Tsena

Nzakazchika

FIO

Adres

Nprod

FIO

Adres

Reiting

1

1

1

12.10.2008

1000

1

Иванов А.Д.

М

1

Лосева А.К.

М

100

5

1

1

22.10.2008

2500

1

Иванов А.Д.

М

1

Лосева А.К.

М

100

2

2

2

16.10.2008

2000

2

Родин Н.Р.

СПб

2

Титов Д.Б.

СПб

55

3

2

1

29.09.2008

5000

2

Родин Н.Р.

СПб

1

Лосева А.К.

М

100

4

3

2

20.10.2008

1500

3

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

СПб

2

Титов Д.Б.

СПб

55

Задание: Вывести все сведения о заказах в тех случаях, когда заказчик и продавец из одного и того же города.

Запрос:

SELECT *

FROM ZAKAZY, ZAKAZCHIKI, PRODAVTSI

WHERE (ZAKAZY.Nzakazchika= ZAKAZCHIKI.Nzakazchika) and

(ZAKAZY.Nprod= PRODAVTSI. Nprod) and

(ZAKAZCHIKI.Adres= PRODAVTSI.Adres)

Результат запроса:

ZAKAZY

ZAKAZCHIKI

PRODAVTSI

Nzakaza

Nzakazchika

Nprod

DataZakaza

Tsena

Nzakazchika

FIO

Adres

Nprod

FIO

Adres

Reiting

1

1

1

12.10.2008

1000

1

Иванов А.Д.

М

1

Лосева А.К.

М

100

5

1

1

22.10.2008

2500

1

Иванов А.Д.

М

1

Лосева А.К.

М

100

2

2

2

16.10.2008

2000

2

Родин Н.Р.

СПб

2

Титов Д.Б.

СПб

55

4

3

2

20.10.2008

1500

3

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

СПб

2

Титов Д.Б.

СПб

55

Тот же запрос с отбором нужных столбцов:

SELECT Nzakaza, DataZakaza, Tsena

FROM ZAKAZY, ZAKAZCHIKI, PRODAVTSI

WHERE (ZAKAZY.Nzakazchika= ZAKAZCHIKI.Nzakazchika) and

(ZAKAZY.Nprod= PRODAVTSI. Nprod) and

(ZAKAZCHIKI.Adres= PRODAVTSI.Adres)

Результат запроса:

Nzakaza

DataZakaza

Tsena

1

12.10.2008

1000

5

22.10.2008

2500

2

16.10.2008

2000

4

20.10.2008

1500

________________________________________________________________

Задание

Написать запросы и отобразить результаты запросов

  1. Вывести ZAKAZY * PRODAVTSI – все строки и столбцы

  2. Вывести ZAKAZY * PRODAVTSI с указанием связи между таблицами по полю Nprod

  3. Вывести ФИО и рейтинг продавца, продавшего заказ N4

  4. Вывести номера и даты заказов, сделанных в октябре

  5. Вывести ФИО заказчиков, покупавших заказы у продавцов из Москвы.

Агрегатные функции

Агрегатные функции работают с несколькими записями сразу – это могут быть все записи одной группы или все записи таблицы.

Агрегатные функции:

sum - сумма

avg - среднее арифметическое

min - минимум

max - максимум

count – количество строк

Параметр агрегатной функции – поле, для которого выполняется операция.

Задание: Вывести суммарную стоимость всех заказов

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

Требуемая величина: 1000+2000+5000+1500+2500 = 12000

Запрос:

SELECT sum(Tsena)

FROM ZAKAZY

Результат запроса:

sum(Tsena)

12000

Задание: Вывести дату последнего заказа (дата этого заказа – максимальная, т.е. самая последняя)

Запрос:

SELECT max(DataZakaza)

FROM ZAKAZY

Результат запроса:

max(DataZakaza)

22.10.2008

Задание: Вывести общее количество заказов

Запрос:

SELECT count(*)

FROM ZAKAZY

Результат запроса:

count(*)

5

Группировка

Группировка используется для ответов на запросы следующего вида:

- вывести суммарную стоимость заказов для каждого заказчика

- вывести дату первого заказа, сделанного каждым заказчиком

- вывести ФИО заказчиков, сделавших по 3 и более заказов

и т.д.

Группировка по полю Nzakazchika для таблицы ZAKAZY:

Nzakaza (*)

Nzakazchika

Nprod

DataZakaza

Tsena

1

1

1

12.10.2008

1000

5

1

1

22.10.2008

2500

2

2

2

16.10.2008

2000

3

2

1

29.09.2008

5000

4

3

2

20.10.2008

1500

Задание: Вывести суммарную стоимость заказов для каждого заказчика

Запрос:

SELECT Nzakazchika, sum(Tsena)

FROM ZAKAZY

GROUP BY Nzakazchika

!!! При использовании группировки в секции SELECT можно указывать только те поля, по которым проводится группировка

Результат запроса:

Nzakazchika

sum(Tsena)

1

3500

2

7000

3

1500

Задание: вывести дату первого заказа, сделанного каждым заказчиком

Запрос:

SELECT Nzakazchika, min(DataZakaza)

FROM ZAKAZY

GROUP BY Nzakazchika

Результат запроса:

Nzakazchika

min(DataZakaza)

1

12.10.2008

2

29.09.2008

3

20.10.2008

Задание: вывести дату первого заказа, сделанного заказчиком N2

Запрос:

SELECT min(DataZakaza)

FROM ZAKAZY

WHERE Nzakazchika=2

GROUP BY Nzakazchika

или

SELECT min(DataZakaza)

FROM ZAKAZY

WHERE Nzakazchika=2

Результат запроса:

min(DataZakaza)

29.09.2008

Задание: вывести ФИО заказчиков и количество сделанных ими заказов

Запрос:

SELECT FIO, count(*)

FROM ZAKAZY, ZAKAZCHIKI

WHERE ZAKAZY.Nzakazchika= ZAKAZCHIKI.Nzakazchika

GROUP BY FIO

Результат запроса:

FIO

Count(*)

Иванов А.Д.

2

Родин Н.Р.

2

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

1

Задание: вывести количество заказов, сделанных Ивановым А.Д.

Запрос:

SELECT count(*)

FROM ZAKAZY, ZAKAZCHIKI

WHERE (ZAKAZY.Nzakazchika= ZAKAZCHIKI.Nzakazchika) and

(FIO=” Иванов А.Д.”)

GROUP BY FIO

или

SELECT count(*)

FROM ZAKAZY, ZAKAZCHIKI

WHERE (ZAKAZY.Nzakazchika= ZAKAZCHIKI.Nzakazchika) and

(FIO=” Иванов А.Д.”)

Count(*)

2

Условия отбора для групп

Задание: вывести номера заказчиков и суммарную стоимость сделанных ими заказов для тех заказчиков, у которых стоимость всех заказов не менее 2000 руб.

SELECT Nzakazchika, sum(Tsena)

FROM ZAKAZY

GROUP BY Nzakazchika

HAVING sum(Tsena)>=2000

Результат запроса:

Nzakazchika

sum(Tsena)

1

3500

2

7000

Задания:

  1. (без запроса!!!) Изобразить таблицу ZAKAZY, сгруппированную по номеру продавца. Обозначить границы между группами.

------ остальные задания: запрос и результат запроса ----

  1. Вывести дату самого первого (раннего) заказа (по всей таблице ZAKAZY)

  2. Вывести суммарную стоимость всех заказов для каждого (номера) продавца

  3. Вывести дату последнего (самого позднего) заказа для каждого (номера) продавца

  4. Вывести количество заказов для каждого (номера) продавца

  5. Вывести количество заказов для продавца с номером 2

  6. Вывести максимальную стоимость заказа для каждого продавца (по ФИО)

  7. Вывести количество заказов для продавца Титова Д.Б.

  8. Вывести суммарную стоимость всех заказов для заказчиков из СПб

  9. Вывести номера продавцов и количество проданных ими заказов для тех продавцов, у которых количество заказов <=2

  10. Вывести номера заказчиков и среднюю стоимость сделанных ими заказов для тех заказчиков, у которых дата последнего заказа не раньше 21.10.08

  11. Вывести количество заказов для каждой взаимодействующей пары продавец-заказчик (группировка по нескольким полям)