Запросы
Далее
я вернул таблицы к исходному, заполненному
состоянию и выполнил несколько запросов.
Первый
запрос выдает список заказов, сделанных
2 ноября 2006 года, а также их суммарную
стоимость:
SELECT
onum,
amt FROM
orders
WHERE
odate =
"2006-11-2"
UNION
SELECT
"amount:",
sum(orders.amt)
FROM
orders
WHERE
odate
=
"2006-11-2";
Так
выглядит вывод DreamCoder
в ответ на запрос:
|
|
onum |
amt |
1 |
610 |
2 |
8255,5 |
amount: |
8865,5 |
Аналогичный
запрос выдает тот же список, но для
сегодняшнего дня:
SELECT
onum,
amt FROM
orders
WHERE
odate =
date
(now())
UNION
SELECT
"amount:",
sum(orders.amt)
FROM
orders
WHERE
odate =
date
(now());
Естественно,
вывод
пуст:
Еще
один запрос выдает список продавцов и
суммарную стоимость обслуживаемых ими
заказов:
SELECT
sname,
sum(orders.amt)
FROM
salespeople
left
JOIN
orders
on
orders.snum
=
salespeople.snum
GROUP
by
sname;
Другой
вариант написания того же запроса:
SELECT
sname,
(SELECT
sum(amt)
FROM
orders
WHERE
snum =
salespeople.snum)
FROM
salespeople
GROUP
by
sname;
Мой
вариант написания того же запроса,
который, в случае отсутствия у продавца
заказов, выдает не пустую ячейку во
второй колонке, а нуль.
SELECT
sname,
IFNULL(sum(orders.amt),0)
order_sum FROM
salespeople
left
JOIN
orders
on
orders.snum
=
salespeople.snum
GROUP
by
sname;
Так
выглядит вывод в ответ на мой вариант
запроса:
|
|
sname |
order_sum |
Алиса
Тырь |
1525 |
Иван
Жадов |
0 |
Максим
Хитров |
8865,5 |
Федор
Захапов |
5160 |
Этот,
последний запрос проделывает аналогичную
операцию, но для покупателей:
SELECT
cname,
sum(orders.amt)
FROM
customers
left
JOIN
orders
on
orders.cnum
=
customers.cnum
GROUP
by
cname;
Второй
вариант его выполнения:
SELECT
cname,
(SELECT
sum(amt)
FROM
orders
WHERE
cnum=customers.cnum)
FROM
customers
GROUP
by
cname;
Легко
видеть, что у всех покупателей есть
заказы:
|
|
cname |
sum(orders.amt) |
Алексей
Шмыга |
8255,5 |
Антон
Тотуттотам |
1215 |
Василий
Дубов |
610 |
Лариса
Тупакова |
5160 |
Петр
Быков |
310 |
Вывод
В результате
выполнения лабораторной работы я создал
новую базу данных, создал несколько
триггеров и проверил их работу, а также
произвел несколько запросов, причем
некоторые из них — в разных вариантах.