引言

在本篇博客简单介绍一下分页查询以及聚合查询简单操做。html

分页查询

在MySQL中,分页查询通常都是使用limit子句实现,limit子句声明以下:mysql

SELECT * FROM table LIMIT [offset,] rows | rows OFFSET offset

LIMIT子句能够被用于指定 SELECT 语句返回的记录数。需注意如下几点:web

一、第一个参数指定第一个返回记录行的偏移量sql

二、第二个参数指定返回记录行的最大数目数据库

三、若是只给定一个参数:它表示返回最大的记录行数目并发

四、第二个参数为 -1 表示检索从某一个偏移量到记录集的结束全部的记录行分布式

五、初始记录行的偏移量是0(而不是 1)svg

下面是一个应用实例:函数

select * from orders where type=8 limit 1000,10;

该条语句将会从表 orders 中查询第1000条数据以后的10条数据,也就是第1001条到第1010条数据。高并发

数据表中的记录默认使用主键(通常为id)排序,上面的结果至关于:

select * from orders where type=8 order by id limit 10000,10;

使用子查询优化

这种方式先定位偏移位置的 id,而后日后查询,这种方式适用于 id 递增的状况。

select * from orders where type=8 limit 100000,1;

select id from orders where type=8 limit 100000,1;

select * from orders where type=8 and

id>=(select id from orders where type=8 limit 100000,1)

limit 100;

select * from orders where type=8 limit 100000,100;

针对上面的查询须要注意:

一、比较第1条语句和第2条语句:使用 select id 代替 select * 速度增长了3倍;

二、比较第2条语句和第3条语句:速度相差几十毫秒;

三、比较第3条语句和第4条语句:得益于 select id 速度增长,第3条语句查询速度增长了3倍,这种方式相较于原始通常的查询方法,将会增快数倍。

使用 id 限定优化

这种方式假设数据表的id是连续递增的,则咱们根据查询的页数和查询的记录数能够算出查询的id的范围,可使用 id between and 来查询:

select * from orders where type=2

and id between 1000000 and 1000100 limit 100;

还能够有另一种写法:

select * from orders where id >= 1000001 limit 100;

固然还可使用 in 的方式来进行查询,这种方式常常用在多表关联的时候进行查询,使用其余表查询的id集合,来进行查询:

select * from orders where id in

(select order_id from trade_2 where goods = 'pen')

limit 100;

这种 in 查询的方式要注意:某些 mysql 版本不支持在 in 子句中使用 limit。

关于数据表的id说明

通常状况下,在数据库中创建表的时候,每一张表强制添加 id 递增字段,这样更方便咱们查询数据。

若是数据量很大,好比像订单这类,通常会推荐进行分库分表。这个时候 id 就不建议做为惟一标识了,而应该使用分布式的高并发惟一 id 生成器来生成,并在数据表中使用另外的字段来存储这个惟一标识。

首先使用范围查询定位 id (或者索引),而后再使用索引进行定位数据,即先 select id,而后在 select *;这样查询的速度将会提高好几倍。

聚合查询

也就是组函数,在一个行的集合(一组行)上进行操做,对每一个组给一个结果。

经常使用的组函数:

函数

说明

COUNT

统计行的数量

SUM

计算某一列的合计值,该列必须为数值类型

AVG

计算某一列的平均值,该列必须为数值类型

MAX

计算某一列的最大值

MIN

计算某一列的最小值

一、count函数

count(*):返回表中知足where条件的行的数量

select count(*) from salary_tab where salary='1000';

select count(*) from salary_tab;  #没有条件,默认统计表数据行数

count(列):返回列值非空的行的数量

select count(salary) from salary_tab;

count(distinct 列):返回列值非空的、而且列值不重复的行的数量

select count(distinct salary) from salary_tab;

count(expr):根据表达式统计数据

select UNIT as '单位',

COUNT(TO_DAYS(DATE)=TO_DAYS(NOW()) or null) as '今日统计',

COUNT(YEAR(DATE)=YEAR(NOW()) or null) as '今年统计'

from v_jjd

group by JJDW;

二、max和min函数—统计列中的最大最小值

select max(salary) from salary_tab;

select min(salary) from salary_tab;

三、sum和avg函数—求和与求平均

select sum(salary) from salary_tab;

select avg(salary) from salary_tab;

select avg(ifnull(salary,0)) from salary_tab;

注意:要想列值为NULL的行也参与组函数的计算,必须使用IFNULL函数对NULL值作转换。

参考

mysql分页查询所有数据库_MySQL 数据库 分页查询/聚合查询相关推荐

  1. linux mysql 实战_Linux平台MySQL多实例项目实施_MySQL数据库基础与项目实战06

    Linux平台MySQL多实例项目实施_MySQL数据库基础与项目实战06 视频教程学习地址 Oracle/MySQL数据库学习专用QQ群:336282998.189070296 学完风哥本课程能熟悉 ...

  2. mysql计算机二级电子教程_MySQL数据库程序设计(2019年版全国计算机等级考试二级教程)...

    导语 内容提要 黄靖编写的<MySQL数据库程序设计(2019年版全国计算机等级考试二级教程)>根据教育部考试中心最新颁布的<全国计算机等级考试二级MySQL数据库程序设计考试大纲( ...

  3. mysql数据库子查询的使用_MySQL数据库使用子查询方式更新数据优化及思考

    [环境介绍] 云数据库MySQL 5.7 [背景描述] 业务需要:需要对16370077的表数据进行更新部分数据操作 UPDATE P_MOXXXX_REXXXX SET FISAVAILABLE = ...

  4. mysql获取查询策略语句_MySQL数据库查询性能优化策略

    优化查询 使用Explain语句分析查询语句 Explain 用来分析 SELECT 查询语句,开发人员可以通过分析 Explain 结果来优化查询语句. 通过对查询语句的分析,可以了解查询语句的执行 ...

  5. mysql集合查询的命令_MySQL数据库常用命令集合

    1.设置root密码 方法1: 用SET PASSWORD命令 mysql -u root SET PASSWORD FOR 'root'@'localhost' = PASSWORD('newpas ...

  6. mysql 性别以女生升序_MySQL数据库实验:任务三 数据库的单表查询设计

    任务三 数据库的单表查询设计 文章目录 任务三 数据库的单表查询设计 [实训目的与要求] [实训原理] [实训步骤] 一.简单查询 二.按条件查询 1.比较大小查询 2.带in关键字的查询(确定集合) ...

  7. mysql数据库函数转义函数_MySql数据库-查询、插入数据时转义函数的使用

    最近在看一部php的基础视频教程,在做案例的时,当通过用户名查询用户信息的时候,先使用了转义函数对客户提交的内容进行过滤之后再交给sql语句进行后续的操作.虽然能看到转义函数本身的作用,但是仍然有一些 ...

  8. mysql查询 伪列_Mysql数据库查询到的数据设置伪列显示

    本次查询表为:  tasks 查询的字段为: id,name 查询语句为: select id,name from tasks; 查询结果为: +----+------------+ | id | n ...

  9. mysql opaq数据库_MySql数据库

    表: 字段 数据类型 约束 约束:主键,外键,非空,默认值: win + r 输入cmd 输入命令:mysql -u root -p.输入密码. 输入命令注意: 1.命令结束符号是分号. 2.所有符号 ...

最新文章

  1. 知乎热议:国家何时整治程序员的高薪现象?网友:用命和头发换的钱都被人眼红!...
  2. 动态库与静态库优缺点比较(转 侵删)
  3. jdk1.8配置(自我速成)
  4. win7环境下创建超级隐藏账户
  5. Java工作笔记-apache-tomcat-8.5.49及geoserver-2.7.5搭建
  6. MQTT协议之发布订阅
  7. 关于 Flutter Layout(转载)
  8. SAP 产品部署方式及定价模型
  9. 《统计学习方法》代码全解析——第十二部分监督学习方法总结
  10. 用flashAS3.0做一个连线题
  11. 凹多边形三角剖分算法实现---基于Unity3D
  12. 手机按公式计算机,请问用手机上的自带计算器怎样进行度分秒的计算?
  13. 快排的单指针扫描和双指针扫描
  14. word审阅 去除word回车换行时出现的竖线的方法
  15. RAID5容量计算方式:单块磁盘容量*(n-1)
  16. vue组件中prop属性
  17. Android之动画(一)
  18. 【Matlab笔记】测绘工程专业正算、反算、度分秒转弧度函数
  19. WIN7双系统卸载与重装Ubuntu
  20. SAP中可替代物料按比例使用消耗分析测试

热门文章

  1. SIGGRAPH 2021丨OPPO与南大提出双流网络:仅输入单张图片,就能“看”出物体材质...
  2. 青岛外卖小哥帮崩溃程序员写代码,网友看完破防了:佩服又感动。
  3. 双11又来了,网友:比数学考试都难
  4. java 定义xml_java中web.xml定义详解
  5. python 单例模式 redis_python 单例模式实现多线程共享连接池
  6. FastDFS学习笔记
  7. java 操作redis
  8. Storm tick 功能
  9. 一种命令行解析的新思路(Go 语言描述)
  10. 玩转DB里的数据—阿里云DMS任务编排之简介和实操