Условная функция IF

В предыдущем уроке мы рассматривали оператор CASE для реализации условной логики в SQL. Однако это не единственный механизм, с помощью которого возможно реализовать ветвление логики в запросе. Пришло время обратить наше внимание на функцию IF.

Синтаксис IF

MySQL
IF(условное_выражение, значение_1, значение_2);

Если условное выражение, передаваемое в качестве первого аргумента в функцию IF, истинно, функция вернёт значение второго аргумента значение_1, иначе возвращается значение третьего аргумента значение_2.

Примеры

  • Простое сравнение двух чисел. Так как 10 не больше 20, функция вернёт "FALSE".

    MySQL
    SELECT IF(10 > 20, "TRUE", "FALSE");
    
    IF(10 > 20, "TRUE", "FALSE")
    FALSE
  • Пример использования с реальной БД. Необходимо на основании цены определить принадлежность жилья к одному из двух классов: "Комфорт-класс" и "Эконом-класс". Если цена больше или равна 150, то это жильё относится к "Комфорт-класс".

    MySQL
    SELECT id, price,
        IF(price >= 150, "Комфорт-класс", "Эконом-класс") AS category
        FROM Rooms
    
    idpricecategory
    1149Эконом-класс
    2225Комфорт-класс
    3150Комфорт-класс
    489Эконом-класс
    580Эконом-класс
    6200Комфорт-класс
    760Эконом-класс
    879Эконом-класс
    979Эконом-класс
    10150Комфорт-класс
    11135Эконом-класс
    1285Эконом-класс
    1389Эконом-класс
    1485Эконом-класс
    15120Эконом-класс
    16140Эконом-класс
    17215Комфорт-класс
    18140Эконом-класс
    1999Эконом-класс
    20190Комфорт-класс
    21299Комфорт-класс
    22130Эконом-класс
    2380Эконом-класс
    24110Эконом-класс
    25120Эконом-класс
    2660Эконом-класс
    2780Эконом-класс
    28150Комфорт-класс
    2944Эконом-класс
    30180Комфорт-класс
    3150Эконом-класс
    3252Эконом-класс
    3355Эконом-класс
    3450Эконом-класс
    3570Эконом-класс
    3689Эконом-класс
    3735Эконом-класс
    3885Эконом-класс
    39150Комфорт-класс
    4040Эконом-класс
    4168Эконом-класс
    42120Эконом-класс
    43120Эконом-класс
    44135Эконом-класс
    45150Комфорт-класс
    46150Комфорт-класс
    47130Эконом-класс
    48110Эконом-класс
    49115Эконом-класс
    5080Эконом-класс
  • Функции IF можно также вкладывать друг в друга, эмулируя оператор CASE.

    MySQL
    SELECT id, price,
        IF(price >= 200, "Бизнес-класс",
            IF(price >= 150,
                "Комфорт-класс", "Эконом-класс")) AS category
        FROM Rooms
    
    idpricecategory
    1149Эконом-класс
    2225Бизнес-класс
    3150Комфорт-класс
    489Эконом-класс
    580Эконом-класс
    6200Бизнес-класс
    760Эконом-класс
    879Эконом-класс
    979Эконом-класс
    10150Комфорт-класс
    11135Эконом-класс
    1285Эконом-класс
    1389Эконом-класс
    1485Эконом-класс
    15120Эконом-класс
    16140Эконом-класс
    17215Бизнес-класс
    18140Эконом-класс
    1999Эконом-класс
    20190Комфорт-класс
    21299Бизнес-класс
    22130Эконом-класс
    2380Эконом-класс
    24110Эконом-класс
    25120Эконом-класс
    2660Эконом-класс
    2780Эконом-класс
    28150Комфорт-класс
    2944Эконом-класс
    30180Комфорт-класс
    3150Эконом-класс
    3252Эконом-класс
    3355Эконом-класс
    3450Эконом-класс
    3570Эконом-класс
    3689Эконом-класс
    3735Эконом-класс
    3885Эконом-класс
    39150Комфорт-класс
    4040Эконом-класс
    4168Эконом-класс
    42120Эконом-класс
    43120Эконом-класс
    44135Эконом-класс
    45150Комфорт-класс
    46150Комфорт-класс
    47130Эконом-класс
    48110Эконом-класс
    49115Эконом-класс
    5080Эконом-класс

Функции IFNULL и NULLIF

Помимо функции IF, в SQL также есть более простые, но менее универсальные функции IFNULL и NULLIF, направленные на обработку NULL значений.

Синтаксис IFNULL

MySQL
IFNULL(значение, альтернативное_значение);

Функция IFNULL возвращает значение, переданное первым аргументом, если оно не равно NULL, иначе возвращает альтернативное_значение.

Примеры с функцией IFNULL

  • Если первый аргумент не равен NULL, то вернётся именно он.

    MySQL
    SELECT IFNULL("SQL Academy", "Альтернатива SQL Academy") AS sql_trainer;
    
    sql_trainer
    SQL Academy
  • Если первый аргумент равен NULL, то вернётся значение, переданное вторым аргументом.

    MySQL
    SELECT IFNULL(NULL, "Альтернатива SQL Academy") AS sql_trainer;
    
    sql_trainer
    Альтернатива SQL Academy

Синтаксис NULLIF

MySQL
NULLIF(значение_1, значение_2);

Функция NULLIF возвращает NULL, если значение_1 равно значению_2, в противном случае возвращает значение_1.

Примеры с функцией NULLIF

  • Если значение первого аргумента равно значению второго аргумента, то возвращается NULL.

    MySQL
    SELECT NULLIF("SQL Academy", "SQL Academy") AS sql_trainer;
    
    sql_trainer
    <NULL>
  • Если значения первого и второго аргумента различаются, то возвращается значение первого аргумента.

    MySQL
    SELECT NULLIF("SQL Academy", "Альтернатива SQL Academy") AS sql_trainer;
    
    sql_trainer
    SQL Academy