SQL常见误区
查询的顺序
书写顺序
SELECT
字段列表
FROM
表名列表
WHERE
条件列表
GROUP BY
分组字段列表
HAVING
分组后条件列表
ORDER BY
排序字段列表。。他们的加载顺序
逻辑处理实际顺序
常见错误
在 WHERE 中使用 SELECT 的别名
sql
– 错误示例(WHERE 中不能使用别名)
SELECT Name AS EmployeeName
FROM Employees
WHERE EmployeeName LIKE ‘A%’; – 报错!
在 GROUP BY 中使用聚合函数
sql
– 错误示例(GROUP BY 不能包含聚合函数)
SELECT DeptID, AVG(Salary)
FROM Employees
GROUP BY AVG(Salary); – 报错!
混淆 HAVING 和 WHERE
sql
– HAVING 用于过滤分组,WHERE 用于过滤行
SELECT DeptID, COUNT()
FROM Employees
WHERE Salary > 5000 – 过滤行
GROUP BY DeptID
HAVING COUNT() > 10; – 过滤分组
IS NULL 和 IS NOT NULL
为什么不能用 = NULL 或 <> NULL?
NULL 的特殊性:
NULL 表示“未知”或“无值”,它不是具体的数据值,无法通过常规比较符(=、<>、<、>)判断。
三值逻辑:
SQL 中逻辑运算的结果可能是 TRUE、FALSE 或 UNKNOWN。当比较 NULL 时,结果通常是 UNKNOWN,而 WHERE 子句只返回 TRUE 的记录。