SQL 查询中常见关键字的正确顺序以及使用规则

        在 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 查询的基本语法结构

关键语法说明

常见错误案例

正确示例


SQL 查询的基本语法结构

SELECT [DISTINCT] 列名1 [AS 别名1], 列名2 [AS 别名2], ...
FROM 表名
[WHERE 条件表达式]
[GROUP BY 列名]
[HAVING 分组条件]
[ORDER BY 列名 [ASC|DESC]]
[LIMIT 数量];
SQL 语句执行顺序及功能详解思维导图

关键语法说明

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 子句

  • 用途:按照指定列对结果进行分组,常和聚合函数一起使用,如 SUMCOUNT
  • 位置:在 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. 错误示例 1

    -- 错误:WHERE 子句不能使用列别名
    SELECT age AS 用户年龄
    WHERE 用户年龄 > 18; -- 错误,应使用原始列名 age
    
  2. 错误示例 2

    -- 错误:LIMIT 位置错误
    LIMIT 10
    SELECT * FROM user_profile; -- 错误,LIMIT 应放在最后
    
  3. 错误示例 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;

这个查询的执行逻辑是:

  1. 从 user_profile 表中筛选出性别为男的数据(WHERE)。
  2. 按照年龄进行分组(GROUP BY)。
  3. 筛选出人数超过 5 的分组(HAVING)。
  4. 选取年龄列并去除重复值(SELECT DISTINCT)。
  5. 对结果按年龄降序排列(ORDER BY)。
  6. 只返回前 3 条记录(LIMIT)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值