Mysql中DQL(查询类)语句的执行顺序

举报
i进击的攻城狮 发表于 2022/09/11 13:51:37 2022/09/11
【摘要】 一、SQL我们要编写一段查询数据的SQL语句,经常会用到如下字段。SELECT 字段FROM 表名WHERE 条件列表GROUP BY 分组字段列表HAVING 分组后条件列表ORDER BY 排序字段列表LIMIT 分页参数 你有没有思考过,上诉几个关键字的执行顺序,又是怎样的呢? 二、执行顺序正确的执行顺序如下所示。FROMWHEREGROUP BYHAVINGSEL...

一、SQL

我们要编写一段查询数据的SQL语句,经常会用到如下字段。

SELECT
		字段
FROM
		表名
WHERE
		条件列表
GROUP BY
		分组字段列表
HAVING 
		分组后条件列表
ORDER BY
		排序字段列表
LIMIT
		分页参数
		

你有没有思考过,上诉几个关键字的执行顺序,又是怎样的呢?

二、执行顺序

正确的执行顺序如下所示。

FROM
WHERE
GROUP BY
HAVING
SELECT
ORDER BY
LIMIT

三、验证

现在有一张员工表

create table emp(
    id  int auto_increment comment 'ID' primary key,
    name varchar(50) not null comment '姓名',
    age  int comment '年龄',
    dept_id int comment '部门ID'
)comment '员工表';
INSERT INTO emp (id, name, age, dept_id) VALUES (1, '张无忌', 20, 1),(2, '杨逍', 33, 1),(3, '赵敏', 18, 2), (4, '常遇春', 43, 2),(5, '小昭', 19, 3),(6, '韦一笑', 48, 3);

在这里插入图片描述
查询年龄大于15的员工姓名、年龄。并根据年龄升序排序,编写SQL语句如下

select name,age, from emp where age > 15 order by age asc

sql比较简单。下面我们通过定义别名来修改SQL语句,验证执行顺序。

3.1 select在where后执行

select的字段是可以取别名的,如这样

select NAME,age aage from emp  where aage > 15 order by age asc

执行结果
在这里插入图片描述
可以看出,select定义的别名,where无法读取这个字段,所以select在where后执行。

3.2 from在前面执行

在form处给表定义别名,其他地方都能访问到。所以 from在前面执行
在这里插入图片描述

3.3 order在select后执行

order可以使用select里面定义的别名,所以order是在select后执行的
在这里插入图片描述

3.4 LIMIT

limit最后执行,limit是对前面的结果取偏移量,再进行展示。

3.5 GROUP BY 和HAVING

这么没有使用这两个参数,但是值得注意的是,GROUPBY虽然在SELECT前面执行,但是他是能使用SELECT的别名的,因为mysql对此做了扩展。而HAVING是不能使用SELECT中定义的别名的。
不要以为执行顺序有问题。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。