我们要编写一段查询数据的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语句,验证执行顺序。
select的字段是可以取别名的,如这样
select NAME,age aage from emp where aage > 15 order by age asc
执行结果
可以看出,select定义的别名,where无法读取这个字段,所以select在where后执行。
在form处给表定义别名,其他地方都能访问到。所以 from在前面执行
order可以使用select里面定义的别名,所以order是在select后执行的
limit最后执行,limit是对前面的结果取偏移量,再进行展示。
这么没有使用这两个参数,但是值得注意的是,GROUPBY虽然在SELECT前面执行,但是他是能使用SELECT的别名的,因为mysql对此做了扩展。而HAVING是不能使用SELECT中定义的别名的。
不要以为执行顺序有问题。