Материалы к экзамену / 9 типов задач с решениями
.docВсе следующие задачи с одним условием!!!
Построить SQL-запрос для выборки сведений из БД, содержащей таблицы:
справочник поставщиков
Поставщик (КодПост, НазвПост, Статус, Город);
справочник товаров
Товар (КодТовара, НазвТовара, Вес, Цвет,Город);
поставка данным поставщиком данного товара
Поставка (КодПост, КодТовара, Количество).
1. Извлечь все пары поставщиков из одного города, такие, что статус второго поставщика не меньше статуса первого. Для каждого напарника указать код, название, статус. Для поставщиков, не имеющих пары, значения напарника – NULL. Рез-тат упорядочить по названиям поставщиков.
select x.КодПост, x.НазвПост, x.Статус,
y.КодПост, y.НазвПост, y.Статус
from Поставщик x left outer join Поставщик y
on (x.Город=y.Город
and x.Статус=y.Статус
and x.КодПост<>y.КодПост)
Order By x.НазвПост, y.НазвПост;
2(?). Извлечь поставщиков, кот. поставляют товары, и товары кот. поставляются поставщикам. Рез-тат д. сод-ть колонки: «код» (поставщика/товара); «название» (поставщика/товара); «тип» (поставщик/товар); «количество» (суммарное число товаров во всех поставках поставщика / товара). Уп-ть по типам, затем – по названиям.
Select КодПост as Код,
НазвПост as Название,
“Поставщик” as Тип
From Поставщик
Where КодПост in (Select КодПост From Поставка)
Union
Select КодТовара as Код,
НазвТовара as Название,
“Товар” as Тип
From Товар
Where КодТовара in (Select КодТовара From Поставка)
Order by Тип, Название;
3(?). Извлечь коды и названия поставщиков, кот. либо вовсе не поставляют, либо всего один товар, причем из Парижа. Рез-тат уп-ть по названиям.
Select Поставщик.КодПост,
Поставщик.НазвПост
from Поставщик
where КодПост not in (select КодПост from Поставка)
or КодПост in (select КодПост, count(КодТовара) as Кол
from Поставка
Group By КодПост
Having count(КодТовара)=1
and КодТовара in
(select КодТовара
from Товар
where
Город=’Париж’));
4. Извлечь сведения о поставщиках со средним кол-вом товаров в поставке выше 200: код, название, кол-во поставок и суммарное кол-во поставляемых товаров. Уп-ть по названиям.
Select Поставщик.НазвПост,
Поставщик.КодПост,
Count(Поставка.КодПост) as КолПост,
Sum(Количество) as Сумма
from Поставка inner join Поставщик
on (Поставка.КодПост=Поставщик.КодПост)
Group By КодПост, НазвПост
Having Avg(Количество)>200)
order by Поставщик.НазвПост;
5. Извлечь статистику поставщиков: статус, город, количество поставщиков с данным статусом из данного города, количество их поставок, суммарное количество поставляемых ими товаров. Упорядочить по статусам, затем – по городам.
6. Извлечь сведения о товарах, у которых их суммарное количество в поставках поставщиков из Парижа выше, чем суммарное количество товаров, поставляемых поставщиком с кодом «123123»: код, название, суммарное количество.
Select КодТов, НазвТов, sum(Количество) as СуммКол
From Товар inner join Поставка
on (Товар.КодТов=Поставка.КодТов)
Where КодТов in (select КодТов
From Поставка
Where КодПост in (select КодПост
From Поставщик
Where
Город=’Париж’))
Group by Товар.КодТов, Товар.НазвТов
Having Sum(Количество)>(select sum(Количество)
From Поставка
Where КодПост=’123123’);
По Ксюше
Select КодТов, НазвТов
From Товар inner join Поставка
on (Товар.КодТов=Поставка.КодТов)
where Город=’Париж’
Group by КодТов, НазвТов
Having Sum(Количество)>(select sum(Количество)
From Поставка
Where КодПост=’123123’);
7. Извлечь коды и названия поставщиков, поставляющих более 100 штук в точности тех товаров, которые поставляет поставщик «Иванов и Ко». Отсортировать результат в алфавитном порядке названий.
Select КодПост, НазвПост
From Поставщик
Where not exists (select *
From Поставка
Where КодПост in (
Select КодПост
From Поставщик
Where НазвПост=’Иванов’)
And КодТов not in (
Select КодТов
From Поставка
Where (Количество>100
and
Поставка.КодПост=Поставщик.КодПост)))
And not exists (select КодТов
From Поставка
Where Количество>100
And КодПост not in (
Select КодПост
From Поставщик
Where
НазвПост=’Иванов’))
Order by НазвТов asc;
8. Извлечь коды и названия товаров, которые поставляют в количестве больше 100 штук, по крайней мере, все те поставщики, которые поставляют товар «Шайба». Отсортировать результат в обратном алфавитном порядке названий.
Select КодТовара, НазвТовара
From Товар
Where КодТовара in
(select КодТовара
From Поставка
Where Количество>100
And
Not exists (select *
From Поставка
Where КодТовара in (
Select КодТовара
From Товар
Where НазвТовара=”шайба”)
And КодПост not in (
Select КодПост
From Поставка
Where
Товар.КодТовара=Поставка.КодТовара)))
Order by НазвТовара desc;
9. Извлечь коды и названия поставщиков, не поставляющих в количестве более 100 штук ни одного товара из тех, которые поставляет поставщик «Иванов и Ко» (предполагается, что это поставщик поставляет хотя бы один товар). Отсортировать результат в обратном порядке кодов.