Чтобы выбрать блюда столовой с проверкой на NULL в столбце CookID, необходимо использовать оператор IS или IS NOT. Корректируем предыдущий пример:
И вот они, данные:
Мы отобрали все блюда, у которых в графе CookID пусто (NULL). Если бы нам нужно было, наоборот, вывести блюда, у которых CookID указан, то мы бы написали:
Получить данные по блюдам, у которых указан CookID мы можем, также и запросом:
Строчки с пустым CookID не попадут в результирующий набор данных. Данная команда даст результат (мы увидим список блюд, у которых указан идентификатор повара), так как в нашем запросе значение графы CookID сравнивается с 0, а не с NULL. И поэтому можно обойтись и без IS или IS NOT. Только если нам нужно отобрать строки с пустым CookID, то тут, конечно, без IS NULL не обойтись.
С NULL не только нельзя сравнивать с помощью операторов «равно» и «не равно», но и нельзя применять арифметические операции, иначе результатом будет NULL. Ниже один из любимых вопросов на собеседовании по SQL на понимание принципов работы с NULL:
Правильным вариантом является только номер 5.
Обрати внимание, что в заголовке этой темы, я во фразе «пустые» значения слово «пустые» взял в кавычки. Это для того, чтобы показать тебе, что хоть при наличии значения NULL в каком-то столбце некоторой записи пусто, NULL обычно трактуется не сколько как пустота, сколько как неопределенность. Вот поэтому при прямом сравнении NULL = NULL будет ответ ложь (false), так как одна неопределенность не может быть равна другой неопределенности, ведь мы не знаем, что скрывается ни под одной из неопределенностей.
Практические задачи №1
1. Написать запрос, выводящий список сотрудников организации, упорядоченный по ФИО.
2. Написать запрос, выводящий список сотрудников организации, упорядоченный по дате рождения. Чтобы сначала вывелись самые молодые сотрудники.
3. Вывести список филиалов.
4. Вывести список блюд столовой, цена которых больше 80 рублей.
5. Вывести список сотрудников, работающих в филиале 1 или 2.
6. Вывести список сотрудников, работающих в первом филиале, родившихся не ранее 01.01.1980.
7. Вывести список сотрудников, фамилия которых начинается на букву «И».
8. Вывести список блюд столовой, цена которых в диапазоне от 70 до 100 рублей. Результат упорядочить по цене, по убыванию.
9. Вывести список блюд столовой, которые готовятся в собственной столовой организации, а не закупаются. У таких строчек указан повар (в столбце CookID присутствует идентификатор повара). Результат отсортировать по наименованию блюда.
Решения практических задач №1 на следующей странице.
Решение практических задач №1
1. Написать запрос, выводящий список сотрудников организации, упорядоченный по ФИО.
2. Написать запрос, выводящий список сотрудников организации, упорядоченный по дате рождения. Чтобы сначала вывелись самые молодые сотрудники.
3. Вывести список филиалов.
4. Вывести список блюд столовой, цена которых больше 80 рублей.
5. Вывести список сотрудников, работающих в филиале 1 или 2.
6. Вывести список сотрудников, работающих в первом филиале, родившихся не ранее 01.01.1980.
7. Вывести список сотрудников, фамилия которых начинается на букву «И».
8. Вывести список блюд столовой, цена которых в диапазоне от 70 до 100 рублей. Результат упорядочить по цене, по убыванию.
9. Вывести список блюд столовой, которые готовятся в собственной столовой организации, а не закупаются. У таких строчек указан повар (в столбце CookID присутствует идентификатор повара). Результат отсортировать по наименованию блюда.
9. Соединения таблиц с помощью JOIN
9.1. Что такое соединения. Назначение соединений