Условное выражение If-Else в SQL Select: ID или IDParent

Пройдите тест, узнайте какой профессии подходите

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

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

Для применения условной логики в SQL удобно использовать оператор CASE в рамках запроса SELECT. Этот оператор аналогичен структуре if-else в известных языках программирования и возвращает результат в зависимости от выполнения условий. Вот общий шаблон его использования:

SQL
Скопировать код
SELECT 
  column1, 
  CASE WHEN условие THEN 'РезультатЕслиИстина' ELSE 'РезультатЕслиЛожь' END AS ИмяРезультирующегоСтолбца
FROM 
  имя_таблицы;

Вам необходимо подставить свое условие, 'РезультатЕслиИстина', 'РезультатЕслиЛожь', ИмяРезультирующегоСтолбца и имя_таблицы в соответствии со своими задачами и данными. ИмяРезультирующегоСтолбца будет помогать точно отражать назначение колонок и делать результаты более понятными.

Кинга Идем в IT: пошаговый план для смены профессии

Обработка сложных условий

Полный потенциал оператора CASE проявляется через его способность управлять несколькими условиями, позволяя формировать вложенные структуры условного ветвления в запросе SQL SELECT. Рассмотрим расширенный пример:

SQL
Скопировать код
SELECT 
  Имя, 
  Возраст,
  CASE 
    WHEN Возраст < 18 THEN 'Несовершеннолетний' 
    WHEN Возраст BETWEEN 18 AND 65 THEN 'Взрослый' 
    ELSE 'Пенсионер' 
  END AS ВозрастнаяКатегория
FROM 
  Пользователи;

Детальное рассмотрение: Несколько выражений CASE в одном запросе

Рассмотрим пример использования различных условий в рамках одного запроса SELECT – каждое условие соответствует своему выражению CASE, придавая запросу функциональное разнообразие:

SQL
Скопировать код
SELECT 
  ИдентификаторСотрудника,
  CASE WHEN Оценка > 80 THEN 'Превосходит ожидания' ELSE 'Соответствует ожиданиям' END AS КлассификацияПроизводительности,
  CASE WHEN Продажи > 10000 THEN 'Лучший продавец' ELSE 'Продавец' END AS СтатусПродаж
FROM 
  Сотрудники;

Пример иллюстрирует анализ разностороннего профиля каждого сотрудника и обеспечивает всесторонний анализ собранных данных.

Оптимизация и лучшие практики

Соблюдение следующих рекомендаций улучшает производительность и понятность кода SQL:

  1. Давайте столбцам точные имена, чтобы избежать путаницы в сложных запросах.
  2. Задавайте уникальные псевдонимы для каждого CASE для лучшей интерпретации результатов.
  3. Всегда завершайте оператор CASE словом END, чтобы предотвратить ошибки.
  4. Помещайте сложные условия в функции для облегчения и сокращения кода.

    Помните, что CASE возвращает только одно скалярное значение на строку результата.

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

Исходя из примера книжного магазина ниже становится более наглядным:

SQL
Скопировать код
SELECT Название,
       CASE WHEN Количество > 0 THEN 'В наличии'
            WHEN Заказано > 0 THEN 'Под заказ'
            ELSE 'Отсутствует'
       END as СтатусНаличия
FROM Книги;

Статус книги указывает на наличие или отсутствие книги в магазине, что влияет на выбор покупателей:

Markdown
Скопировать код
До: [📖 'SQL' x5, 📕 'Java' x0, 📘 'C#' x0 (5 заказано)]
После: [📖 'SQL' 'В наличии', 📕 'Java' 'Отсутствует', 📘 'C#' 'Под заказ']

Остерегайтесь подводных камней

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

NULL-значения могут привести к неожиданным результатам. Ниже приведен пример их корректной обработки:

SQL
Скопировать код
SELECT 
  ИмяИгрока, 
  CASE 
    WHEN Очки IS NULL THEN 'Без результата'
    WHEN Очки >= 100 THEN 'Высокий результат'
    ELSE 'Низкий результат'
  END AS СтатусИгрока
FROM 
  ОчкиИгроков;

Не забывайте про условие ELSE

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

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

  1. Oracle PL/SQL IF THEN ELSE Statements — Документация по if-else в PL/SQL от Oracle.
  2. Conditional Statements in PostgreSQL: CASE and COALESCE — Обзор условных конструкций в PostgreSQL.
  3. SQL Server: CASE vs. IIF – Сравнение и производительность — Анализ использования CASE и IIF в SQL Server.