MYSQL数据查询 - DISTINCT 、 GROUP BY 、ORDER BY 、集合函数

数据查询

  • 简单的查询语句
  • DISTINCT
  • GROUP BY [HAVING 条件表达式]
  • ORDER BY
  • 集合函数 + GROUP BY
  • WITH ROLLUP
vbnet 复制代码
SELECT 字段名
FROM 表名
WHERE 条件表达式
GROUP BY 字段名
ORDER BY 字段名
...

IN & OR

IN 执行的速度要快于OR

shell 复制代码
SELECT s_id, f_name, f_price FROM fruits WHERE s_id = 101 OR s_id = 102;

SELECT s_id, f_name, f_price FROM fruits WHERE s_id IN(101, 102);

AND的优先级大于OR的优先级,所以在执行查询的条件时,会先执行AND再执行OR;

DISTINCT - 查询无重复的结果

shell 复制代码
SELECT DISTINCT s_id
FROM fruits;

ORDER BY - 查询结果排序

单列排序:

shell 复制代码
SELECT f_name
FROM fruits
ORDER BY f_name;

多列排序:先按照f_name排序,再按照f_price排序;

shell 复制代码
SELECT f_name, f_price
FROM fruits
ORDER BY f_name, f_price;

降序排序:DESC | 升序排序:ASC,默认是升序排序。

shell 复制代码
SELECT f_name, f_price
FROM fruits
ORDER BY f_price DESC;

GROUP BY - 分组查询

GROUP BY通常和集合函数一起使用,比如 MAX()/MIN()/COUNT()/SUM()/AVG()

  • [GROPU BY 字段] [HAVING <条件表达式>]: 字段值为分组时所依据的列名称;HAVING<条件表达式>指定满足表达式限定条件的结果被显示。
shell 复制代码
SELECT s_id, COUNT(*)
FROM fruits
GROUP BY s_id;
shell 复制代码
SELECT s_id, GROUP_CONCAT(f_name) AS Names
FROM fruits
GROUP BY s_id;
  • HAVING过滤条件:
shell 复制代码
SELECT s_id, GROUP_CONCAT(f_name) AS Names
FROM fruits
GROUP BY s_id
HAVING COUNT(f_name) > 1;

HAVING 和 WHERE都是用来过滤的,区别在于:HAVING在数据分组之后过滤来选择分组,而WHERE在分组之前过滤选择记录。

WITH ROLLUP

在分组查询结果最后加上一行所有结果的总和

sql 复制代码
SELECT s_id, COUNT(*)
FROM fruits
GROUP BY s_id WITH ROLLUP;
  • 多字段分组

GROUP BY后面跟需要分组的字段,MYSQL根据多字段的值进行层次分组,分组层次从左到右,即先按第1个字段分组,然后在第1个字段值相同的记录中再根据第2个字段的值进行分组,以此类推。

shell 复制代码
SELECT *
FROM fruits
GROUP BY s_id, f_name;

使用ROLLUP时,不能同时使用ORDER BY子句进行结果排序,即ROLLUP和ORDER BY是互斥的。

  • LIMIT [位置偏移量,] 行数:限制查询结果的数量,偏移量从0开始,可选。行数代表取查询结果多少行;

MYSQL 8.0可以使用 LIMIT 4 OFFSET 3,意思取从第5条记录开始的3行数据。等同于LIMIT 4,3;

集合函数

  • AVG(): 返回某列的平均值
  • COUNT(): 返回某列的行数
  • MAX(): 返回某列的最大值
  • MIN(): 返回某列的最小值
  • SUM(): 返回某列的和

COUNT

  • COUNT(*): 计算表中总的行数
  • COUNT(字段名): 计算指定列下总的函数,计算时忽略空值

COUNT(f_id)计算f_id列的总函数,但是此时有一个GROUP BY,GROUP BY按照o_num分组,所以COUNT(f_id)计算的是分组之后,每个分组中f_id列的总数;

shell 复制代码
SELECT o_num, COUNT(f_id)
FROM orderitems
GROUP BY o_num;

类似于COUNT的使用,这些集合函数在与GROUP BY组合使用的时候,计算的是分组之后的每个分组的最值、总数、平均值、和值

相关推荐
小萌新上大分7 小时前
mysql主从复制搭建
mysql·mysql主从复制·mysql主从复制配置·mysql主从复制的搭建·mysql主从复制的原理·mysql安装入门
华仔啊7 小时前
这 10 个 MySQL 高级用法,让你的代码又快又好看
后端·mysql
Knight_AL9 小时前
MySQL 中 UPDATE 语句的执行过程全解析
数据库·mysql
梁萌10 小时前
ShardingSphere分库分表实战
数据库·mysql·实战·shardingsphere·分库分表
川石课堂软件测试10 小时前
Mysql中触发器使用详详详详详解~
数据库·redis·功能测试·mysql·oracle·单元测试·自动化
程序员游老板11 小时前
基于SpringBoot3_vue3_MybatisPlus_Mysql_Maven的社区养老系统/养老院管理系统
java·spring boot·mysql·毕业设计·软件工程·信息与通信·毕设
soft200152513 小时前
从一次增删改操作开始:彻底理解 MySQL Buffer Pool 的地位与作用
数据库·mysql
晨曦54321013 小时前
MySQL与Python数学函数大比拼
python·mysql
q_191328469513 小时前
基于SpringBoot2+Vue2的行业知识答题考试系统
java·vue.js·spring boot·mysql·毕业设计·计算机毕业设计·演示文稿
hgz071014 小时前
数据库事务
数据库·mysql