Условные функции

Открыта

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.
1
Задача
Модуль 4. Работа с БД,  2 уровень0 лекция
Недоступна
Функция IF, кто больше
Функция IF, кто больше
1
Задача
Модуль 4. Работа с БД,  2 уровень0 лекция
Недоступна
Меньше или равно?
Меньше или равно?
1
Задача
Модуль 4. Работа с БД,  2 уровень0 лекция
Недоступна
Строго меньше
Строго меньше
1
Задача
Модуль 4. Работа с БД,  2 уровень0 лекция
Недоступна
Либо больше, либо равно
Либо больше, либо равно
1
Задача
Модуль 4. Работа с БД,  2 уровень0 лекция
Недоступна
Руководству нужно платить больше
Руководству нужно платить больше
1
Задача
Модуль 4. Работа с БД,  2 уровень0 лекция
Недоступна
10 счастливчиков
10 счастливчиков
1
Задача
Модуль 4. Работа с БД,  2 уровень0 лекция
Недоступна
IFNULL
IFNULL
1
Задача
Модуль 4. Работа с БД,  2 уровень0 лекция
Недоступна
IFNULL с текстом
IFNULL с текстом
1
Задача
Модуль 4. Работа с БД,  2 уровень0 лекция
Недоступна
NULLIF
NULLIF
1
Задача
Модуль 4. Работа с БД,  2 уровень0 лекция
Недоступна
NULLIF и одинаковые числа
NULLIF и одинаковые числа
1
Задача
Модуль 4. Работа с БД,  2 уровень0 лекция
Недоступна
IF в IF'е
IF в IF'е
1
Задача
Модуль 4. Работа с БД,  2 уровень0 лекция
Недоступна
3 IF`a
3 IF`a
Комментарии (42)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
КириллQA Engineer в Sogaz-OMS
22 мая, 18:14
по братски, можно условия писать более корректно, мы учимся, а не работаем с тупыми PM
Денис
Уровень 68
14 ноября 2025, 15:24
Все задачи решил сходу, кроме task0212.
10 мая 2025, 10:24
/* Комментарий не удален */
Bahodir Daminov
Уровень 90
14 апреля 2025, 03:19
task 0201 reshili 698 studentov, a vot task 0212 620 studentov. Mne interesno kuda 78 studentov propali. ne prodoljili izuchat ili prosta zabili?
JavaRusher853
Уровень 36
3 января 2025, 00:56
Блин, чем дальше я учю этот язык, тем чаще у меня возникают мысли директоров американской фирмы в самой первой лекции по SQL "Это что за бред?", "И на это ушёл весь бюджет", "Кто это вообще придумал?", "Где деньги Лебовский". Буду откровенен, этот язык УЖАСЕН, он какой-то очень странный и отталкивающий, эти непонятные комманды IFNULL, NULLIF. Проще assembler или batch выучить чем этот эмейзинг, но что поделаешь, почти все фирмы требуют знания этого языка, так что идем до конца.
СтудентJava
Уровень 109
12 января 2025, 13:54
Видимо не всем заходит SQL. Мне норм. Хотя я с ним в первые сталкиваюсь. Задачи конечно нудноватые)
Олег
Уровень 106
Expert
16 сентября 2024, 19:45
Ну уже жёстче
Владимир
Уровень 79
Expert
7 сентября 2024, 15:45
В PostgreSQL оператор IF() не поддерживается. Вместо этого используется конструкция CASE.
Алексей
Уровень 72
Expert
17 июля 2024, 20:15
Anonymous #2798867
Уровень 43
9 мая 2024, 12:52
Для тех кому нужен норм эмулятор для отработки практики: https://sql-academy.org/ru/sandbox
hidden #3343731
Уровень 28
9 апреля 2024, 07:14
А где вы задачи решаете на SQL?
Ольга
Уровень 72
Expert
2 мая 2024, 20:06
После лекции их кучка. Может это только для студентов?
hidden #3343731
Уровень 28
4 мая 2024, 17:42
Думаю задачи доступны когда ты дойдешь до уровня по подписке, пройдя все уровни. А если не проходишь то доступны только лекции.
Anonymous #2798867
Уровень 43
9 мая 2024, 12:50
https://sql-academy.org/ru/sandbox