1.1 Список условных функций

В языке SQL есть список функций, которые чем-то похожи на оператор if-else и switch в Java.

Всего таких функций 4:

Функции Описание
1 CASE Аналог switch
2 IF() Аналог тернарного оператора или if-else
3 IFNULL() Аналог if-else
4 NULLIF() Аналог if-else

Три последних в SQL представлены в виде функций, а CASE – это полноценный оператор, поэтому мы рассмотрим его отдельно в самом конце.

1.2 Функция IF()

Функция IF() в SQL чем-то напоминает тернарный оператор в Java. В языке SQL она принимает 3 параметра и имеет вид:


IF (условие, истинное, ложное)
        

В функцию IF нужно передать три выражения:

  • условие, которое проверяется на истинность;
  • выражение, которое возвращается, когда условие истинно;
  • выражение, которое возвращается, когда условие ложно.

Ниже я приведу несколько примеров, чтобы было легче понять, как это работает:

Запрос Результат
1 SELECT IF(1>2, 2, 3) 3
2 SELECT IF(1<2, 'yes', 'no') 'yes'
3 SELECT IF(STRCMP('test','test1'), 'no', 'yes') 'no'

1.3 Функция IFNULL() и NULLIF()

Также есть две модификации функции IF().

Первая модификация – это функция IFNULL(). Она принимает только два значения:


IFNULL (выражение1, выражение2)
        

Если выражение1 не равно NULL, тогда функция вернет выражение1. Если же выражение1 IS NULL, то функция вернет выражение2. Суть – подстановка значения по умолчанию, когда поле равно NULL.

Вторая модификация функции IF – это функция NULLIF(), она тоже принимает два значения:


NULLIF (выражение1, выражение2)
        

Она работает в противоположном направлении:

  • если выражение1 равно выражение2, то функция возвращает NULL;
  • если выражения не равны, то возвращает выражение1.
undefined
1
Задача
Модуль 4. Работа с БД, 2 уровень, 0 лекция
Недоступна
task0201
С помощью запроса к базе данных сравнить числа с помощью функции IF и знака > и вернуть 1, если первое число больше второго и 0 в обратном случае.
undefined
1
Задача
Модуль 4. Работа с БД, 2 уровень, 0 лекция
Недоступна
task0202
С помощью запроса к базе данных сравнить числа с помощью функции IF и знака <= и вернуть 1, если первое число меньше либо равно второму и 0 в обратном случае.
undefined
1
Задача
Модуль 4. Работа с БД, 2 уровень, 0 лекция
Недоступна
task0203
С помощью запроса к базе данных сравнить числа с помощью функции IF и знака < и вернуть 'yes', если первое число строго меньше второго и 'no' в обратном случае.
undefined
1
Задача
Модуль 4. Работа с БД, 2 уровень, 0 лекция
Недоступна
task0204
С помощью запроса к базе данных сравнить числа с помощью функции IF и знака >= и вернуть 'yes', если первое число больше либо равно второму и 'no' в обратном случае.
undefined
1
Задача
Модуль 4. Работа с БД, 2 уровень, 0 лекция
Недоступна
task0205
Известно, что первые 4 сотрудника (согласно id) - это руководство компании и стоит задача проверить, кто получает больше 1000, а кто нет. Нужно выбрать id и 'yes' (если salary строго больше 1000) или 'no' (если salary меньше 1000) из таблицы employee, у кого значение поля id строго м
undefined
1
Задача
Модуль 4. Работа с БД, 2 уровень, 0 лекция
Недоступна
task0206
У компании появились лишние деньги и решили премировать 10 сотрудников, у которых зарплата менее 500. Нужно выбрать всю информацию о сотруднике и размер его премии: - 1000, если salary меньше или равна 500 - 0, если salary больше 500 из таблицы employee, для тех, у кого значение поля id строго больш
undefined
1
Задача
Модуль 4. Работа с БД, 2 уровень, 0 лекция
Недоступна
task0207
Напиши запрос, который с помощью IFNULL проверяет null на null и возращает 1.
undefined
1
Задача
Модуль 4. Работа с БД, 2 уровень, 0 лекция
Недоступна
task0208
Напиши запрос, который с помощью IFNULL проверяет null на null и возращает 'yes'.
undefined
1
Задача
Модуль 4. Работа с БД, 2 уровень, 0 лекция
Недоступна
task0209
Напиши запрос, который с помощью NULLIF сравнивает два разных числа и возращает результат.
undefined
1
Задача
Модуль 4. Работа с БД, 2 уровень, 0 лекция
Недоступна
task0210
Напиши запрос, который с помощью NULLIF сравнивает два одинаковых числа и возращает результат.
undefined
1
Задача
Модуль 4. Работа с БД, 2 уровень, 0 лекция
Недоступна
task0211
Напиши запрос, который согласно значения поля age в таблице customers возвращает следующий текст: - 'child', если возраст меньше либо равен 12 - 'adult', если возраст больше либо равен 20 - 'teenager', если возраст больше 12 и меньше 20. Ограничь выборку 5 записями. Используй
undefined
1
Задача
Модуль 4. Работа с БД, 2 уровень, 0 лекция
Недоступна
task0212
Напиши запрос, который согласно данных из таблицы employee для города (city) 'London' вернет такую информацию: - 'good', если должность (position) 'manager' и зарплата (salary) больше 10000 - 'good', если должность (position) НЕ 'manager' и зарплата (salary) б