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

news2024/11/17 3:29:06

 🎉欢迎您来到我的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.coloradmin.cn/o/1376526.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Inis博客系统本地部署结合内网穿透实现远程访问本地站点

文章目录 前言1. Inis博客网站搭建1.1. Inis博客网站下载和安装1.2 Inis博客网站测试1.3 cpolar的安装和注册 2. 本地网页发布2.1 Cpolar临时数据隧道2.2 Cpolar稳定隧道&#xff08;云端设置&#xff09;2.3.Cpolar稳定隧道&#xff08;本地设置&#xff09; 3. 公网访问测试总…

011集:复制txt文件(编码:ANSI复制到UTF-8模式)—python基础入门实例

下面给出一个文本文件复制示例。 代码如下&#xff1a; f_name rD:\mytest2.txt with open(f_name, r, encodinggbk) as f:lines f.readlines()copyfile rD:\copytest2.txtwith open(copyfile, w, encodingutf-8) as copy_f:copy_f.writelines(lines)print(文件复制成功) …

YOLOv8改进 | 二次创新篇 | 在Dyhead检测头的基础上替换DCNv3 (全网独家首发)

一、本文介绍 本文给大家带来的改进机制是在DynamicHead上替换DCNv3模块,其中DynamicHead的核心为DCNv2,但是今年新更新了DCNv3其作为v2的升级版效果肯定是更好的,所以我将其中的核心机制替换为DCNv3给Dyhead相当于做了一个升级,效果也比之前的普通版本要好,这个机制我认…

【2023年度总结与2024展望】---23年故事不长,且听我来讲

文章目录 前言一、学习方面1.1 攥写博客1.2 学习内容1.3 参加比赛获得证书 二、生活方面2.1写周报记录生活 三、运动方面四、CSDN的鼓励五、24年展望总结 前言 时光飞逝&#xff0c;又是新的一年&#xff0c;遥想去年2023年我也同样在这个时间段参加了CSDN举办的年度总结活动&a…

数据库期末复习重点总结

数据库期末复习重点总结 本文为总结&#xff0c;如有不对的地方请指针 第2章 关系模型的介绍 名称符号选择σ投影∏笛卡儿积连接并∪集差-交∩赋值<-更名ρ 除操作 设R和S除运算的结果为T&#xff0c;则T包含所有在R中但不在S中的属性和值&#xff0c;且T的元组与S的元…

数据结构(三)堆和哈希表

目录 哈希表和堆什么是哈希表 &#xff1f;什么是堆 &#xff1f;什么是图 &#xff1f;案例一&#xff1a;使用python实现最小堆案例二 &#xff1a; 如何用Python通过哈希表的方式完成商品库存管理闯关题 &#xff08;包含案例三&#xff1a;python实现哈希表&#xff09; 本…

highlight.js 实现搜索关键词高亮效果

先看效果&#xff1a; 折腾了老半天&#xff0c;记录一下 注意事项都写注释了 代码&#xff1a; <template><div class"absolute-lt wh-full overflow-hidden p-10"><div style"width: 200px"><el-input v-model"keyword"…

OpenCV-Python(33):SURF算法

目标 SUFR 是什么OpenCV 中的SURF 原理 学习了解过SIFT 算法后我们知道&#xff0c;它是对图像关键点进行检测和描述的&#xff0c;具有尺度不变的特性&#xff0c;但是这种算法的执行速度比较慢&#xff0c;人们需要速度更快的算法。2006年Bay,H.,Tuytelaars,T. 和Van Gool,…

智能化项目管理平台:功能丰富、操作简单、降低成本、提高效率

华西建筑智能化团队打造的项目管理平台非常实用和便捷&#xff0c;为现场管理人员提供了极大的便利。以下是对该平台的详细分析&#xff1a; 一、功能丰富 该平台为现场管理人员提供了多种功能&#xff0c;包括工人打卡、材料检验入库、施工质量检查、施工日志编写、施工进度…

vue3dLoader Cannot read properties of null (reading ‘setCrossOrigin‘)“这个报错怎么解决?

默认情况下crossOrigin默认值是“anonymous” 如果出现报错的情况 请设置crossOrigin为空字符串即可。如&#xff1a; <vue3dLoader crossOrigin""> 相关阅读 推荐&#xff1a;vue-3d-loader支持.dae/.fbx/.gltf/.glb/.obj/.ply/.stl/.json&#xff0c;并支…

书生·浦语大模型实战营-学习笔记1

目录 书生浦语大模型全链路开源体系数据集预训练微调评测部署多智能体 视频地址&#xff1a; (1)书生浦语大模型全链路开源体系 开源工具github&#xff1a; https://github.com/InternLM/InternLM 书生浦语大模型全链路开源体系 这次视频中介绍了由上海人工智能实验室OpenMMLa…

入选人民网2023普惠金融优秀案例,合合信息旗下启信宝赋能银行对公信贷数字化转型

普惠金融承载着改善民生、促进实体经济发展的重要职责&#xff0c;近十年来&#xff0c;普惠金融发展取得了长足进步&#xff0c;多层次普惠金融供给格局逐步确立。银行作为金融体系的重要组成部分&#xff0c;高效工作是构建普惠金融体系的重要推动力。 立足于十年的历史节点…

mmdet tools 使用指南

MMDetection 是一个基于 PyTorch 的目标检测开源工具箱。它是 OpenMMLab 项目的一部分。 主分支代码目前支持 PyTorch 1.8 及其以上的版本。 使用前提 (1)mmdet使用手册地址 https://mmdetection.readthedocs.io/zh-cn/latest/user_guides/index.html#id2 (2)第一次运行前请…

观测云产品更新 | 日志、场景仪表板、监控器等

观测云更新 用户访问监测 &#xff08;RUM &#xff09; 公网 Dataway 支持 ip 转换成地理位置信息。 日志 > 查看器详情页 1、新增 BPF 网络日志采集及日志详情页&#xff0c;支持 Json 格式转化&#xff1b; 2、上述 1 中的日志详情页中新增可读的展示模式&#xff0c…

SpringBoot 把PageHelper分页信息返回给前端

第1步&#xff1a;定义线程容器收纳HttpHeaders和HttpStatus import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus;public class ResponseUtils {private static ThreadLocal<HttpHeaders> ThreadLocalHeaders new InheritableT…

鸿蒙开发已解决-arkts编译报错-arkts-limited-stdlib错误

文章目录 项目场景:问题描述原因分析:解决方案:适配指导案例此Bug解决方案总结项目场景: arkts编译报错-arkts-limited-stdlib错误。 我用Deveco studio4.0 beta2开发应用,报arkts-limited-stdlib错误 报错内容为: ERROR: ArKTS:ERROR File: D:/prRevivw/3792lapplica…

前端 TS 语法 接口(2)

介绍 TypeScript的核心原则之一是对值所具有的shape进行类型检查。 它有时被称做“鸭式辨型法”或“结构性子类型化”。 在TypeScript里&#xff0c;接口的作用就是为这些类型命名和为你的代码或第三方代码定义契约。 只读属性 readonly 一些对象属性只能在对象刚刚创建的…

使用Python爬取小红书笔记与评论(js注入方式获取x-s)

文章目录 1. 写在前面2. 分析加密入口3. 使用JS注入4. 爬虫工程化 【作者主页】&#xff1a;吴秋霖 【作者介绍】&#xff1a;Python领域优质创作者、阿里云博客专家、华为云享专家。长期致力于Python与爬虫领域研究与开发工作&#xff01; 【作者推荐】&#xff1a;对JS逆向感…

可运营的SSL证书在线生成系统源码,附带图文搭建教程

安装教程 运行环境 PHP8.0.2-8.2最好选用8.0 Nginx1.22.1版本 Mysql5.7 伪静态设置为Thinkphp 后台账号admin 密码123456 系统使用API申请地址&#xff1a;https://www.sslprogen.com/

pybind11实现numpy和OpenCV Mat的数据交互

1、编译安装pybind11 下载源代码&#xff1a;https://github.com/pybind/pybind11&#xff0c; 文档&#xff1a;https://pybind11.readthedocs.io/en/stable/compiling.html 解压后进入到命令行&#xff0c;如果有conda环境&#xff0c;就先进入想要的conda环境&#xff0c…