Занятие 05. Условные конструкции: операторы CASE, IF
⚡ Кратко: суть темы
Занятие учит создавать новые столбцы на основе условий. Разбираем оператор CASE, псевдонимы AS, функцию IF в MySQL, математические операции, строковые функции и конкатенацию.
CASE WHEN ... THEN ... ELSE ... END— переносит ветвление в SQL.ASзадаёт понятное имя вычисляемому столбцу.IF(condition, true, false)— короткая альтернатива CASE, но только в MySQL.
Что запомнить: CASE — стандарт SQL и работает почти везде; IF — специфика MySQL.
Частая ошибка: забыть END в конце блока CASE.
✅ Решения
1–2. Классификация цены
-- явный вариант
SELECT product_name, standard_cost,
CASE
WHEN standard_cost > 50 THEN 'Дорогой'
WHEN standard_cost > 20 AND standard_cost <= 50 THEN 'Средний'
ELSE 'Дешевый'
END AS price_category
FROM products;
-- оптимизированный вариант
SELECT product_name, standard_cost,
CASE
WHEN standard_cost > 50 THEN 'Дорогой'
WHEN standard_cost > 20 THEN 'Средний'
ELSE 'Дешевый'
END AS price_category
FROM products;
3. Скидка по региону
SELECT *,
CASE
WHEN state_province IN ('WA', 'CA') THEN 5
WHEN state_province IN ('ID', 'OR') THEN 7
WHEN state_province IN ('UT', 'NV') THEN 13
ELSE 0
END AS discount
FROM customers;
4. Статус заказа
SELECT
id,
order_date,
shipped_date,
CASE
WHEN shipped_date IS NULL THEN 'Ожидание отправки'
WHEN shipped_date = order_date THEN 'Отправлено в день заказа'
ELSE 'Отправлено'
END AS order_status
FROM orders;
5. IF
SELECT
product_name,
IF(standard_cost > 20, 'Expensive', 'Affordable') AS price_category
FROM products;
6–9. Строковые функции
SELECT company, RIGHT(company, 2) AS short_name
FROM customers;
SELECT business_phone, SUBSTRING(business_phone, 6, 3) AS phone_code
FROM customers;
SELECT CONCAT(first_name, ' ', last_name) AS full_name
FROM employees;
SELECT notes, COALESCE(notes, 'Not filled') AS notes_filled
FROM employees;