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


    一、SQL

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

    SELECT
    		字段
    FROM
    		表名
    WHERE
    		条件列表
    GROUP BY
    		分组字段列表
    HAVING 
    		分组后条件列表
    ORDER BY
    		排序字段列表
    LIMIT
    		分页参数
    		
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

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

    二、执行顺序

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

    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);
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

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

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

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

    3.1 select在where后执行

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

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

    执行结果
    在这里插入图片描述
    可以看出,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中定义的别名的。
    不要以为执行顺序有问题。

  • 相关阅读:
    详谈Web3与品牌如何推动下一轮牛市
    Flutter ーー logger 组件记录日志
    3D激光SLAM:LeGO-LOAM论文解读---激光雷达里程计与建图
    如何优雅的消除系统重复代码
    java CPU 或者内存 异常排查
    对象模型(对象树)
    HTML期末学生大作业-节日网页作业html+css+javascript
    golang对接阿里云私有Bucket上传图片、授权访问图片
    七,vi和vim
    ssm+thymeleaf国际化
  • 原文地址:https://blog.csdn.net/qq_45171957/article/details/126766221