Хитрые SQL-запросы
Таблица Product представляет производителя (maker), номер модели (model) и тип (‘PC’ - ПК, ‘Laptop’ - ПК-блокнот или ‘Printer’ - принтер). Предполагается, что номера моделей в таблице Product уникальны для всех производителей и типов продуктов. В таблице PC для каждого ПК, однозначно определяемого уникальным кодом – code, указаны - модель – model (внешний ключ к таблице Product), - скорость - speed (процессора в мегагерцах), - объем памяти - ram (в мегабайтах), - размер диска - hd (в гигабайтах), - скорость считывающего устройства - cd (например, ‘4x’) - цена - price.
Таблица Laptop аналогична таблице РС за исключением того, что вместо скорости CD содержит размер экрана -screen (в дюймах). В таблице Printer для каждой модели принтера указывается, является ли он - цветным - color (‘y’, если цветной), - тип принтера - type (лазерный – ‘Laser’, струйный – ‘Jet’ или матричный – ‘Matrix’) - цена - price.
Краткая информация о базе данных “Компьютерная фирма”:
Схема БД состоит из четырех таблиц:
Product(maker, model, type)
PC(code, model, speed, ram, hd, cd, price)
Laptop(code, model, speed, ram, hd, price, screen)
Printer(code, model, color, type, price)|
1) Пример запроса на исключение (except)
http://www.sql-ex.ru/learn_exercises.php#answer_ref
Найдите производителя, выпускающего ПК, но не ПК-блокноты.
Select distinct maker from product where type='PC' except select maker from product where type='Laptop'
- Запрос с подзапросом на поиск максимального (минимального) значения
Найдите модели принтеров, имеющих самую высокую цену. Вывести: model, price
- Вариант 1: Select model, price from printer where price in (select max(price) from printer)
-
Вариант 2: Select x.model, y.price from product x, printer y where x.model=y.model and y.price in (select max(price) from printer)
-
Нахождение среднего значения