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

这篇具有很好参考价值的文章主要介绍了SQL-分页查询and语句执行顺序。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

SQL-分页查询and语句执行顺序,重拾MySQL-基础篇,sql,oracle,数据库

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

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

目录 

DQL-分页查询

案例:

 DQL语句复习案例

DQL-执行顺序


DQL-分页查询

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

SQL-分页查询and语句执行顺序,重拾MySQL-基础篇,sql,oracle,数据库

语法

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;

 执行如下:

SQL-分页查询and语句执行顺序,重拾MySQL-基础篇,sql,oracle,数据库

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

select * from emp limit 10,10;

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

执行如下:

SQL-分页查询and语句执行顺序,重拾MySQL-基础篇,sql,oracle,数据库


 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) ;

执行如下:

SQL-分页查询and语句执行顺序,重拾MySQL-基础篇,sql,oracle,数据库

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 '___';

执行如下:

SQL-分页查询and语句执行顺序,重拾MySQL-基础篇,sql,oracle,数据库

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;

执行如下:

SQL-分页查询and语句执行顺序,重拾MySQL-基础篇,sql,oracle,数据库

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 ;

执行如下:

SQL-分页查询and语句执行顺序,重拾MySQL-基础篇,sql,oracle,数据库

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 ;

执行如下:

SQL-分页查询and语句执行顺序,重拾MySQL-基础篇,sql,oracle,数据库


DQL-执行顺序

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

重点

SQL-分页查询and语句执行顺序,重拾MySQL-基础篇,sql,oracle,数据库

验证执行顺序:

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

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

执行如下:SQL-分页查询and语句执行顺序,重拾MySQL-基础篇,sql,oracle,数据库

我们通过这条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;

执行如下:

SQL-分页查询and语句执行顺序,重拾MySQL-基础篇,sql,oracle,数据库

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;

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

SQL-分页查询and语句执行顺序,重拾MySQL-基础篇,sql,oracle,数据库

此时可以证明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;

执行发现报错:

SQL-分页查询and语句执行顺序,重拾MySQL-基础篇,sql,oracle,数据库

为什么会出现这个现象?原因是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;

执行成功:

SQL-分页查询and语句执行顺序,重拾MySQL-基础篇,sql,oracle,数据库

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

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

SQL-分页查询and语句执行顺序,重拾MySQL-基础篇,sql,oracle,数据库文章来源地址https://www.toymoban.com/news/detail-813813.html


到了这里,关于SQL-分页查询and语句执行顺序的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Mysql的学习与巩固:一条SQL查询语句是如何执行的?

    我们经常说,看一个事儿千万不要直接陷入细节里,你应该先鸟瞰其全貌,这样能够帮助你从高维度理解问题。同样,对于MySQL的学习也是这样。平时我们使用数据库,看到的通常都是一个整体。比如,你有个最简单的表,表里只有一个ID字段,在执行下面这个查询语句时:

    2023年04月13日
    浏览(89)
  • mybatis-plus技巧--动态表名-多语句-拼接sql--关于mybatis的mysql分页查询总数的优化思考

    传入tableName参数就可以了,不过只能用$不能用# 因为#会发生预编译,然后会在表名上加引号’\\\'。 新建一个表名拦截类实现TableNameHandler mybatisPlus添加插件 实例: 每天按统计 如果表名为count则加上今天的时间 每次设置 直接设置名字,然后就会改变的。 需要在配置文件中的

    2024年01月16日
    浏览(46)
  • SQL语句的执行顺序

    1 from                找表 2 on                   关联条件帅选 3 join                 关联表操作 4 where             条件筛选 5 group by         进行分组 6 avg,sum…      执行函数 7 having            分组后筛选 8 select           

    2024年02月10日
    浏览(44)
  • SQL语句执行顺序相关问题

    注意本文是SQL执行顺序,不是MySQL Server内部执行流程。 MySQL并非像PostgreSQL(被认为是最接近 SQL 标准的数据库之一)一样严格按照SQL标准,MySQL执行引擎会根据查询的具体情况和优化策略来决定具体的执行顺序,所以SQL执行顺序是理论顺序。 select...from...join...on...where...group

    2024年02月19日
    浏览(46)
  • SQL 查询的执行顺序

    by emanjusaka from ​ https://www.emanjusaka.top/2023/09/sql-query-order 彼岸花开可奈何 本文欢迎分享与聚合,全文转载请留下原文地址。 了解 SQL 查询的执行顺序对我们解决一些问题很有帮助,有时我们可能会疑惑为什么不能对分组的结果进行筛选这样类似的问题?之前一直不是理解这个

    2024年02月10日
    浏览(47)
  • MySQL Select 语句执行顺序

    一条 SQL 查询语句结构如下: 但真正的执行步骤如下,执行时,每个步骤都会产生一个虚拟表,该虚拟表被用作下一个步骤的输入: 1. FROM 在这一步,无论后面跟那种联接运算(LEFT JOIN、RIGHT JOIN等),都首先执行交叉联接(CROSS JOIN),计算笛卡尔积,生成虚拟表 VT-1 2. ON 根

    2024年02月05日
    浏览(41)
  • 基本 SQL 命令 、重要的 SQL命令、SQL 约束 及 SQL语句 的 执行顺序

    学习目标如下: SQL语句执行顺序 基本 SQL 命令:` FROM ON JOIN WHERE GROUP BY AGG_FUNC WITH HAVING SELECT 从数据库中提取数据 UNION DISTINCT ORDER BY 排序 LIMIT 重要的sql命令: 1、SELECT - 从数据库中提取数据 2、UPDATE - 更新数据库中的数据 3、DELETE - 从数据库中删除数据 4、INSERT INTO - 向数据库

    2024年02月08日
    浏览(44)
  • 【MySQL系列】- SELECT语句执行顺序

    2.1 执行FROM操作 这一步需要做的是对FROM子句前后的两张表进行笛卡尔积操作,也称作为交叉连接,生成虚拟表VT1。如果FROM子句前的表包含a行数据,FROM子句后的表中包含b行数据,那么虚拟表VT1将包含a*b行数据。 2.2 应用ON过滤器 SELECT查询共有3个过滤流程,分别是ON、WHERE、

    2024年02月08日
    浏览(47)
  • GaussDB SQL查询语句执行过程解析

    本文分享自华为云社区《【GaussTech第2期】GaussDB SQL查询语句执行过程解析》,作者: GaussDB 数据库。 SQL于关系型数据库而言,重要性不言而喻。就像一个乐团的指挥,指导着作品的正确演绎和节奏的和谐统一。华为云GaussDB作为新一代关系型分布式数据库,具备卓越的技术性

    2024年04月24日
    浏览(44)
  • 01 | 一条 SQL 查询语句是如何执行的?

    以下内容出自 《MySQL 实战 45 讲》 一条 SQL 查询语句是如何执行的? 下面是 MySQL 的基本架构示意图,从中可以清楚地看到 SQL 语句在 MySQL 的各个功能模块中的执行过程。 大体来说,MySQL 可以分为 Server 层和存储引擎层两部分。 Server 层包括连接器、查询缓存、分析器、优化器

    2024年02月10日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包