Mysql中DQL(查询类)语句的执行顺序
【摘要】 一、SQL我们要编写一段查询数据的SQL语句,经常会用到如下字段。SELECT 字段FROM 表名WHERE 条件列表GROUP BY 分组字段列表HAVING 分组后条件列表ORDER BY 排序字段列表LIMIT 分页参数 你有没有思考过,上诉几个关键字的执行顺序,又是怎样的呢? 二、执行顺序正确的执行顺序如下所示。FROMWHEREGROUP BYHAVINGSEL...
一、SQL
我们要编写一段查询数据的SQL语句,经常会用到如下字段。
SELECT
字段
FROM
表名
WHERE
条件列表
GROUP BY
分组字段列表
HAVING
分组后条件列表
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)