SQL-分页查询and语句执行顺序

news/2024/2/24 8:03:56/文章来源:https://blog.csdn.net/qq_69178067/article/details/135496251

 🎉欢迎您来到我的MySQL基础复习专栏

☆* o(≧▽≦)o *☆哈喽~我是小小恶斯法克🍹
✨博客主页:小小恶斯法克的博客
🎈该系列文章专栏:重拾MySQL
🍹文章作者技术和水平很有限,如果文中出现错误,希望大家能指正🙏
📜 感谢大家的关注! ❤️

目录 

DQL-分页查询

案例:

 DQL语句复习案例

DQL-执行顺序


DQL-分页查询

分页操作在业务系统开发时,也是非常常见的一个功能,我们在网站中看到的各种各样的分页条,后台都需要借助于数据库的分页操作。

语法

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

注意事项:

起始索引从0开始,起始索引 = (查询页码 - 1)* 每页显示记录数    [比如我们点击2,代表要查询第二页,那么根据起始索引的计算方式,就是(页码-1)*每页返回的记录数,比如我们要查询第一页,那么其实页码就是从0开始的,假如我要查询第二页,每页要返回10条记录,起始索引应该是10]

分页查询是数据库的方言,不同的数据库有不同的实现,MySQL中是LIMIT    [就比如mysql和oracle在分页查询上就有不同]

如果查询的是第一页数据,要返回10条记录数,起始索引可以省略,直接简写为 limit 10

案例:

查询第1页员工数据, 每页展示10条记录

select * from emp limit 0,10;select * from emp limit 10;

 执行如下:

查询第2页员工数据, 每页展示10条记录 --------> (页码-1)*页展示记录数

select * from emp limit 10,10;

 此时可以观察到只返回了6条数据,因为这张表里面一共16条数据,第一页展示10条,那么第二页只剩这6条可以展示

执行如下:


 DQL语句复习案例

1.查询年龄为20,21,22,23岁的女性员工信息。

代码思路:

select *from emp ;

首先第一个条件限定的是女性员工,那么我们就要gender = '女',将女性员工筛选出来

select *from emp where gender = '女' ;

紧接着还有一个条件,年龄为20,21,22,23,它和女性应该是一个并列的条件,于是我们想到用and将条件并列,之后去筛选年龄为20,21,22,23,则直接使用in(....)就行了

select * from emp where gender = '女' and age in(20,21,22,23) ;

执行如下:

2.查询性别为 男 ,并且年龄在 20-40 ()以内的姓名为三个字的员工。

代码思路:

思考一下几个条件

1.性别为男

2.年龄为20-40之间

3.名字为3个字

很明显这三个条件应该是并列的条件,我们应该用and连接,先把第一条件写了

select * from emp where gender = '男' ;

并且and,年龄在20-40之间,此时我们可以使用age>=20 and age<=40这种语法,也可以使用between and。大家是否记得,在学between and时强调过,20和40能不能反着来,不行的,因为between后面跟最小值,and后面跟最大值

select * from emp where gender = '男' and ( age between 20 and 40 )

之后姓名为3个字,那么我们就用like和3个下划线去占位,不能用百分号

当然为了让我们的条件更加清晰,我们可以在代码中加入小括号,也可以不加

select * from emp where gender = '男' and  ( age between 20 and 40 )  and name like '___';

执行如下:

3.统计员工表中, 年龄小于60岁的 , 男性员工和女性员工的人数。

代码思路:

1.首先分清楚它是统计查询

2.要查询男性员工还要查询女性员工,那么我们就要根据性别进行分组

3.然后去统计年龄小于60岁的男性员工的数量,女性员工的数量

4.这里要特别注意执行顺序的问题

根据性别分组

select * from emp group by gender ;

查询每一个性别的人数,将*更改为count(*),之前的案例演示过,为了让我们更加清晰明了,男的人数是几,女的人数是几,那么我们就要把gender字段查询出来,所以我们在count(*)的前面加上gender字段,逗号切记不能忘记

select gender , count(*) from emp group by gender ;

此时是查询所有员工当中男性和女性的数量,但还有一个条件,我们只查询年龄小于60岁的,所以我们应该在分组之前进行条件过滤,所以应该在group by之前加上where

select gender, count(*) from emp where age < 60 group by gender;

执行如下:

4.查询所有年龄小于等于35岁员工的姓名和年龄,并对查询结果按年龄升序排序,如果年龄相同按 入职时间降序排序。

代码思路:

1.要查询的仅仅是员工的姓名和年龄

select  name , age from  emp ;

2.过滤出年龄小于等于35岁的员工

select  name , age  from  emp where age <= 35 ;

3.对查询的结果年龄升序,年龄相同则按入职时间降序,这样一看就知道需要写两个排序字段

select name , age from emp where age <= 35 order by age asc , entrydate desc ;

执行如下:

5.查询性别为男,且年龄在20-40 ()以内的前5个员工信息,对查询的结果按年龄升序排序, 年龄相同按入职时间升序排序。

与上一题思路相似

1.第一个条件就是查询性别为男

select * from emp where gender = '男' ;

2.年龄要在20-40岁之间,这个条件很明显与上一个条件是并列的

select * from emp where gender = '男' and age between 20 and 40 ;

3.前5个员工的信息,很明显要用到分页limit去限制,那么就需要limit 5

select * from emp where gender = '男' and age between 20 and 40 limit 5 ;

4.结果按照年龄升序,年龄相同则入职时间升序,此时需要排序,那么我们应该在哪写呢?在后面写order by对吗?不对!此时会报错。注意我们刚才讲的语法规则,limit是在最后的

order by应该在limit之前

select * from emp where gender = '男' and age between 20 and 40 order by age asc , entrydate asc limit 5 ;

执行如下:


DQL-执行顺序

之前我们讲到的是编写顺序,不是执行顺序。接下来,我们要来说明的是DQL语句在执行时的执行顺序,也就是先执行哪一部分,后执行哪一部分。

重点

验证执行顺序:

查询年龄大于15的员工姓名、年龄,并根据年龄进行升序排序。

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

执行如下:

我们通过这条SQL如何验证DQL的执行顺序呢?

我们提到DQL执行顺序先执行from,先执行from,那么我们在from后面给emp表起一个别名 e,然后在select where中使用该别名。

select e.name , e.age from emp e ;

如果先执行from,这块的语句执行完毕之后,这个表的别名有了吧,然后紧接着是不是要执行的是where,那么此时我们这一块是不是就能去使用这个别名,此时我们e.age,生不生效,生效,因为from执行完之后,这个表的别名,就已经有了

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

执行如下:

where执行完了如果有分组就是执行group by,having,那么这里没有就不再执行这个操作而是去执行select操作,那么我们select能不能去使用表的别名呢?可以,因为from已经先执行了,所以此时你可以去加上e.name,e.age

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

执行如下:效果没有任何变化

此时可以证明from先执行,然后执行的where和select

接下来再来验证一组顺序

我们刚才知道对于select语句它在where之后,group by之后的,怎么验证呢?

此时我们回想一下,可不可以对查询返回的字段起别名呢?可以

此时就给e.name起别名叫ename,e.age起别名叫eage

那么我在where之后不通过e.age这种方式来鉴定条件,我使用e.age的别名eage可不可以?

select e.name ename , e.age eage from emp e where eage > 15 order by age asc;

执行发现报错:

为什么会出现这个现象?原因是select语句在where之后执行,既然在where之后执行,那么我们在where里面就不能用到select语句起的别名

由此我们可以得出结论: from 先执行,然后执行 where , 再执行select 。

接下来我们在验证select和order by的执行顺序是什么?select在order by之前,那根据前面的经验,按道理说我们在order by中就能够使用select的别名,我们验证一下

select e.name ename , e.age eage from emp e where e.age > 15 order by eage asc;

执行成功:

结果执行成功。 那么也就验证了: order by 是在select 语句之后执行的。

总结:综上所述,我们可以看到DQL语句的执行顺序为: from ... where ... group by ... having ... select ... order by ... limit ... 


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_925267.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LLVM系列(1): 在微软Visual Studio下编译LLVM

参考链接&#xff1a; Getting Started with the LLVM System using Microsoft Visual Studio — LLVM 18.0.0git documentation 1.安装visualstudio&#xff0c;版本需要大于vs2019 本机环境已安装visual studio2022&#xff0c;省略 2安装Makefile&#xff0c;版本需要大…

【K8s学习】

k8s的简单执行流程&#xff1a; Kubernetes Master&#xff08;API Server、Scheduler等组件&#xff09;负责调度Pod到合适的Node上。 当Pod被调度到某个Node时&#xff0c;该Node上的kubelet代理会收到指令并开始执行Pod的生命周期管理任务&#xff0c;包括创建、监控和终止P…

【Python数据可视化】matplotlib之绘制常用图形:折线图、柱状图(条形图)、饼图和直方图

文章传送门 Python 数据可视化matplotlib之绘制常用图形&#xff1a;折线图、柱状图&#xff08;条形图&#xff09;、饼图和直方图matplotlib之设置坐标&#xff1a;添加坐标轴名字、设置坐标范围、设置主次刻度、坐标轴文字旋转并标出坐标值matplotlib之增加图形内容&#x…

阿里 P7 三面凉凉,kafka Borker 日志持久化没答上来

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是爱敲代码的小黄&#xff0c;阿里巴巴淘天Java开发工程师&#xff0c;CSDN博客专家&#x1f4d5;系列专栏&#xff1a;Spring源码、Netty源码、Kafka源码、JUC源码、dubbo源码系列&#x1f525;如果感觉博主的文章还不错…

JVM基础(7)——ParNew垃圾回收器

作者简介&#xff1a;大家好&#xff0c;我是smart哥&#xff0c;前中兴通讯、美团架构师&#xff0c;现某互联网公司CTO 联系qq&#xff1a;184480602&#xff0c;加我进群&#xff0c;大家一起学习&#xff0c;一起进步&#xff0c;一起对抗互联网寒冬 学习必须往深处挖&…

市场复盘总结 20240116

仅用于记录当天的市场情况&#xff0c;用于统计交易策略的适用情况&#xff0c;以便程序回测 短线核心&#xff1a;不参与任何级别的调整&#xff0c;采用龙空龙模式 昨日主题投资 连板进级率 18% 二进三&#xff1a; 进级率低 60% 最常用的二种方法&#xff1a; 方法一&am…

【iOS】数据持久化(四)之FMDB基本使用

正如我们前面所看到的&#xff0c;原生SQLite API在使用时还是比较麻烦的&#xff0c;于是&#xff0c;开源社区就出现了一系列将SQLite API进行封装的库&#xff0c;其中FMDB的被大多数人所使用 FMDB和SQLite相比较&#xff0c;SQLite比较原始&#xff0c;操作比较复杂&#…

GPT/GPT4在人工智能,深度学习,编程等领域应用

详情点击链接&#xff1a;GPT/GPT4在人工智能&#xff0c;深度学习&#xff0c;编程等领域应用 一OpenAI 1.最新大模型GPT-4 Turbo 2.最新发布的高级数据分析&#xff0c;AI画图&#xff0c;图像识别&#xff0c;文档API 3.GPT Store 4.从0到1创建自己的GPT应用 5. 模型Ge…

价值7500的在线授权网站源码支持IP+域名+双向授权全开源

PHP授权验证更新系统完整版&#xff0c;一键更新系统&#xff0c;一键卡密生成自助授权功能&#xff0c;域名ip双重验证功能等等 修复盗版检测&#xff0c;确保实时查看盗版 修复在线加密系统&#xff0c;一键加密 授权系统几乎所有的程序都能整合使用,包括您的app和计算机程序…

数据结构实战:变位词侦测

文章目录 一、实战概述二、实战步骤&#xff08;一&#xff09;逐个比较法1、编写源程序2、代码解释说明&#xff08;1&#xff09;函数逻辑解释&#xff08;2&#xff09;主程序部分 3、运行程序&#xff0c;查看结果4、计算时间复杂度 &#xff08;二&#xff09;排序比较法1…

docker 安装 zookeeper ( 亲测有效 )

目录 1 安装2 验证 1 安装 上传 zookeeoer.tar 包 到服务器 上传之后tar 包&#xff0c;将他变成镜像 输入docker images,发现目前是没有镜像的&#xff0c;现在将tar 包变成镜像 docker load -i zookeeper.tar因为我们要使用 Docker-compose 去管理容器&#xff0c;所以要使…

网络共享服务

存储类型&#xff1a;直连式&#xff08;DAS&#xff09;:距离最近&#xff0c;存储设备且直接连接到服务器上 存储区域网络&#xff08;SAN&#xff09;&#xff1a;适用于大型应用或数据库系统&#xff0c;可以使用文件的空间&#xff0c; 以及管理空间…

深入理解 Flink(五)Flink Standalone 集群启动源码剖析

前言 Flink 集群的逻辑概念&#xff1a; JobManager(StandaloneSessionClusterEntrypoint) TaskManager(TaskManagerRunner) Flink 集群的物理概念&#xff1a; ResourceManager(管理集群所有资源&#xff0c;管理集群所有从节点) TaskExecutor(管理从节点资源&#xff0c;接…

使用WAF防御网络上的隐蔽威胁之SSRF攻击

服务器端请求伪造&#xff08;SSRF&#xff09;攻击是一种常见的网络安全威胁&#xff0c;它允许攻击者诱使服务器执行恶意请求。与跨站请求伪造&#xff08;CSRF&#xff09;相比&#xff0c;SSRF攻击针对的是服务器而不是用户。了解SSRF攻击的工作原理、如何防御它&#xff0…

贪心算法(思路)

最近在cf上做了很多贪心的题&#xff0c;写篇博客来总结一下 Problem - C - Codeforces 看第一道题 不难看出&#xff0c;我们需要在数组中找到一段奇偶相间的序列&#xff0c;要使他们的和最大&#xff0c; 在图中我们假设[1,2]和[3,4]是奇偶相间的序列&#xff0c;我们在在…

【Docker】数据卷挂载以及宿主机目录挂载的使用

&#x1f389;&#x1f389;欢迎来到我的CSDN主页&#xff01;&#x1f389;&#x1f389; &#x1f3c5;我是Java方文山&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f31f;推荐给大家我的专栏《Docker实战》。&#x1f3af;&#x1f3af; &…

docker部署私人云盘nextcloud

首先查看效果 1.拉取镜像 docker pull nextcloud 2.创建目录 mkdir -p /data/nextcloud/{config,data,apps} 3.创建实例 docker run -itd --name yznextcloud -v /data/nextcloud/config:/var/www/html/config -v /data/nextcloud/data:/var/www/html/data -v /data/nextc…

关于html导出word总结一

总结 测试结果不理想&#xff0c;html-to-docx 和 html-docx-js 最终导出的结果 都 差强人意&#xff0c;效果可以见末尾的附图 环境 "electron": "24.3.0" 依赖库 html-docx-js html-docx-js - npm html-to-docx html-to-docx - npm file-saver…

基于DNA的密码学和隐写术综述

摘要 本文全面调研了不同的脱氧核糖核酸(DNA)-基于密码学和隐写术技术。基于DNA的密码学是一个新兴领域,利用DNA分子的大规模并行性和巨大的存储容量来编码和解码信息。近年来,由于其相对传统密码学方法的潜在优势,如高存储容量、低错误率和对环境因素的抗性,该领域引起…

JDK8-JDK17版本升级

局部变量类型推断 switch表达式 文本块 Records 记录Records是添加到 Java 14 的一项新功能。它允许你创建用于存储数据的类。它类似于 POJO 类&#xff0c;但代码少得多&#xff1b;大多数开发人员使用 Lombok 生成 POJO 类&#xff0c;但是有了记录&#xff0c;你就不需要使…