Шпоры по базам данных / Шпора по SQL 3
.docSELECT Поставщик.КодПост, Поставщик.НазвПост, Поставщик.Статус
FROM Поставщик_x LEFT JOIN Поставщик _y ON( x.Город=y.Город)
WHERE x.Статус<=y.Статус
ORDER BY НазвПост
Поставщик (КодПост, НазвПост, Статус, Город) – справочник поставщиков;
Товар (КодТовара, НазвТовара, Вес, Цвет, Город) – справочник товаров;
Поставка (КодПост, КодТовара, Количество) – поставка данным поставщикам данного товара.
Извлечь поставщиков, которые поставляют товары, и товары которые поставляются поставщикам. Результат должен содержать колонки: «код» (поставщика/товара); «название» (поставщика/товара); «тип» (поставщик/товар); «количество» (суммарное число товаров во всех поставках поставщика / товара). Упорядочить по типам, затем – по названиям.
SELECT DISTINCT Поставка.КодПост, Поставщик.НазвПост, AS ‘Тип’, SUM(Поставка.qty)
FROM Поставщик INNER JOIN Поставка ON (Поставщик.КодПост = Поставка.КодПост)
WHERE count(*)>0
GROUP BY (Поставка.КодПост)
UNION
SELECT Товар.КодТовара, Товар.Назв.товара ‘товар’ AS ‘тип’, SUM
FROM Товар INNER JOIN Поставка ON (Товар.КодТовара = Поставка.КодТовара)
WHERE count(*)>0
GROUP BY Поставка.КодТовара
ORDER BY Тип
ORDER BY Назв.
Поставщик (КодПост, НазвПост, Статус, Город) – справочник поставщиков;
Товар (КодТовара, НазвТовара, Вес, Цвет, Город) – справочник товаров;
Поставка (КодПост, КодТовара, Количество) – поставка данным поставщикам данного товара.
Извлечь коды и названия поставщиков, которые либо вовсе не поставляют всего один товар, причем из Парижа. Результат упорядочить по названиям.
SELECT Поставка.КодПост, Поставщик.НазвПост
FROM Поставщик INNER JOIN Поставка ON(Поставщик.КодПост=Поставка.КодПост)
WHERE count(*)=0
UNION
SELECT Поставка.КодПост, Поставщик.НазвПост
FROM Поставщик INNER JOIN Поставка ON (Поставщик.КодПост=Поставка.КодПост)
WHERE count(*)=1 AND city=’paris’
GROUP BY Поставка.КодПост
ORDER BY Поставщик.НазвПост
Поставщик (КодПост, НазвПост, Статус, Город) – справочник поставщиков;
Товар (КодТовара, НазвТовара, Вес, Цвет, Город) – справочник товаров;
Поставка (КодПост, КодТовара, Количество) – поставка данным поставщикам данного товара.
Извлечь сведения о поставщиках со средним количеством товаров в поставке выше 200: код, название, количество поставок и суммарное количество поставляемых товаров. Упорядочить по названиям.
SELECT Поставка.КодПост, Поставщик.НазвПост, count(*), SUM(Поставка.qty)
FROM Поставщик INNER JOIN Поставка ON (Поставщик.КодПост=Поставка.КодПост)
WHERE AVG(Поставка.qty)>200
GROUP BY Поставка.КодПост
ORDER BY Поставщик.НазвПост
Поставщик (КодПост, НазвПост, Статус, Город) – справочник поставщиков;
Товар (КодТовара, НазвТовара, Вес, Цвет, Город) – справочник товаров;
Поставка (КодПост, КодТовара, Количество) – поставка данным поставщикам данного товара.
Извлечь статистику поставщиков: статус, город, количество поставщиков с данным статусом из данного города, количество их поставок, суммарное количество поставляемых ими товаров. Упорядочить по статусам, затем – по городам.
SELECT Поставщик.status, Поставщик.city, count(*), SUM(Поставка.qty), count(Поставка.КодПост)
FROM Поставщик INNER JOIN Поставка ON (Поставщик.КодПост=Поставка.КодПост)
GROUP BY Поставщик.status, Поставщик.city
ORDER BY Поставщик.status, Поставщик.city
Поставщик (КодПост, НазвПост, Статус, Город) – справочник поставщиков;
Товар (КодТовара, НазвТовара, Вес, Цвет, Город) – справочник товаров;
Поставка (КодПост, КодТовара, Количество) – поставка данным поставщикам данного товара.
Извлечь сведения о товарах, у которых их суммарное количество в поставках поставщиков из Парижа выше, чем суммарное количество товаров, поставляемых поставщиком с кодом «123123»: код, название, суммарное количество.
SELECT Поставка.КодТовара, Товар.НазвТовара, sum(Поставка.qty)
FROM Поставка, Поставщик, Товар
WHERE(Поставка.КодПост=Поставщик.КодПост) AND (Поставка.КодТовара=Товар.КодТовара) AND(Поставщик.city=’Paris’)
GROUP BY Поставка.КодТовара, Товар.НазвТовара
HAVING SUM(Поставка.qty)>(SELECT SUM(Поставка.qty)
FROM Поставка
WHERE Поставка.КодПост=’123123’)
Поставщик (КодПост, НазвПост, Статус, Город) – справочник поставщиков;
Товар (КодТовара, НазвТовара, Вес, Цвет, Город) – справочник товаров;
Поставка (КодПост, КодТовара, Количество) – поставка данным поставщикам данного товара.
Извлечь коды и названия поставщиков, поставляющих более 100 штук в точности тех товаров, которые поставляет поставщик «Иванов и Ко». отсортировать результат в алфавитном порядке названий.
SELECT Поставщик.КодПост, Поставщик.НазвПост
FROM Поставщик INNER JOIN Поставка ON (Поставщик.КодПост=Поставка.КодПост)
WHERE
EXIST(SELECT DISTINCT Поставка.КодТовара
FROM Поставка INNER JOIN Поставщик ON (Поставщик.КодПост=Поставка.КодПост)
WHERE (Поставщик.НазвПост=’ Ivanov’) AND (Поставка.qty>100)
ORDER BY Поставщик.НазвПост
Поставщик (КодПост, НазвПост, Статус, Город) – справочник поставщиков;
Товар (КодТовара, НазвТовара, Вес, Цвет, Город) – справочник товаров;
Поставка (КодПост, КодТовара, Количество) – поставка данным поставщикам данного товара.
Извлечь коды и названия товаров, которые поставляют в количестве больше 100 штук, по крайней мере, все те поставщики, которые поставляют товар «Шайба». Отсортировать результат в обратном алфавитном порядке названий.
SELECT Поставка.КодТовара, Товар.НазвТовара
FROM Товар INNER JOIN Поставка ON (Поставка.КодТовара=Товар.КодТовара)
WHERE NOT EXIST(SELECT Поставка.КодПост
FROM Поставка INNER JOIN Товар ON (…)
WHERE (Товар.НазвТовара=’SHaiba’) AND
NOT IN (SELECT Поставка.КодПост FROM Поставка, Товар
WHERE ((Поставка.КодТовара=Товар.КодТовара) AND Поставка.qty>100)
ORDER BY Товар.НазвТовара DECT
Поставщик (КодПост, НазвПост, Статус, Город) – справочник поставщиков;
Товар (КодТовара, НазвТовара, Вес, Цвет, Город) – справочник товаров;
Поставка (КодПост, КодТовара, Количество) – поставка данным поставщикам данного товара.
Извлечь коды и названия поставщиков, не поставляющих в количестве более 100 штук ни одного товара из тех, которые поставляет поставщик «Иванов и Ко» (предполагается, что это поставщик поставляет хотя бы один товар). Отсортировать результат в обратном порядке кодов.
SELECT Поставщик.КодПост, Поставщик.НазвПост
FROM Поставщик INNER JOIN Поставка ON(Поставщик.КодПост=Поставка.КодПост)
WHERE NOT EXIST((SELECT Поставка.КодТовара
FROM Поставка INNER JOIN Поставщик ON (…)
WHERE Поставщик.НазвПост=’Ivanov) AND Поставка.qty>100)
ORDER BY Поставщик.КодПост DECT
Продукт (Код_Продукта, Назв_Продукта, Калорийность)
Блюдо (Код_Блюда, Назв_Блюда, Категория)
Рецепт (Код_Продукта, Код_Блюда, Количество_Продукции_В_Блюде)
Извлечь статистику по калорийности: калорийность, количество продуктов с этой калорийностью, количество блюд с этой калорийностью. Исключить названия продуктов, начинающиеся с буквы А и блюд категорий Б. Упорядочить в обратном порядке.
SELECT Продукт, Калорийность, COUNT (Код_Продукта) COUNT(Код_Блюда)
FROM Продукт, Рецепт.
WHERE Код_Продукта NOT IN (SELECT Код_Продукта FROM Продукт WHERE Назв_Продукта LIKE ’A%’)
And Код_Блюда NOT IN (SELECT Код_Блюда FROM Блюдо WHERE Категория = ‘Б’)
GROUP BY COUNT (Код_Продукта), COUNT (Код_Блюда)
ORDER BY Калорийность DESC
