Занятие 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.
📖 Оператор CASE
CASE позволяет вернуть разные значения в зависимости от условий. Работает аналогично if-elif-else в Python.
CASE
WHEN condition1 THEN result1
WHEN condition2 THEN result2
ELSE result_default
END
Если ELSE не указан, строки, не подошедшие ни под одно условие, получат NULL.
CASE создаёт новый столбец в выборке, но не меняет исходную таблицу.
📖 Алиасы (AS)
Вычисляемым столбцам нужно давать понятные имена. Для этого используется ключевое слово AS, которое можно опустить.
SELECT
standard_cost * quantity AS total_price
FROM order_details;
📖 Оператор IF
В MySQL есть функция IF с тремя аргументами:
SELECT IF(standard_cost > 20, 'Expensive', 'Affordable') AS price_category
FROM products;
Она удобна для двух вариантов, но не является стандартом SQL: в PostgreSQL и SQL Server прямого аналога нет. Поэтому для переносимых запросов предпочтительнее CASE.
📖 Другие способы создания столбцов
Математические операции
SQL поддерживает +, -, *, /. Применяйте только к числовым столбцам.
SELECT
product_id,
unit_price,
quantity,
unit_price * quantity AS total_price
FROM order_details;
Строковые функции
LEFT(str, n)— n символов с начала.RIGHT(str, n)— n символов с конца.SUBSTRING(str, pos, len)— подстрока.LENGTH(str)— длина строки в байтах.TRIM(str),LTRIM(str),RTRIM(str)— удаление пробелов.REPLACE(str, old, new)— замена подстроки.UPPER(str),LOWER(str)— регистр.
Конкатенация
CONCAT объединяет строки:
SELECT CONCAT(first_name, ' ', last_name) AS full_name
FROM employees;
COALESCE
Возвращает первое не-NULL значение из списка. Удобна для замены пропусков.
SELECT notes, COALESCE(notes, 'Not filled') AS notes_filled
FROM employees;