在 SQL 中,关键字的顺序和位置是固定的,下面详细介绍 SQL 查询中常见关键字的正确顺序以及使用规则。
省流:SELECT【Distinct(列名前)/As(列命后)】 → FROM → WHERE → GROUP BY → HAVING → ORDER BY → LIMIT
帮助记忆:选(SELECT)定表(FROM)筛(WHERE)分组(GROUP BY),
过滤(HAVING)排序(ORDER BY)限(LIMIT)数目;
去重(DISTINCT)列前加,别名(AS)后标注。
目录
SQL 查询的基本语法结构
SELECT [DISTINCT] 列名1 [AS 别名1], 列名2 [AS 别名2], ...
FROM 表名
[WHERE 条件表达式]
[GROUP BY 列名]
[HAVING 分组条件]
[ORDER BY 列名 [ASC|DESC]]
[LIMIT 数量];
关键语法说明
SELECT 子句
- 用途:用来指定要查询的列。
- 位置:必须位于查询的起始处。
- 示例:
SELECT user_id, age AS 用户年龄, device_id AS 设备ID FROM user_profile; - 注意事项:
DISTINCT 要放在 SELECT 后面,用于去除重复行,比如 SELECT DISTINCT age。
AS 可用于为列设置别名,它紧跟在被命名的列之后。
最终返回的结果是三列:user_id(无别名)、用户年龄(原 age)、设备ID(原 device_id)
FROM 子句
- 用途:指明数据的来源表。
- 位置:在
SELECT子句之后。
WHERE 子句
- 用途:对查询结果进行过滤。
- 位置:在
FROM子句之后。 - 示例:
WHERE age > 18 AND gender = '女'; - 注意事项:
WHERE子句中不能使用列别名,因为在执行WHERE条件时,别名尚未生成。
GROUP BY 子句
- 用途:按照指定列对结果进行分组,常和聚合函数一起使用,如
SUM、COUNT。 - 位置:在
WHERE子句之后(如果有WHERE子句的话)。
HAVING 子句
- 用途:对分组后的结果进行过滤。
- 位置:在
GROUP BY子句之后。 - 示例:
HAVING COUNT(*) > 2;
ORDER BY 子句
- 用途:对查询结果进行排序。
- 位置:通常在
HAVING子句之后(如果有HAVING子句)。 - 示例:
ORDER BY age DESC, user_id ASC;
LIMIT/OFFSET 子句
- 用途:限制返回结果的行数。
- 位置:位于查询语句的最后。
- 示例:
LIMIT 10 OFFSET 5; -- 返回第 6 到第 15 行
常见错误案例
-
错误示例 1
-- 错误:WHERE 子句不能使用列别名 SELECT age AS 用户年龄 WHERE 用户年龄 > 18; -- 错误,应使用原始列名 age -
错误示例 2
-- 错误:LIMIT 位置错误 LIMIT 10 SELECT * FROM user_profile; -- 错误,LIMIT 应放在最后 -
错误示例 3
-- 错误:DISTINCT 位置错误 SELECT age DISTINCT -- 错误,应写成 SELECT DISTINCT age FROM user_profile;
正确示例
下面是一个综合示例,帮助你理解关键字的正确顺序:
SELECT DISTINCT age AS 用户年龄, COUNT(*) AS 人数
FROM user_profile
WHERE gender = '男'
GROUP BY age
HAVING COUNT(*) > 5
ORDER BY age DESC
LIMIT 3;
这个查询的执行逻辑是:
- 从
user_profile表中筛选出性别为男的数据(WHERE)。 - 按照年龄进行分组(
GROUP BY)。 - 筛选出人数超过 5 的分组(
HAVING)。 - 选取年龄列并去除重复值(
SELECT DISTINCT)。 - 对结果按年龄降序排列(
ORDER BY)。 - 只返回前 3 条记录(
LIMIT)。

253

被折叠的 条评论
为什么被折叠?



