Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Материалы к экзамену / 9 типов задач с решениями

.doc
Скачиваний:
50
Добавлен:
02.05.2014
Размер:
53.76 Кб
Скачать

Все следующие задачи с одним условием!!!

Построить 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 штук ни одного товара из тех, которые поставляет поставщик «Иванов и К­о» (предполагается, что это поставщик поставляет хотя бы один товар). Отсортировать результат в обратном порядке кодов.

Соседние файлы в папке Материалы к экзамену