空值(NULL)是 SQL 中的一个特殊值,代表了缺失或者未知的数据。与其他编程语言(例如 Java)不同,SQL 中判断一个值是否为空不能使用等于或者不等于。例如,以下查询尝试找出没有上级领导(manager 字段为空)的员工:
-- 空值判断的错误示例
SELECT emp_name, manager
FROM employee
WHERE manager = NULL;
该语句没有返回任何结果,但确实存在这样的数据。这个错误的原因在于将一个值与一个未知的值进行数学比较,结果仍然未知;即使是将两个空值进行比较,结果也是未知。以下运算的结果均为未知,用于查询条件的话不会返回任何结果:
NULL = 5;
NULL = NULL;
NULL != NULL;
那么,如何判断某个值是否为空值呢?在 SQL 中需要使用两个特殊的运算符:
expression IS NULL;
expression IS NOT NULL;
如果表达式 expression 的值为空,IS NULL 返回真,IS NOT NULL 返回假;如果表达式的值不为空,IS NULL 返回假,IS NOT NULL 返回真。因此,查找没有上级领导的员工应该使用以下语句:
SELECT emp_name, manager
FROM employee
WHERE manager IS NULL;
emp_name|manager|
--------|-------|
刘备 |[NULL] |
“刘备”是公司的最高领导,他没有上级领导。
如果仅仅能够指定单个过滤条件,就无法满足复杂的查询需求;为此,SQL 引入了用于构建复杂条件的逻辑运算符。