Объединение двух или более запросов 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Объединение двух или более запросов



Предложение UNION позволяет объединить результаты выполнения нескольких запросов к разным таблицам в одном подмножестве данных, реализуя один запрос. Синтаксис UNION имеет вид:

запрос_1 UNION запрос_1

Непременное требование – одинаковые количество и типы полей в объединяемых предложением UNION запросах, хотя второе требование можно обойти, если использовать преобразование типов в запросах. Например:

SELECT ”Имя”, “Адрес”

FROM “Заказчики”

UNION

SELECT “Название”, “Адрес”

FROM “Поставщики”

Следует иметь в виду, что:

избыточные дубликаты всегда исключаются из результата UNION.

предложением с UNION можно объединить любое число таблиц (проекций таблиц).

весь запрос может использовать только одно предложение ORDER BY. Оно применяется ко всему результату и должно находится после последней инструкции SELECT.

 

Ход работы.

3.1 Задания для самостоятельной работы (БД BookShop)

1. Напишите запрос для вывода названия, автора и цены книг из таблицы Книги.

SELECT name, author, price FROM "Book"

 

2. Напишите запрос для вывода всех уникальных имен авторов книг в текущем порядке из таблицы Книги.

SELECT DISTINCT author FROM "Book" ORDER BY author

 

3. Напишите запрос для вывода всех заказов из таблицы Заказы со значениями суммы оплаты выше 1,000 грн.

SELECT zakaz.*

FROM zakaz, "Book"

WHERE zakaz.num_book="Book".num_book AND "Book".price>1000

 

4. Напишите запрос к таблице Заказы для вывода всех оплаченных заказов, соответствующих заказчику с именем «Иванов И.».

SELECT zakaz.*

FROM zakaz, client

WHERE zakaz.num_client=client.num_client

AND zakaz.pay='Да'

AND client.name=' Иванов И.'

 

5. Напишите запрос для вывода кодов всех книг, их цен и кодов поставщиков для книг, поставленных из Киева.

SELECT "Book".num_book,"Book".price, postavchik.num_suppl

FROM "Book", postavchik, postavka

WHERE postavka.num_book="Book".num_book

AND postavka.num_postavchik=postavchik.num_suppl

AND postavchik.city='Киев'

 

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

SELECT * FROM client WHERE LEFT(name,1) BETWEEN 'А' AND 'М'

 

 

7. Напишите запрос для выборки всех книг, в названии которых есть словосочетание «база данных» или «базы данных» или «баз данных».

SELECT * FROM "Book"

WHERE name LIKE '%база данных%'

OR name LIKE '%базы данных%'

OR name LIKE '%баз данных%'

 

8. Напишите запрос для подсчета суммы всех заказов на 31 января 2014 года.

SELECT SUM("Book".price) FROM "Book", zakaz

WHERE "Book".num_book=zakaz.num_book

AND zakaz.data='2014-01-31'

 

9. Напишите запрос для подсчета общей суммы заказов за каждый день с 01.02.14 по 01.04.14.

SELECT zakaz.data, SUM("Book".price) FROM "Book", zakaz

WHERE "Book".num_book=zakaz.num_book

AND zakaz.data BETWEEN '2014-02-01' AND '2014-04-01'

GROUP BY zakaz.data

 

10. Напишите запрос для формирования рейтинга авторов в виде упорядоченного по убыванию списка авторов и количества их книг, проданных за некоторый период.

SELECT "Book".author, COUNT(zakaz.*) as cnt

FROM "Book", zakaz

WHERE "Book".num_book=zakaz.num_book

AND zakaz.data BETWEEN '2014-02-01' AND '2014-04-01'

GROUP BY "Book".author

ORDER BY cnt DESC

 

3.2 Задания для самостоятельной работы (БД Komunal)

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

SELECT klient.full_name, SUM(schet.dolg) AS zadolj

FROM klient, schet

WHERE schet.id_klient=klient.id

GROUP BY klient.id

HAVING SUM(schet.dolg)>0

 

 

2. Получить перечень предоставляемых коммунальных услуг с указанием тарифов, среднемесячных объемов потребления.

SELECT usluga.name, usluga.price, AVG(schet.volume) AS sred_potreb

FROM usluga, schet

WHERE schet.id_usluga=usluga.id

GROUP BY usluga.id

 

3. Получить списки клиентов, у которых потребление данного вида коммунальных услуг за последний месяц превышает среднее значение.

SELECT klient.full_name, usluga.name, schet.volume,

(SELECT AVG(volume) FROM schet

WHERE schet.id_klient=klient.id AND schet.id_usluga=usluga.id) AS sred

FROM klient, schet, usluga

WHERE klient.id=schet.id_klient

AND usluga.id=schet.id_usluga

AND schet.mes=date_part('month', now()-interval '1 month')

AND schet.god=date_part('year', now()-interval '1 month')

AND volume > (SELECT AVG(volume) FROM schet

WHERE schet.id_klient=klient.id AND schet.id_usluga=usluga.id)

 

4. Получить ведомость оплаты коммунальных услуг за последний месяц клиентами, проживающими по указанному адресу. Вывести итоговые суммы оплаты по каждому клиенту и по каждому виду услуг.

а) сумма оплаты по каждому клиенту, проживающему по адресу "Щорса, 12":

SELECT klient.full_name, SUM(schet.oplata) as k_oplate

FROM klient, schet

WHERE klient.id=schet.id_klient

AND schet.mes=date_part('month', now()-interval '1 month')

AND schet.god=date_part('year', now()-interval '1 month')

AND klient.adres='Щорса, 12'

GROUP BY klient.full_name

 

б) сумма оплаты по каждому виду услуг на адрес "Щорса, 12"

SELECT usluga.name, SUM(schet.oplata) as k_oplate

FROM usluga, schet, klient

WHERE klient.id=schet.id_klient

AND usluga.id=schet.id_usluga

AND schet.mes=date_part('month', now()-interval '1 month')

AND schet.god=date_part('year', now()-interval '1 month')

AND klient.adres='Щорса, 12'

GROUP BY usluga.name

 

5. Получить данные о задолженности по каждому виду коммунальных услуг за каждый месяц с начала года.

SELECT usluga.name, schet.mes, SUM(schet.dolg) AS dolg

FROM usluga, schet

WHERE usluga.id=schet.id_usluga

AND schet.god=date_part('year', now())

GROUP BY usluga.name, schet.mes

ORDER BY usluga.name, schet.mes

 

Выводы.

Выполняя эту лабораторную работу я научился заполнять таблицы БД нужной информацией углубил свои знания о построении БД, связях между таблицами, сохранением целостности БД.

Научился делать выбор нужной информации используя команду SELECT. Используя ее в разных вариациях, комбинациях и ситуациях убедился в ее многогранности и мощности.

 

4.1 Контрольные вопросы



Поделиться:


Последнее изменение этой страницы: 2017-01-25; просмотров: 537; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.191.135.224 (0.014 с.)