Справочник от Автор24
Найди эксперта для помощи в учебе
Найти эксперта
+2

Функции и операторы SQL общего назначения

К операторам и функциям общего назначения относятся:

  • Функция IFNULL;
  • Функция NULLIF;
  • Функция IF;
  • Оператор CASE.

Функция IFNULL

Любые арифметические действия со значением NULL всегда возвращают значение NULL. Это не всегда удобно, поэтому часто возникает следующая задача:

  1. Проверить содержит ли поле значение NULL;
  2. Если содержит, то заменить его на более удобное значение.

Для решения таких задач используется функция IFNULL.

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

Если выражение1 равно NULL, то функция возвращает выражение2. Если выражение1 НЕ равно NULL, то функция возвращает выражение1.

Пример 1

В таблице abiturient хранятся оценки по двум экзаменам, сданным абитуриентами.

Функции и операторы SQL общего назначения. Автор24 — интернет-биржа заказчиков и авторов

Необходимо подсчитать рейтинг абитуриентов, который формируется как сумма баллов по двум экзаменам.

Если попробовать решить задачу запросом

SELECT Familia,Imya, exam1+exam2 AS reit FROM abiturient;

то результат получится следующим:

Функции и операторы SQL общего назначения. Автор24 — интернет-биржа заказчиков и авторов

У абитуриентов, которые сдали оба экзамена рейтинг рассчитывается верно, но у тех, кто сдал только один экзамен, рейтинг равен NULL. Поэтому запрос следует изменить, так, чтобы вместо NULL было значение 0, которое можно использовать в арифметических операциях:

SELECT Familia,Imya,IFNULL(exam1,0)+IFNULL(exam2,0) AS reit FROM abiturient;

Теперь результат получается более корректным:

Функции и операторы SQL общего назначения. Автор24 — интернет-биржа заказчиков и авторов

Функция NULLIF

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

Если выражение1=выражение2, то функция вернет NULL, в противном случае функция вернет выражение1.

Пример 2

В таблице tovar хранится оптовая цена – price1 и розничная цена – price 2. Необходимо найти товары, для которых оптовая и розничная цена равны, а напротив остальных товаров вывести оптовую цену:

SELECT tovar_name, NULLIF(price1,price2) FROM tovar;

Функция IF

IF(логическое_выражение, выражение1, выражение2)

Функция проверяет истинность логического выражения. Если оно истинно, то функция вернет выражение1, если ложно, то выражение2.

Пример 3

Если оптовая цена (price1) товара больше 300руб., то необходимо сделать скидку 10%.

SELECT tovar_name, IF(price1

Функции IF можно вкладывать друг в друга для реализации более сложных условий. В этом случае вложенная функция IF ставится либо на место выражения1 либо на место выражения2.

«Функции и операторы SQL общего назначения» 👇
Помощь эксперта по теме работы
Найти эксперта
Решение задач от ИИ за 2 минуты
Решить задачу
Найди решение своей задачи среди 1 000 000 ответов
Найти
Пример 4

Назначим товарам с оптовой ценой больше 300 руб. и меньше 500 руб. скидку 10%, а товарам с ценой больше 500 руб. – скидку 20%.

SELECT Tovar_name, IF(price1

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

Оператор CASE

Оператор CASE используется в двух формах.

  1. Первая форма оператора CASE

    CASE выражение1 WHEN

    [значение1] THEN результат1

    [WHEN [значение2] THEN результат2 ...]

    [ELSE результатN]

    END

    Пример 5

    В таблице levels хранится список квалификационных уровней вуза:

    Функции и операторы SQL общего назначения. Автор24 — интернет-биржа заказчиков и авторов

    Необходимо для каждого уровня создать сокращенную запись. Для уровня «бакалавр» - «б», для уровня «магистр» - «м», для остальных случаев - «б/нс». Эта задача решается следующим запросом:

    SELECT level, CASE level

    WHEN бакалавр"WHEN "б"

    WHEN "магистр" WHEN "м"

    ELSE "б/нс" end

    FROM levels;

    Результат:

    Функции и операторы SQL общего назначения. Автор24 — интернет-биржа заказчиков и авторов

  2. Вторая форма оператора CASE

    CASE

    WHEN [условие1] THEN результат1

    [WHEN [условие2] THEN результат2 ...]

    [ELSE результатN] END

    Если первая форма оператора позволяет проверить равно ли некоторое выражение ряду значений, то вторая больше подходит для проверки сложных условий с различными операторами сравнения.

    Пример 6

    Задача из примера5 может быть решена также следующим запросом:

    SELECT level, CASE

    WHEN level="бакалавр"THEN "б"

    WHEN level= "магистр"THEN "м"

    ELSE level="б/нс" END

    FROM levels;

    Пример 7

    Задачу из примера4 можно решить также следующим запросом:

    SELECT tovar_name,CASE

    WHEN price1

    WHEN price1 > 300 AND price1

    ELSE 0.8*price1

    END

    FROM tovar;

Дата написания статьи: 25.08.2016
Найди решение своей задачи среди 1 000 000 ответов
Крупнейшая русскоязычная библиотека студенческих решенных задач
Все самое важное и интересное в Telegram

Все сервисы Справочника в твоем телефоне! Просто напиши Боту, что ты ищешь и он быстро найдет нужную статью, лекцию или пособие для тебя!

Перейти в Telegram Bot