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

 🎉欢迎您来到我的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.mzph.cn/news/616639.shtml

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

相关文章

Pytest插件pytest-cov:优雅管理测试覆盖率

在软件开发中&#xff0c;测试覆盖率是评估测试质量的关键指标之一。为了更方便地统计和管理测试覆盖率&#xff0c;Pytest插件"pytest-cov"应运而生。本文将介绍"pytest-cov"的基本用法和优雅管理测试覆盖率的方法。 什么是pytest-cov? pytest-cov 是Pyt…

Docker数据卷与拦截与目录拦截

目录 高级容器挂载技术深度解析引言数据卷挂载原理解析应用场景使用介绍 目录挂载原理解析应用场景使用介绍 总结 高级容器挂载技术深度解析 引言 容器技术的快速发展使得容器挂载技术变得愈发重要。在容器化应用中&#xff0c;数据卷挂载和目录挂载是两种常见的挂载方式&…

【Python机器学习】SVM——调参

下面是支持向量机一个二维二分类数据集的训练结果&#xff1a; import mglearn import matplotlib.pyplot as plt from sklearn.svm import SVCplt.rcParams[font.sans-serif] [SimHei] plt.rcParams[axes.unicode_minus] False X,ymglearn.tools.make_handcrafted_dataset()…

ModuleNotFoundError: No module named ‘simple_knn‘

【报错】使用 AutoDL 复现 GaussianEditor 时引用 3D Gaussian Splatting 调用simple_knn 时遇到 ModuleNotFoundError: No module named ‘simple_knn‘ 报错&#xff1a; 【原因】 一开始以为是版本问题&#xff0c;于是将所有可能的版本都尝试了 (from versions: 0.1, 0.2…

笔试面试题——继承和组合

&#x1f4d8;北尘_&#xff1a;个人主页 &#x1f30e;个人专栏:《Linux操作系统》《经典算法试题 》《C》 《数据结构与算法》 ☀️走在路上&#xff0c;不忘来时的初心 文章目录 一、什么是菱形继承&#xff1f;菱形继承的问题是什么&#xff1f;二、什么是菱形虚拟继承&am…

SqlAlchemy使用教程(一) 原理与环境搭建

一、SqlAlchemy 原理及环境搭建 SqlAlchemy是1个支持连接各种不同数据库的Python库&#xff0c;提供DBAPI与ORM&#xff08;object relation mapper&#xff09;两种方式使用数据库。 DBAPI方式&#xff0c;即使用SQL方式访问数据库 ORM, 对象关系模型&#xff0c;是用 Python…

1.1 计算机网络在信息时代的作用

1.1 计算机网络在信息时代的作用 网络&#xff08;Network&#xff09;由若干结点&#xff08;Node&#xff09;和连接这些结点的链路&#xff08;Link&#xff09;所组成。网络中的结点可以是计算机、集线器、交换机或者路由器等。 图1-1 多个网络还可以通过路由器互连起来&a…

记录一下误删除libc.so.6的经历

起因&#xff1a; 在配置环境时&#xff0c;出现’GLIBCXX_3.4.29 not found’的错误&#xff0c;在解决这个问题的过程中&#xff0c;需要删除sudo rm /usr/lib/x86_64-linux-gnu/libstdc.so.6软连接&#xff0c;但是一不小心sudo rm /lib/x86_64-linux-gpu/libc.so.6&#xf…

使用主题模型和古老的人类推理进行无监督文本分类

一、说明 我在日常工作中不断遇到的一项挑战是在无法访问黄金标准标签的情况下标记文本数据。这绝不是一项微不足道的任务&#xff0c;在本文中&#xff0c;我将向您展示一种相对准确地完成此任务的方法&#xff0c;同时保持管道的可解释性和易于调整。 一些读者可能已经开始考…

docker-compose一键搭建zookeeper集群

1、setup.sh setup.sh脚本用来创建本地文件夹&#xff0c;这些文件夹会被挂载到docker容器。 #!/bin/bashmkdir -p "$PWD\zoo1\data" mkdir -p "$PWD\zoo1\datalog"mkdir -p "$PWD\zoo2\data" mkdir -p "$PWD\zoo2\datalog"mkdir -p…

计算机缺失msvcp120.dll的最新解决方法,实测可以完美修复

在计算机使用过程中&#xff0c;我们经常会遇到一些错误提示&#xff0c;其中之一就是“msvcp120.dll丢失”。msvcp120.dll是Microsoft Visual C Redistributable Package的一部分&#xff0c;它是运行许多基于Windows操作系统的应用程序所必需的动态链接库文件之一。如果计算机…

Jetson_yolov8_解决模型导出.engine遇到的问题、使用gpu版本的torch和torchvision、INT8 FP16量化加快推理

1、前情提要 英伟达Jetson搭建Yolov8环境过程中遇到的各种报错解决&#xff08;涉及numpy、scipy、torchvision等&#xff09;以及直观体验使用Yolov8目标检测的过程&#xff08;CLI命令行操作、无需代码&#xff09;-CSDN博客和YOLOv8_测试yolov8n.pt&#xff0c;yolov8m.pt训…

[C#]winform部署yolov5-onnx模型

【官方框架地址】 https://github.com/ultralytics/yolov5 【算法介绍】 Yolov5&#xff0c;全称为You Only Look Once version 5&#xff0c;是计算机视觉领域目标检测算法的一个里程碑式模型。该模型由ultralytics团队开发&#xff0c;并因其简洁高效的特点而备受关注。Yol…

nova组件讲解和glance对接swift

1、openstack架构 &#xff08;1&#xff09;openstack是一种SOA架构&#xff08;微服务就是从这种架构中剥离出来的&#xff09; &#xff08;2&#xff09;这种SOA架构&#xff0c;就是把每个服务独立成一个组件&#xff0c;每个组件通过定义好的api接口进行互通 &#xff…

使用递归将list转换成tree

在产品研发时遇到这样一个问题&#xff0c;对于省市区县这类三级联动的数据&#xff0c;前端插件需要一次把数据全部返回&#xff0c;单纯的使用接口查询字节的没办法满足要求。 如果一次把数据全部返回&#xff0c;前端使用起来很麻烦需要一条一条的进行查找。 常规的使用方…

软件测试|解读Python的requirements.txt文件:管理项目依赖的完整指南

简介 在Python项目中&#xff0c;管理依赖库是必不可少的。requirements.txt文件是一种常用的方式&#xff0c;用于列出项目所需的所有依赖库及其版本。本文将详细介绍requirements.txt的用法&#xff0c;帮助你更好地管理项目的依赖。 使用步骤 创建requirements.txt文件&am…

2024 爱分析 · AI 与大模型高峰论坛:和鲸喜获两项殊荣!

1 月 9 日下午&#xff0c;“2024 爱分析 AI 与大模型高峰论坛”在京举办。本次论坛以“智能涌现&#xff0c;价值焕新”为主题&#xff0c;汇聚众多专家学者、实践先驱&#xff0c;共同探讨 AI 与大模型在企业内的新场景、新价值、新路径。论坛中&#xff0c;和鲸科技成功入选…

全网最全postman接口测试教程和项目实战~从入门到精通!!!

Postman实现接口测试内容大纲一览&#xff1a; 一、什么是接口&#xff1f;为什么需要接口&#xff1f; 接口指的是实体或者软件提供给外界的一种服务。 因为接口能使我们的实体或者软件的内部数据能够被外部进行修改。从而使得内部和外部实现数据交互。所以需要接口。 比如&…

2023年全国职业院校技能大赛软件测试赛题—单元测试卷①

单元测试 一、任务要求 题目1&#xff1a;根据下列流程图编写程序实现相应分析处理并显示结果。返回文字“xa*a*b的值&#xff1a;”和x的值&#xff1b;返回文字“xa-b的值&#xff1a;”和x的值&#xff1b;返回文字“xab的值&#xff1a;”和x的值。其中变量a、b均须为整型…

力扣120. 三角形最小路径和(Java 动态规划)

Problem: 120. 三角形最小路径和 文章目录 题目描述思路解题方法复杂度Code 题目描述 思路 Problem:64. 最小路径和 本题目可以看作是在上述题目的基础上改编而来&#xff0c;具体的思路&#xff1a; 1.记录一个int类型的大小的 n 乘 n n乘n n乘n的数组&#xff08;其中 n n n为…