logo

Использование CASE в WHERE в SQL для условных запросов

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

В SQL оператор CASE применяется в предложении WHERE для добавления логики на основе условий, которая динамически изменяет критерии фильтрации.

Пример:

SQL
Скопировать код
SELECT * FROM Сотрудники
WHERE Зарплата > CASE
                   WHEN Опыт < 5 THEN 50000
                   WHEN Опыт >= 5 THEN 75000
                   ELSE 60000
                 END;

Таким образом при помощи оператора CASE устанавливается порог для Зарплаты в зависимости от Опыта работы, что влияет на выбор строк.

OR на примете

Иногда использование оператора OR может оказаться более простой альтернативой CASE, делая при этом код более понятным и сжатым:

SQL
Скопировать код
SELECT Аудиторы 
FROM Перерыв_на_кофе
WHERE (Количество_съеденных_пончиков < 12 AND Настроение = 'Счастливое') OR Количество_съеденных_пончиков >= 12;

В данном запросе отказ от CASE в пользу логических операторов ведёт к формированию более лаконичного и прозрачного кода.

Примечание об использовании CASE

CASE возвращает значения, не условия

Оператор CASE возвращает значения, а не условия, что может приводить к ошибкам из-за недопонимания. Тщательно проверяйте свои запросы!

Различия в синтаксисе SQL в зависимости от СУБД

Особенности синтаксиса SQL могут отличаться в зависимости от Системы Управления Базами Данных, такой как Oracle или MySQL. Изучайте, адаптируйте и оптимизируйте запросы для каждой конкретной базы данных.

Важность тестирования и читаемости кода

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

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

Можно представить использование CASE в WHERE как выбор маршрута в зависимости от погодных условий:

Markdown
Скопировать код
Погода (☀️/☁️/🌧️): [Солнечно, Облачно, Дождливо]

Как выбрать маршрут:
| Погода  | Маршрут             |
| ------- | ------------------- |
| ☀️       | Маршрут А (🚶‍♂️)    |
| ☁️       | Маршрут Б (🚶‍♀️)    |
| 🌧️       | Оставаться дома (🏠) |

Пример на SQL:

SQL
Скопировать код
SELECT Исследователи
FROM Посещения_лабиринта
WHERE Путь = CASE
                WHEN Погода = 'Солнечно' THEN 'Путь А'
                WHEN Погода = 'Облачно' THEN 'Путь Б'
                ELSE 'Остаться дома'
              END;

Так же, как в примере с погодой, в SQL оператор CASE направляет выбор записей для вывода.

Всё о логике

Простота дорогого стоит

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

SQL
Скопировать код
SELECT * FROM Шутки
WHERE Категория = 'безопасные' AND (
    (Оценка = 'смешная' AND Возраст_аудитории IS NULL) OR 
    (Оценка <> 'смешная') 
);

AND – ваш верный соратник

Применение AND позволяет увеличить эффективность предложения WHERE, придавая SQL-запросам добавленную элегантность.

Упрощение с применением IN

Оператор IN может значительно упростить запросы, заменяя множественные условия OR, при условии сохранения логики запроса:

SQL
Скопировать код
SELECT * FROM Клиенты
WHERE Регион IN ('Восток', 'Запад', 'Север', 'Юг');

Мудрое использование всезначимости

Некоторые условия охватывают все возможные варианты, что делает ненужным использование операторов CASE:

SQL
Скопировать код
SELECT Ид_товара, Уровень_запасов
FROM Инвентарь
WHERE Уровень_запасов = 0 OR Уровень_запасов > 0;

Все товары выбраны независимо от уровня запасов — накапливайте мудрость SQL.

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