MYSQL进阶查询

1. 聚合函数

1.1 COUNT()

用途:根据指定列 返回查询到的数据的数量
案例:返回user表中id查询到id字段的总数

注意

  1. 结果值为NULL的不计数

1.2 SUM()

用途:返回查询到的数据的 总和

案例:计算所有id字段的总和

注意

  1. 结果为NULL跳过,不参加计算

  2. 计算类型要为数值类型,否则没有意义

1.3 AVG()

用途 :返回查询到的数据的 平均值

案例:计算id列的平均数

注意

  1. 结果为NULL的结果不参加计算

  2. 计算类型要为数值类型,否则没有意义

1.4 MAX()

用途 :返回查询到的数据的最⼤值

案例:计算id值最大的结果

注意

  1. 计算类型要为数值类型,否则没有意义

1.5 MIN()

用途 :返回查询到的数据的最⼩值

案例:计算id列最小值

注意

  1. 结果为NULL的结果不参加计算

  2. 计算类型要为数值类型,否则没有意义

1.6 ROUND()

用途:用于对结果的精度的控制

案例:查询id最小值,结果保留两位小数

2. Group by 分组查询

定义: GROUP BY ⼦句的作⽤是通过⼀定的规则将⼀个数据集划分成若⼲个⼩的分组,然后针对若⼲个分组进⾏数据处理,⽐如使⽤聚合函数对分组进⾏统计
语法

sql 复制代码
SELECT {col_name | expr} ,... ,aggregate_function (aggregate_expr)
 FROM table_references
 GROUP BY {col_name | expr}, ... 
 [HAVING where_condition]

案例

  1. 要搜索的列必须在group by后
  1. 否则要在聚合函数中

注意

  1. col_name | expr:要查询的列或表达式,可以有多个,必须在 GROUP BY ⼦句中作为分组的依
  2. aggregate_function:聚合函数,⽐如COUNT(), SUM(), AVG(), MAX(), MIN()
  3. aggregate_expr:聚合函数传⼊的列或表达式,如果列或表达式不在 GOURP BY ⼦句中,必须
    包含中聚合函数中

2.1 having子句

用途:用于对group by 的结果进行分组和where用途类似,但group by 查询出来的表为临时表不是真实存在的,而where用于真实表的查询

案例:查询id结果的个数,通过accont,ammont字段分组

注意

  1. having可以和where同时用

3. 联合查询

定义:把多个查询的结果集 "拼接" 成一个统一的结果集返回

3.1 内连接

语法

sql 复制代码
1 select 字段 from 表1 别名1, 表2 别名2 where 连接条件 and 其他条件;

2 select 字段 from 表1 别名1 [inner] join 表2 别名2 on 连接条件 where 其他条件;

案例:查询每个班班级人数

  1. 第一种语法
  1. 第二种语法

3.2 外连接

3.2.1 左外连接

定义 :返回左表的所有记录和右表中匹配的记录。如果右表中没有匹配的记录,则结果集中对
应字段会显⽰为NULL
语法:

sql 复制代码
-- 左外连接,表1完全显⽰
select 字段名 from 表名1 left join 表名2 on 连接条件;

3.2.2 右外连接

定义 :右外连接:与左外连接相反,返回右表的所有记录和左表中匹配的记录。如果左表中没有匹

配的记录,则结果集中对应字段会显⽰为NULL

案例:查询哪个学生没有加入班级

语法:

sql 复制代码
-- 右外连接,表2完全显⽰
select 字段 from 表名1 right join 表名2 on 连接条件;

案例 :查询哪个班级没有学生

3.3 ⾃连接

定义:⾃连接是⾃⼰与⾃⼰取笛卡尔积,可以把⾏转化成列,在查询的时候可以使⽤where条件对
结果进⾏过滤,或者说实现⾏与⾏之间的⽐较
语法

sql 复制代码
1 select 字段 from 表1 别名1, 表1 别名2 where 连接条件 and 其他条件;

2 select 字段 from 表1 别名1 [inner] join 表1 别名2 on 连接条件 where 其他条件;

案例

  1. 第一种语法
  1. 第二种语法

注意:

  1. 在查询过程中同一张表要起不同的别名

3.4 子查询

定义 : ⼦查询是把⼀个SELECT语句的结果当做别⼀个SELECT语句的条件,也叫嵌套查询

语法

sql 复制代码
select * from table1 where col_name1 {= | IN} (
 select col_name1 from table2 where col_name2 {= | IN} [(
 select ...)
 ] ...
)

3.4.1 单行子查询

案例:查询不想毕业同学的同班同学

3.4.2 多行子查询

案例 :查询"MySQL"或"Java"课程的成绩信息

3.4.3 多列子查询

3.5 一个完整的查询流程

  1. 首先确定要查询的表有哪些

  2. 通过共同字段对表笛卡尔积的结果进行筛选

  3. 插入查询条件(where)

  4. 精简字段

4. 合并查询

定义:在实际应⽤中,为了合并多个select操作返回的结果

注意

  1. 两张表的结构必须相同,不然结果数据没有意义

4.1 UNION

案例: 查询student1表和student表中的不重复的所有数据

4.2 UNION ALL

案例:查询student1表和student表中的所有数据

相关推荐
yuweiade7 小时前
Redis服务安装自启动(Windows版)
数据库·windows·redis
执笔画情ora7 小时前
PG数据库管理-体系结构
数据库
tant1an7 小时前
Spring Boot 基础入门:从核心配置到 SSMP 整合实战
java·数据库·spring boot·sql·spring
泯仲8 小时前
从零起步学习MySQL 第十章:深入了解B+树及B+树的性能优势
b树·学习·mysql
hjxu20168 小时前
【 MySQL 速记5】插入
android·数据库·mysql
一个处女座的程序猿O(∩_∩)O9 小时前
性能调优实战:金仓数据库连接条件下推原理与案例拆解
数据库·oracle
数据知道9 小时前
MongoDB认证机制实战:详细讲述SCRAM-SHA与X.509证书认证配置
数据库·mongodb
雷工笔记9 小时前
KingFusion 关系库查询核心:SQLQuery 与 AsynSQLQuery 函数全解析
数据库
zopple9 小时前
Knife4j文档请求异常(基于SpringBoot3,查找原因并解决)
java·服务器·数据库
执笔为剑9 小时前
docker环境升级数据库
数据库·docker·容器