Хитрые 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'
  1. Запрос с подзапросом на поиск максимального (минимального) значения

Найдите модели принтеров, имеющих самую высокую цену. Вывести: 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)

  • Нахождение среднего значения

Select avg(speed) from pc