В SQL-запросах NULL означает, что значение столбца неизвестно. Поисковые условия, в которых значение столбца сравнивается с NULL, всегда принимают значение unknown и, соответственно, приводят к ошибке, в противоположность true или false, т.е.
WHERE dept_no = NULL или даже WHERE NULL = NULL.
Предикат IS NULL принимает значение true только тогда, когда выражение слева от ключевых слов “IS NULL” имеет значение null (пусто, не определено). Разрешено также использовать конструкцию IS NOT NULL, которая означает “не пусто”, “имеет какое-либо значение”.
Пример 27 демонстрирует, каким образом можно получить список отделов, в которых еще не назначены руководители.
SELECT department, mngr_no FROM department
WHERE mngr_no IS NULL
Логические операторы
К логическим операторам относятся операторы AND, OR, NOT, позволяющие выполнять различные логические действия: логическое умножение AND (пересечение условий), логическое сложение OR (объединение условий), логическое отрицание NOT (отрицание условий).
Оператор AND означает, что общий предикат будет истинным только тогда, когда условия, связанные по AND, будут истинны.
Оператор OR означает, что общий предикат будет истинным, когда хотя бы одно из условий, связанных по OR, будет истинным.
Оператор NOT означает, что общий предикат будет истинным, когда условие, перед которым стоит этот оператор, будет ложным.
В одном предикате логические операторы выполняются в следующем порядке: сначала выполняется оператор NOT, затем - AND и только после этого выполняется оператор OR. Для изменения порядка выполнения операторов разрешается использовать скобки.
Пример 27 демонстрирует, каким образом можно получить список служащих, работающих в отделе 622 или в должности инженер с зарплатой не выше 40000$ в год.
SELECT first_name, last_name, dept_no, job_code,
salary FROM employee WHERE dept_no = 622 OR
job_code = "Eng" AND salary <= 40000
ORDER BY last_name
Преобразование типов CAST
В SQL имеется возможность преобразовать значение столбца или функции к другому типу для более гибкого использования операций сравнения. Для этого используется функция CAST.
Пример 28 демонстрирует, каким образом можно получить список сотрудников, работающих в отделах, номера которых содержат “00”.
SELECT first_name, last_name, dept_no FROM employee
WHERE CAST(dept_no AS char(20)) CONTAINING "00"