← К оглавлению занятия

💻 Примеры

⚡ Кратко: примеры

  • Фильтрация: WHERE price < 500, IN ('12x','24x').
  • JOIN: связь Product с Laptop/Printer по model.
  • Группировка: GROUP BY hd HAVING COUNT(*) >= 2.
  • Подзапросы: price = (SELECT MAX(price) FROM Printer).
  • Самосоединение: PC AS pc1 JOIN PC AS pc2 с условием pc1.model > pc2.model.

📖 Фильтрация

Пример 1. ПК дешевле 500 долларов

Найдём номер модели, скорость и размер жёсткого диска для всех ПК стоимостью менее 500 дол.

SELECT model, speed, hd
FROM PC
WHERE price < 500;

Пример 2. Производители принтеров

Используем DISTINCT, чтобы каждый производитель встретился один раз.

SELECT DISTINCT maker
FROM Product
WHERE type = 'Printer';

Пример 3. Дорогие ноутбуки

Выберем модели ноутбуков с ценой выше 1000 дол.

SELECT model, ram, screen
FROM Laptop
WHERE price > 1000;

Пример 4. ПК с определённым CD и ценой

Сочетание условий через AND и IN.

SELECT model, speed, hd
FROM PC
WHERE price < 600
  AND cd IN ('12x', '24x');

📖 JOIN

Пример 5. Производители и скорости ноутбуков

Для каждого производителя, выпускающего ноутбуки с жёстким диском не менее 10 Гбайт, найдём скорости таких ноутбуков.

SELECT DISTINCT maker, speed
FROM Product
JOIN Laptop USING (model)
WHERE hd >= 10;

📖 Подзапросы

Пример 6. Самые дорогие принтеры

Подзапрос находит максимальную цену, внешний запрос — модели с такой ценой.

SELECT model, price
FROM Printer
WHERE price = (SELECT MAX(price) FROM Printer);

Пример 9. Ноутбуки медленнее любого ПК

Сравним скорость ноутбука с минимальной скоростью ПК.

SELECT DISTINCT type, model, speed
FROM Laptop
LEFT JOIN Product USING (model)
WHERE speed < (SELECT MIN(speed) FROM PC);

Пример 10. Самые дешёвые цветные принтеры

Найдём минимальную цену среди цветных принтеров и выведем их производителей.

SELECT DISTINCT maker, price
FROM Printer
JOIN Product USING (model)
WHERE price = (SELECT MIN(price) FROM Printer WHERE color = 'y')
  AND color = 'y';

📖 Группировка

Пример 7. Жёсткие диски, встречающиеся у двух и более ПК

Группируем по объёму жёсткого диска и оставляем только те группы, где две и более модели.

SELECT hd
FROM PC
GROUP BY hd
HAVING COUNT(model) >= 2;

📖 Самосоединение

Пример 8. Пары ПК с одинаковой скоростью и RAM

Соединяем таблицу PC саму с собой и убираем зеркальные пары условием pc1.model > pc2.model.

SELECT DISTINCT pc1.model, pc2.model, pc1.speed, pc1.ram
FROM PC AS pc1
JOIN PC AS pc2
  ON pc1.speed = pc2.speed
 AND pc1.ram   = pc2.ram
 AND pc1.model > pc2.model;