ПРИХОДИТЕ УЧИТЬСЯ НОВОЙ ПРОФЕССИИ ЛЕТОМ СО СКИДКОЙ ДО 70%Забронировать скидку

Условное заполнение колонок в MySQL: Case Statement

Пройдите тест, узнайте какой профессии подходите и получите бесплатную карьерную консультацию
В конце подарим скидку до 55% на обучение
Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

В MySQL условный оператор CASE предоставляет возможность реализации условной логики в SQL-запросах, что позволяет присваивать данные в соответствии с заданными условиями:

SQL
Скопировать код
SELECT employee_id,
       CASE
           WHEN salary < 3000 THEN 'Начальный уровень' 
           WHEN salary <= 7000 THEN 'Средний уровень' 
           ELSE 'Ведущий уровень'
       END AS experience_level
FROM employees;

Выполнив этот запрос, мы получим идентификатор employee_id каждого сотрудника и классифицируем его уровень опыта experience_level в зависимости от размера его заработной платы salary.

Пройдите тест и узнайте подходит ли вам сфера IT
Пройти тест

Портативность и специфические для MySQL функции

При использовании стандартного SQL-синтаксиса, особенно при работе с условным оператором CASE, достигается максимальная переносимость запросов между различными SQL-системами. Функции, уникальные для MySQL, такие как IF(), могут быть более интуитивно понятными, однако тем не менее, CASE обеспечивает беспрепятственный переход между разными базами данных.

Пример запроса с использованием функции IF():

SQL
Скопировать код
SELECT employee_id,
       IF(salary < 3000, 'Начальный уровень',   
          IF(salary <= 7000, 'Средний уровень',  
            'Ведущий уровень')) AS experience_level 
FROM employees;

Экспериментируйте с различными запросами и сценариями данных, чтобы проверить преимущества использования условного оператора CASE, который позволяет точно контролировать сложные условия.

Обработка неподходящих условий и задание значений по умолчанию

С помощью ELSE в конструкции CASE можно задать значение по умолчанию, что гарантирует присваивание результата каждой отдельной строке. Это помогает избежать проблем с пустыми полями, которые могут возникнуть при анализе данных.

SQL
Скопировать код
SELECT product_id,
       CASE
           WHEN quantity > 50 THEN 'Массовый запас'
           WHEN quantity > 10 THEN 'Достаточный запас'
           ELSE 'Низкий запас'
       END AS stock_status
FROM products;

Визуализация

Применим наш условный оператор CASE в кулинарном контексте!

SQL
Скопировать код
SELECT Dish,
  CASE 
    WHEN main_ingredient = 'Tomato' THEN 'Томатный суп'
    WHEN main_ingredient = 'Chicken' THEN 'Жареное куриное бедро' 
    WHEN main_ingredient = 'Eggplant' THEN 'Блюдо из баклажанов'
    ELSE 'Свежий салат'
  END AS 'Meal' 
FROM Kitchen;

Оператор CASE действует как секретный ингредиент,раскрывающий настоящее мастерство шеф-повара.

CASE во всей красе: погружаемся в детали

Комбинирование условий с AND, OR и другими!

CASE идеально подходит для обработки множественных условий, вложенных конструкций и логических операторов типа AND и OR:

SQL
Скопировать код
SELECT customer_id,
       CASE
         WHEN age < 20 AND student = 'yes' THEN 'Скидка для молодых студентов' 
         WHEN age BETWEEN 20 AND 65 THEN 'Стандартная цена'
         ELSE 'Скидка для пенсионеров'
       END AS pricing_tier
FROM customers;

Не нашлось подходящих условий? Задействуем нули!

Используя CASE, можно обрабатывать случаи с NULL, присваивая нулевое значение, когда нет подходящих условий:

SQL
Скопировать код
SELECT product_id,
       CASE
           WHEN is_discounted THEN discount_value 
           ELSE 0 
       END AS discount_applied
FROM products;

Особенности обработки NULL

Следует быть внимательными при работе с NULL в CASE: в MySQL NULL интерпретируется как значение, не соответствующее ни одному из условий WHEN. Используйте эту особенность с осторожностью:

SQL
Скопировать код
SELECT user_id,
       CASE
           WHEN last_login_date IS NULL THEN 'Никогда не входил в систему'
           ELSE 'Активный пользователь'
       END AS user_status
FROM users;

Полезные материалы

  1. MySQL :: Руководство по ссылке MySQL 8.0 :: 15.6.5.1 Оператор CASE — подробное описание условного оператора CASE от разработчиков MySQL.
  2. Самые новые вопросы "mysql+case" – Stack Overflow — сборник практических вопросов и ответов, касающихся использования CASE в MySQL.
  3. sql – Значения NULL внутри условия NOT IN – Stack Overflow — обсуждение нюансов обработки NULL в SQL запросах.
  4. SQL CASE Expression — детальное объяснение синтаксиса и использования условного оператора CASE.
Свежие материалы