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

Занятие 05. Условные конструкции: операторы CASE, IF

📁 Блок: SQL / MySQL ⏱️ Время изучения: ~60 мин 🎯 Сложность: Начальная
#case #if #as #concat #left #right #substring #length #trim #replace #upper #lower #coalesce

⚡ Кратко: суть темы

Занятие учит создавать новые столбцы на основе условий. Разбираем оператор 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;