关闭

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

标签: 数据库MySQLhavinglimitorderby
1981人阅读 评论(2) 收藏 举报
分类:

温馨提示:本系列博文已经同步到 GitHub,地址为「mysql-tutorial」,欢迎感兴趣的童鞋StarFork,纠错。

数据的高级操作

查询数据(下)

having子句

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

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

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

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

1

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

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

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

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

2

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

order by子句

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

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

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

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

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

3

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

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

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

4

limit子句

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

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

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

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

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

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

00

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

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

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

01

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

大致设计:

  • 对于用户来讲,可以通过点击页码按钮,如123等来进行选择;
  • 对于服务器来讲,可以根据用户选择的页码来获取不同的数据。

其中,

  • length:表示每页的数据量,基本不变;
  • offset:表示每页的起始值,公式为offset=(页码-1)*length.

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


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


———— ☆☆☆ —— 返回 -> 史上最简单的 MySQL 教程 <- 目录 —— ☆☆☆ ————

3
0
查看评论

史上最直白的logistic regression教程 之 五

史上最直白的logistic regression教程整理稿,将4篇博文整理成一个完整的pdf文档,且修改成学术语境。 链接在这里: http://download.csdn.net/detail/u011539200/9290695 0积分下载,求rp,^_^
  • u011539200
  • u011539200
  • 2015-11-22 15:57
  • 651

史上最简单的 MyBatis 教程

1 前言  MyBatis 源于 Apache 的一个开源项目 iBatis,而 iBatis 一词则来源于“internet”和“abatis”的组合,2010年这个项目由 Apache Software Foundation 迁移到了 Google Code,并且改名为MyBatis ,2013...
  • qq_35246620
  • qq_35246620
  • 2017-02-01 00:49
  • 6597

史上最简单的SpringCloud教程 | 第一篇: 服务的注册与发现(Eureka)

一、spring cloud简介 spring cloud 为开发人员提供了快速构建分布式系统的一些工具,包括配置管理、服务发现、断路器、路由、微代理、事件总线、全局锁、决策竞选、分布式会话等等。它运行环境简单,可以在开发人员的电脑上跑。另外说明spring cloud是基于spri...
  • fend0875
  • fend0875
  • 2017-04-21 08:39
  • 1559

史上最简单的SpringCloud教程

转载请标明出处:  http://blog.csdn.net/forezp/article/details/70148833  本文出自方志朋的博客 错过了这一篇,你可能再也学不会 Spring Cloud 了!Spring Boot做为下一代 web 框架,Spr...
  • zhongzh86
  • zhongzh86
  • 2017-11-22 14:15
  • 50

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

数据的高级操作查询数据(上) 基本语法: select + 字段列表/* + from + 表名 + [where 条件]; 完整语法: select + [select 选项] + 字段列表/* + from + 数据源 + [where 条件] + [group by 子句] + [havin...
  • qq_35246620
  • qq_35246620
  • 2017-06-25 19:09
  • 2642

微服务:史上最简单的 SpringCloud 教程 | 终章

http://blog.csdn.net/forezp/article/details/70148833  本文出自方志朋的博客 案例全部采用Spring Boot 1.5.x ,Spring Cloud版本为Dalston.RELEASE  码农下载:https://gi...
  • superdangbo
  • superdangbo
  • 2017-11-01 17:20
  • 284

史上最简单的 MySQL 教程(二十一)「数据的高级操作 之 蠕虫复制」

数据的高级操作蠕虫复制蠕虫复制:从已有的数据表中获取数据,然后将数据进行新增操作,数据成倍(以指数形式)的增加。根据已有表创建新表,即复制表结构,其基本语法为: create table + 表名 + like + [数据库名.]表名; 执行如上 SQL 语句,进行测试:-- 根据已有表,创建新表,...
  • qq_35246620
  • qq_35246620
  • 2017-06-03 21:14
  • 2601

史上最简单的 SpringCloud 教程 | 第一篇: 服务的注册与发现(Eureka)

spring cloud 为开发人员提供了快速构建分布式系统的一些工具,包括配置管理、服务发现、断路器、路由、微代理、事件总线、全局锁、决策竞选、分布式会话等等。它运行环境简单,可以在开发人员的电脑上跑。另外说明spring cloud是基于springboot的。本文主要介绍了服务的注册与发现。
  • forezp
  • forezp
  • 2017-04-08 18:16
  • 309473

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

数据的高级操作查询数据(上) 基本语法: select + 字段列表/* + from + 表名 + [where 条件]; 完整语法: select + [select 选项] + 字段列表[字段别名]/* + from + 数据源 + [where 条件] + [1] + [2] + [3]; ...
  • qq_35246620
  • qq_35246620
  • 2017-06-27 19:56
  • 2190

史上最简单的SpringCloud教程 | 第三篇: 服务消费者(Feign)

这篇文章主要讲述通过feign去消费服务。Feign是一个声明式的web服务客户端,它使得写web服务变得更简单。使用Feign,只需要创建一个接口并注解。它具有可插拔的注解特性,包括Feign 注解和JAX-RS注解。Feign同时支持可插拔的编码器和解码器。
  • forezp
  • forezp
  • 2017-04-09 11:53
  • 188665
    个人资料
    • 访问:953303次
    • 积分:12855
    • 等级:
    • 排名:第1273名
    • 原创:258篇
    • 转载:85篇
    • 译文:11篇
    • 评论:950条
    博主的 GitHub 账号
    GitHub : Charies Gavin

        鉴于 CSDN 糟糕的用户体验,博主会将一些优质的文章迁移到 Charies Gavin's Blog  欢迎大家在 GitHub 上 Follow 博主,以及 Fork、Star、Watch 博主的项目。


      青春不老 奋斗不止


      好学若饥虚心若愚
    博客专栏