史上最简单的 MySQL 教程(二十五)「数据的高级操作 之 查询(下)」

数据的高级操作

查询数据(下)

having子句

having字句:where子句一样,都是进行条件判断的,但是where是针对磁盘数据进行判断,数据进入内存之后,会进行分组操作,分组结果就需要having来处理。思考可知,having能做where能做的几乎所有事情,但是where却不能做having能做的很多事情。

第 1 点:分组统计的结果或者说统计函数只有having能够使用

执行如下 SQL 语句,进行测试:
 

[plain] view plaincopy

  1. -- 求出表 student 中所有班级人数大于等于 2 的班级  
  2. select grade,count(*) from student group by grade having count(*) >= 2;  
  3. select grade,count(*) from student where count(*) >= 2 group by grade;  





如上图所示,显然having子句可以对统计函数得到的结果进行筛选,但是where却不能。

第 2 点:having能够使用字段别名,where则不能

执行如下 SQL 语句,进行测试:
 

[plain] view plaincopy

  1. -- 求出表 student 中所有班级人数大于等于 2 的班级  
  2. select grade,count(*) as total from student group by grade having total >= 2;  
  3. select grade,count(*) as total from student where total >= 2 group by grade;  





如上图所示,显然咱们的结论得到了验证。究其原因,where是从磁盘读取数据,而磁盘中数据的名字只能是字段名,别名是数据(字段)进入到内存后才产生的。值得注意的是,在上述 SQL 语句中咱们使用了字段别名,这在无意中就优化了 SQL 并提高了效率,因为少了一次统计函数的计算
 

order by子句

order by子句:根据某个字段进行升序或者降序排序,依赖校对集

基本语法order by + [asc/desc];

其中,asc为升序,为默认值;desc为降序。

执行如下 SQL 语句,进行测试:
 

[plain] view plaincopy

  1. -- 将表 student 中的数据按年龄 age 进行排序  
  2. select * from student order by age;  





此外,咱们可以进行「多字段排序」,即先根据某个字段进行排序,然后在排序后的结果中,再根据某个字段进行排序

执行如下 SQL 语句,进行测试:
 

[plain] view plaincopy

  1. -- 将表 student 中的数据先按年龄 age 升序排序,再按班级 grade 降序排序  
  2. select * from student order by age,grade desc;  




 

limit子句

limit子句:是一种限制结果的语句,通常来限制结果的数量

基本语法limit + [offset] + length;

其中,offset为起始值;length为长度。

第 1 种:只用来限制长度(数据量)

执行如下 SQL 语句,进行测试:
 

[plain] view plaincopy

  1. -- 查询表 student 中的全部记录  
  2. select * from student;  
  3. -- 查询表 student 中的 3 条记录  
  4. select * from student limit 3;  





第 2 种:限制起始值,限制长度(数据量)

执行如下 SQL 语句,进行测试:
 

[plain] view plaincopy

  1. -- 查询表 student 中的记录  
  2. select * from student limit 0,2;  
  3. -- 查询表 student 中的记录  
  4. select * from student limit 2,2;  





第 3 种:主要用来实现数据的分页,目的是为用户节省时间,提高服务器的响应效率,减少资源的浪费

大致设计:

对于用户来讲,可以通过点击页码按钮,如123等来进行选择;

对于服务器来讲,可以根据用户选择的页码来获取不同的数据。

其中,

length:表示每页的数据量,基本不变;

offset:表示每页的起始值,公式为offset=(页码-1)*length.

如果大家感兴趣的话,可以结合PHP或者其他语言进行测试。

温馨提示:符号[]括起来的内容,表示可选项;符号+,则表示连接的意思。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值