Условная функция IF
В предыдущем уроке мы рассматривали оператор CASE для реализации условной логики в SQL. Однако это не единственный механизм, с помощью которого возможно реализовать ветвление логики в запросе. Пришло время обратить наше внимание на функцию IF.
Синтаксис IF
IF(условное_выражение, значение_1, значение_2);
Если условное выражение, передаваемое в качестве первого аргумента в функцию IF, истинно, функция вернёт значение второго аргумента значение_1, иначе возвращается значение третьего аргумента значение_2.
Примеры
-
Простое сравнение двух чисел. Так как 10 не больше 20, функция вернёт "FALSE".
SELECT IF(10 > 20, "TRUE", "FALSE");
-
Пример использования с реальной БД. Необходимо на основании цены определить принадлежность жилья к одному из двух классов: "Комфорт-класс" и "Эконом-класс". Если цена больше или равна 150, то это жильё относится к "Комфорт-класс".
SELECT id, price, IF(price >= 150, "Комфорт-класс", "Эконом-класс") AS category FROM Rooms
-
Функции IF можно также вкладывать друг в друга, эмулируя оператор CASE.
SELECT id, price, IF(price >= 200, "Бизнес-класс", IF(price >= 150, "Комфорт-класс", "Эконом-класс")) AS category FROM Rooms
Функции IFNULL и NULLIF
Помимо функции IF, в SQL также есть более простые, но менее универсальные функции IFNULL и NULLIF, направленные на обработку NULL значений.
Синтаксис IFNULL
IFNULL(значение, альтернативное_значение);
Функция IFNULL возвращает значение, переданное первым аргументом, если оно не равно NULL, иначе возвращает альтернативное_значение.
Примеры с функцией IFNULL
-
Если первый аргумент не равен NULL, то вернётся именно он.
SELECT IFNULL("SQL Academy", "Альтернатива SQL Academy") AS sql_trainer;
-
Если первый аргумент равен NULL, то вернётся значение, переданное вторым аргументом.
SELECT IFNULL(NULL, "Альтернатива SQL Academy") AS sql_trainer;
Синтаксис NULLIF
NULLIF(значение_1, значение_2);
Функция NULLIF возвращает NULL, если значение_1 равно значению_2, в противном случае возвращает значение_1.
Примеры с функцией NULLIF
-
Если значение первого аргумента равно значению второго аргумента, то возвращается NULL.
SELECT NULLIF("SQL Academy", "SQL Academy") AS sql_trainer;
-
Если значения первого и второго аргумента различаются, то возвращается значение первого аргумента.
SELECT NULLIF("SQL Academy", "Альтернатива SQL Academy") AS sql_trainer;