SELECT emp_id, fname, lname, superior_emp_id >
FROM employee >
WHERE superior_emp_id = NULL; Empty set (0.01 sec)
Как видите, запрос подвергается синтаксическому анализу и выполня
ется, но не возвращает ни одной строки. Это общая ошибка неопытных
SQLпрограммистов. Сервер БД не предупредит о ней, поэтому при соз
дании условий проверки на
null
следует соблюдать осторожность.
Проверить наличие значения в столбце можно с помощью оператора
is not
null
:
mysql>
SELECT emp_id, fname, lname, superior_emp_id >
FROM employee >
WHERE superior_emp_id IS NOT NULL; +++++
| emp_id | fname | lname | superior_emp_id |
+++++
| 2 | Susan | Barker | 1 |
| 3 | Robert | Tyler | 1 |
| 4 | Susan | Hawthorne | 3 |
| 5 | John | Gooding | 4 |
| 6 | Helen | Fleming | 4 |
| 7 | Chris | Tucker | 6 |
| 8 | Sarah | Parker | 6 |
| 9 | Jane | Grossman | 6 |
| 10 | Paula | Roberts | 4 |
| 11 | Thomas | Ziegler | 10 |
| 12 | Samantha | Jameson | 10 |
| 13 | John | Blake | 4 |
| 14 | Cindy | Mason | 13 |
| 15 | Frank | Portman | 13 |
| 16 | Theresa | Markham | 4 |
| 17 | Beth | Fowler | 16 |
| 18 | Rick | Tulman | 16 |
+++++
17 rows in set (0.01 sec)
Эта версия запроса возвращает остальных 17 сотрудников, у которых,
в отличие от Майкла Смита (Michael Smith), есть начальник.
Прежде чем на время отложить рассмотрение
null
, было бы полезным
отметить еще одну потенциальную ловушку. Предположим, требуется
идентифицировать всех сотрудников, не подчиняющихся Хелен Фле
минг (Helen Fleming), ID которой равен 6. Наверняка первым порывом
будет сделать следующее:
mysql>
SELECT emp_id, fname, lname, superior_emp_id >
FROM employee >