当前位置: 首页 > news >正文

第12讲:DQL数据查询语句的执行顺序以及语句汇总

DQL数据查询语句的执行顺序以及语句汇总

文章目录

  • DQL数据查询语句的执行顺序以及语句汇总
    • 1.DQL数据查询语句的执行顺序
      • 1.1.DQL查询语句的执行顺序
      • 1.2.验证DQL语句的执行顺序
    • 2.DQL类型的SQL语句汇总

1.DQL数据查询语句的执行顺序

1.1.DQL查询语句的执行顺序

如下图所示,左侧是DQL语句的编写顺序,右侧是DQL语句的执行顺序。

**DQL的编写顺序:**首先指定要查询的字段名称,然后指定要针对那张表进行数据查询,然后指定WHERE条件,根据条件查询出特定的数据,然后指定GROUP BY分组字段查询列表,然后指定分组查询后的条件列表,然后再指定ORDER BY排序规则,最后指定LIMIT分页查询。

编写顺序不代表DQL的执行顺序,编写顺序只是为了书写规范得体。

**DQL的执行顺序:**首先DQL会执行FROM指定的表名,先拿到要查询那张表的数据,然后根据指定的WHERE条件查询出特定的数据,然后根据GROUP BY进行分组查询,然后再根据HAING对分组后的数据进行条件筛选,然后根据SELECT指定的要查询的字段名,显示出这些字段的数据,然后再根据ORDER BY进行排序查询,最后再根据LIMIT进行分页查询。

image-20220510134825491

执行顺序和编写顺序相比,只是将最开始的SELECT放到了HAVING后面,其余的执行顺序和编写顺序一致。

1.2.验证DQL语句的执行顺序

在了解到DQL的执行顺序后,再通过一个示例来验证DQL的执行顺序。

查询name、xb、nl这三个字段的数据,要求年龄小于30岁,并且按照年龄字段升序排序。

select name,xb,nl from jszx_xgymjzxxb where nl <= '30' order by nl asc 

该语句的执行结果如下:

image-20220510140951823

1)首先来验证DQL最先执行的顺序是FROM和WHERE,对FROM后面的表名起一个别名,然后WHERE后面指定查询条件时,使用表的别名。

select xgymdjb.name,xgymdjb.xb,xgymdjb.nl from jszx_xgymjzxxb as xgymdjb where xgymdjb.nl <= '30' order by nl asc;

查询效果如下,没有任何异常,数据查询无误。

image-20220510141222518

综上可以得出一个结论,FROM一定是先执行的,我们在WHERE条件和SELECT后面都应用了表的别名。

2)下面来验证WHERE和SELECT谁会先执行,在SELECT后面为查询的字段起一个别名,然后在WHERE条件中使用别名来查询条件。

select xgymdjb.name as 姓名,xgymdjb.xb as 性别,xgymdjb.nl as 年龄 from jszx_xgymjzxxb as xgymdjb where 年龄 <= '30' order by nl asc;

SELECT后面为字段添加了别名,当在WHERE条件中使用别名作为查询的条件,就会产生下面的报错,提示年龄字段不存在,年龄字段正是SELECT定义的别名。

image-20220510141742864

综上可以得出一个结论,SELECT后面的字段一定是在WHERE条件后面执行的语句,因为WHERE条件比SELECT条件早执行,还没有反应过来SELECT声明的别名,就已经被执行了,从而产生了这种报错。

3)已经得知SELECT是在WHERE条件之后执行的,但是并不是WHERE条件之后就是SELECT,还有ORDER BY和HAVING,这两个语句执行完毕后,才会执行SELECT。

4)SELECT是在ORDER BY之前执行的语句,我们可以拿SELECT起的别名在ORDER BY后面使用,发现是没有问题的。

select xgymdjb.name as 姓名,xgymdjb.xb as 性别,xgymdjb.nl as 年龄 from jszx_xgymjzxxb as xgymdjb where xgymdjb.nl <= '30' order by 年龄 asc;

image-20220510142707634

综上得出结论:首先执行的是FROM语句,然后执行的是WHERE语句,然后再执行GROUP BY和HAVING,然后在执行SELECT,最后执行ORDER BY和LIMIT。

2.DQL类型的SQL语句汇总

基础查询

1)查询多个字段

SELECT 字段1, 字段2, 字段3 ... FROM 表名 ;

2)为字段设置别名

SELECT 字段1 [ AS 别名1 ] , 字段2 [ AS 别名2 ] ... FROM 表名;

SELECT 字段1 [ 别名1 ] , 字段2 [ 别名2 ] ... FROM 表名;

3)去重查询

SELECT DISTINCT 字段列表 FROM 表名;

条件查询

SELECT 字段列表 FROM 表名 WHERE 条件列表 ;

聚合函数

SELECT 聚合函数(字段列表) FROM 表名 ;

分组查询

SELECT 字段列表,[聚合函数] FROM 表名 [WHERE 条件] GROUP BY 分组字段名 [HAVING 分组后的过滤条件]

排序查询

SELECT 字段列表 FROM 表名 ORDER BY 字段1 排序方式,字段2 排序方式2

分页查询

SELECT 字段列表 FROM 表名 LIMIT 起始索引,每页查询的记录数

相关文章:

  • MySQL出现“Lost connection to MySQL server during query”问题分析与解决
  • keil stm32f407工程环境搭建
  • 猿创征文|从酒店前台收银到软件研发教学主管到技术经理之路~
  • Vue基础:父子组件访问的方式
  • 如果你想技术转管理,先来试试管好一个项目
  • mysql 排它锁,共享锁
  • 煤炭行业生命周期分析,煤炭行业周期性特征
  • [SpringBoot系列]NoSQL数据层解决方案
  • 【通信原理】确知信号的性质分析与研究
  • Linux网络:网络层IP协议 链路层MAC协议
  • 猿创征文 |【SpringBoot2】快速上手SpringBoot
  • Linux的scp命令远程传输文件
  • antv x6让拖拽控件工具箱悬浮在画布上,工具箱区域鼠标按下不生成节点
  • matlab怎么训练神经网络,matlab神经网络训练方法
  • 「面经分享」小米java岗二面面经,已拿offer
  • [译]前端离线指南(上)
  • 「前端早读君006」移动开发必备:那些玩转H5的小技巧
  • 5分钟即可掌握的前端高效利器:JavaScript 策略模式
  • Brief introduction of how to 'Call, Apply and Bind'
  • Linux快速复制或删除大量小文件
  • Spark VS Hadoop:两大大数据分析系统深度解读
  • Vue 2.3、2.4 知识点小结
  • vuex 学习笔记 01
  • 将回调地狱按在地上摩擦的Promise
  • 跨域
  • 快速构建spring-cloud+sleuth+rabbit+ zipkin+es+kibana+grafana日志跟踪平台
  • 名企6年Java程序员的工作总结,写给在迷茫中的你!
  • 前端存储 - localStorage
  • 前嗅ForeSpider教程:创建模板
  • 使用API自动生成工具优化前端工作流
  • 使用docker-compose进行多节点部署
  • 体验javascript之美-第五课 匿名函数自执行和闭包是一回事儿吗?
  • 一、python与pycharm的安装
  • 用 vue 组件自定义 v-model, 实现一个 Tab 组件。
  • 如何用纯 CSS 创作一个菱形 loader 动画
  • #常见电池型号介绍 常见电池尺寸是多少【详解】
  • (007)XHTML文档之标题——h1~h6
  • (16)Reactor的测试——响应式Spring的道法术器
  • (4)事件处理——(6)给.ready()回调函数传递一个参数(Passing an argument to the .ready() callback)...
  • (js)循环条件满足时终止循环
  • (层次遍历)104. 二叉树的最大深度
  • (二)Linux——Linux常用指令
  • (二十一)devops持续集成开发——使用jenkins的Docker Pipeline插件完成docker项目的pipeline流水线发布
  • (附源码)计算机毕业设计ssm基于Internet快递柜管理系统
  • (论文阅读31/100)Stacked hourglass networks for human pose estimation
  • (一)基于IDEA的JAVA基础10
  • (原創) 如何安裝Linux版本的Quartus II? (SOC) (Quartus II) (Linux) (RedHat) (VirtualBox)
  • (转)Windows2003安全设置/维护
  • (转载)OpenStack Hacker养成指南
  • *_zh_CN.properties 国际化资源文件 struts 防乱码等
  • .bat批处理(五):遍历指定目录下资源文件并更新
  • .net wcf memory gates checking failed
  • .Net6 Api Swagger配置
  • @angular/cli项目构建--Dynamic.Form
  • [2016.7 Day.4] T1 游戏 [正解:二分图 偏解:奇葩贪心+模拟?(不知如何称呼不过居然比std还快)]