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表中的所有数据

相关推荐
Lxinccode6 分钟前
AI编程(3) / claude code[3] : 更新apiKey
java·数据库·ai编程·claude code
数据知道10 分钟前
MongoDB数据类型全景:String、Number、Date、Boolean 及特殊的 null 类型处理
数据库·mongodb
醉颜凉1 小时前
PostgreSQL 模式(SCHEMA)详解:数据库对象的命名空间管理
数据库·postgresql
AI题库1 小时前
PostgreSQL 18 默认密码修改全指南:从安装到安全加固
数据库·安全·postgresql
七夜zippoe1 小时前
告别SQL恐惧症:我用飞算JavaAI的SQL Chat,把数据库变成了“聊天室”
java·数据库·sql·ai·javaai
半桔1 小时前
【MySQL数据库】SQL 查询封神之路:步步拆解核心操作,手把手帮你解锁高阶玩法
linux·数据库·sql·mysql·adb·oracle
猫头虎1 小时前
[精选] 2025最新MySQL和PostgreSQL区别、迁移、安全、适用场景全解析
运维·数据库·mysql·安全·postgresql·云原生·容器
No8g攻城狮1 小时前
【SQL】MySQL中空值处理COALESCE函数
数据库·sql·mysql·postgresql·sqlserver
小李独爱秋2 小时前
模拟面试:说一下数据库主从不同步的原因。
运维·服务器·mysql·面试·职场和发展·性能优化
keyborad pianist3 小时前
MySQL篇 Day1
数据库·mysql