Найти в Дзене
ЦифроПроф

CASE NULL AND OTHER

SQL запрос с несколькими условиями пишут с помощью оператора CASE. Как и в Python, условные конструкции в SQL состоят из проверяемого условия и результата, который возвращается в зависимости от условия. Так выглядит синтаксис условных конструкций в SQL: Если значение в поле не удовлетворяет ни одному условию, результатом будет NULL. Все условия необязательно прописывать. Условную конструкцию можно дополнить выражением с оператором ELSE: после оператора указывают результат на случай, если ни одно условие не выполнено. SELECT total,
CASE
WHEN total >= 5 AND total < 10 THEN 'средний'
WHEN total >= 10 THEN 'крупный'
ELSE 'маленький'
END
FROM invoice
LIMIT 10; Важный момент — условия в запросе проверяются по порядку. Если условие выполнено, сразу выводится соответствующий результат, а остальные условия не проверяются. Задача 1 Выделите категории в таблице staff, которая хранит информацию о сотрудниках. Выведите на экран поля last_name, first_n

SQL запрос с несколькими условиями пишут с помощью оператора CASE.

Как и в Python, условные конструкции в SQL состоят из проверяемого условия и результата, который возвращается в зависимости от условия. Так выглядит синтаксис условных конструкций в SQL:

  • начало конструкции обозначают оператором CASE,
  • после оператора WHEN пишут условие,
  • после оператора THEN — возвращаемый результат;
  • а в конце указывают оператор END.

Если значение в поле не удовлетворяет ни одному условию, результатом будет NULL.

Все условия необязательно прописывать. Условную конструкцию можно дополнить выражением с оператором ELSE: после оператора указывают результат на случай, если ни одно условие не выполнено.

SELECT total,
CASE
WHEN total >= 5 AND total < 10 THEN 'средний'
WHEN total >= 10 THEN 'крупный'
ELSE 'маленький'
END
FROM invoice
LIMIT 10;

Фото автора
Фото автора

Важный момент — условия в запросе проверяются по порядку. Если условие выполнено, сразу выводится соответствующий результат, а остальные условия не проверяются.

Задача 1

Выделите категории в таблице staff, которая хранит информацию о сотрудниках. Выведите на экран поля last_name, first_name и title. Категории нужно выделить на основе значений в поле title — оно содержит информацию о должности сотрудника:

  • Если в title встречается слово 'IT', в новом поле будет отображена категория 'разработка'.
  • Если в title встречается слово 'Manager' и нет слова 'IT', в новом поле отобразится категория 'отдел продаж'.
  • Если в title встречается слово 'Support', в новом поле появится категория 'поддержка'.

SELECT last_name, first_name, title,

CASE

WHEN title LIKE '%IT%' THEN 'разработка'

WHEN title LIKE '%Manager%' THEN 'отдел продаж'

WHEN title LIKE '%Support%' THEN 'поддержка'

END

FROM staff;

Задача 2

Теперь попробуйте разделить на категории фильмы из таблицы movie. Выведите на экран поля title и rental_rate. Выделить категории нужно по цене аренды фильма:

  • Если значение rental_rate меньше 1, в новом поле появится категория 'категория 1'.
  • Если значение rental_rate больше либо равно 1, но меньше 3, в новом поле отобразится категория 'категория 2'.
  • Если значение rental_rate больше либо равно 3, в новом поле появится категория 'категория 3'.

SELECT title, rental_rate,

CASE

WHEN rental_rate < 1 THEN 'категория 1'

WHEN rental_rate >= 1 AND rental_rate < 3 THEN 'категория 2'

WHEN rental_rate >= 3 THEN 'категория 3'

END

FROM movie;

ПРОПУСКИ

Специальное значение NULL в SQL обозначает пропуск. Проверить данные на пропуски можно только специальными операторами, а сделать это с помощью = и <> нельзя.

Для работы с NULL используют операторы IS NULL и IS NOT NULL. С помощью этих операторов можно искать пропуски или получать срезы.

Задача 1

Из таблицы invoice выгрузите поле billing_city с городами оформления счёта. Выгрузите только те записи, в которых на месте индекса стоит пропуск. Данные с индексами хранит поле billing_postal_code.

SELECT billing_city
FROM invoice
WHERE billing_postal_code IS NULL;

Задача 2

Дополните предыдущий запрос. Исключите из выдачи записи с пропусками в поле billing_state. Выберите записи, в которых сумма заказа в поле total не ниже 15 долларов.

SELECT billing_city
FROM invoice
WHERE billing_postal_code IS NULL
AND total >= 15
AND billing_state IS NOT NULL;

Задача 3

Найдите треки длиннее 250000 миллисекунд, в названии которых есть слово Moon, но автор трека не указан.

Выгрузите номера альбомов, в которых находятся выбранные треки.

SELECT album_id

FROM track

WHERE milliseconds>250000

AND name LIKE '%Moon%'

AND composer IS NULL;

Задача 4

SELECT first_name, last_name, country

FROM client

WHERE company IS NULL AND

state IS NULL AND

phone IS NULL AND

fax IS NULL;