洪梅网站仿做,免费绘画素材网站,WordPress模板转换typecho,WordPress 4.8加速#x1f389;欢迎您来到我的MySQL基础复习专栏 ☆* o(≧▽≦)o *☆哈喽~我是小小恶斯法克#x1f379; ✨博客主页#xff1a;小小恶斯法克的博客 #x1f388;该系列文章专栏#xff1a;重拾MySQL #x1f379;文章作者技术和水平很有限#xff0c;如果文中出现错误欢迎您来到我的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 女 ; 紧接着还有一个条件年龄为20212223它和女性应该是一个并列的条件于是我们想到用and将条件并列之后去筛选年龄为20212223则直接使用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之间此时我们可以使用age20 and age40这种语法也可以使用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 byhaving那么这里没有就不再执行这个操作而是去执行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起别名叫enamee.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 ...