Оператор CASE в SQL используется для проверки условий и выполнения операций над данными. Синтаксис выражения CASE всегда начинается с ключевого слова CASE
и заканчивается ключевым словом END
, за которым следует псевдоним (оператор AS) имени столбца. Например:
1 2 3 4 5 |
SELECT customer_id, first_name, CASE WHEN age >= 18 THEN 'Allowed' END AS can_vote FROM Customers; |
Здесь мы проверяем каждую строку на соответствие заданному выражению CASE
и выполняем дополнительное действие в случае соответствия. Если возраст (age) больше или равен 18, то выбираются соответствующие строки customer_id и first_name и добавляется дополнительный столбец can_vote со значением Allowed
.
Рассмотрим другой пример. Предположим, мы хотим предоставить клиентам скидку 10% на каждый заказ на рождественской распродаже, если сумма превышает 400.
1 2 3 4 5 |
SELECT order_id, customer_id, CASE WHEN amount >= 400 THEN (amount - amount * 10/100) END AS offer_price FROM Orders; |
Здесь мы проверяем, является ли сумма заказа (amount) больше или равной 400. Если это условие выполнено, добавляется новый столбец offer_price, содержащий суммы заказов с учетом 10% скидки (формула amount - amount*10/100
).
Также можно использовать сразу несколько условий внутри одного выражения CASE
.
1 2 3 4 5 6 |
SELECT customer_id, first_name, CASE WHEN country = 'USA' THEN 'United States of America' WHEN country = 'UK' THEN 'United Kingdom' END AS country_name FROM Customers; |
Здесь мы выбираем столбцы customer_id, first_name и добавляем столбец с именем country_name. Значением country_name будет:
United States of America, если страна (поле country) — USA.
United Kingdom, если страна (поле country) — UK.
CASE с ELSE в SQL
Оператор CASE
может иметь необязательное предложение ELSE
. Предложение ELSE
выполняется, если ни одно из условий в операторе CASE
не выполняется. Например:
1 2 3 4 5 6 7 |
SELECT customer_id, first_name, CASE WHEN country = 'USA' THEN 'United States of America' WHEN country = 'UK' THEN 'United Kingdom' ELSE 'Unknown Country' END AS country_name FROM Customers; |
Здесь мы выбираем столбцы customer_id, first_name и добавляем столбец с именем country_name. Значением country_name будет:
United States of America, если страна (поле country) — USA;
United Kingdom, если страна (поле country) — UK;
Unknown Country, если страной (поле country) не является ни USA, ни UK (срабатывает предложение ELSE
).