Для удобства вывода информации в языке sql нам сейчас не хватает аналога if. Он позволит нам строить разветвленную логику вывода запроса, что очень важно в некоторых запросах. Например при отображении записей в таблице не хочется, чтобы пользователь видел где — то NULL, поэтому для того, чтобы это избежать применяют оператор CASE. Он позволит выводить разные данные в зависимости от значения поля.
Синтаксис CASE:
1
2
3
4
|
CASE выражение
WHEN значение_1
THEN значение_2
END
|
В данном примере мы сравниваем значение_1 с результатом выражение и если результат данного сравнения истина(true), то CASE возвращает значение_2. Таких пар значений можно сделать можно сделать сколько угодно штук. Так же можно задать значение, если не выполниться ни одно из условий:
Синтаксис CASE:
1
2
3
4
5
|
CASE выражение
WHEN значение_1
THEN значение_2
[ELSE] значение_3
END
|
Таким образом если результат сравнения выражения с значением_1 равен false (ложь), то CASE вернет значение_3. В случае отсутствия ELSE, оператор вернет NULL.
Также существует другая форма записи оператора CASE, которая позволяет сравнивать не одно выражение с несколькими значениями, а прям задавать условия для каждого случая.
1
2
3
4
5
|
CASE
WHEN условие_1
THEN значение_1
[ELSE] значение_2
END
|
Данный вид записи оператора CASE также поддерживает несколько пар «WHEN — THEN», что позволяет создавать сложные запросы.
Допустим в нашей таблице все поля кроме ID (ключа) являются необязательными, тогда для того, чтобы не возвращать пользователю NULL можно применить следующий sql запрос:
1
2
3
4
5
6
7
|
SELECT
CASE
WHEN Name IS NULL
THEN 'Неизвестный'
ELSE Name
END
FROM Student
|
Конечно для написания таких запросов в SQL придуман более короткий оператор COALESCE:
Эквивалентен:
1
2
3
4
5
|
CASE
WHEN A IS NULL
THEN B
ELSE A
END
|
|