1. 聚合函数
1.1 COUNT()
用途:根据指定列 返回查询到的数据的数量
案例:返回user表中id查询到id字段的总数

注意:
- 结果值为NULL的不计数
1.2 SUM()
用途:返回查询到的数据的 总和
案例:计算所有id字段的总和

注意:
-
结果为NULL跳过,不参加计算
-
计算类型要为数值类型,否则没有意义
1.3 AVG()
用途 :返回查询到的数据的 平均值
案例:计算id列的平均数

注意:
-
结果为NULL的结果不参加计算
-
计算类型要为数值类型,否则没有意义
1.4 MAX()
用途 :返回查询到的数据的最⼤值
案例:计算id值最大的结果

注意:
- 计算类型要为数值类型,否则没有意义
1.5 MIN()
用途 :返回查询到的数据的最⼩值
案例:计算id列最小值

注意:
-
结果为NULL的结果不参加计算
-
计算类型要为数值类型,否则没有意义
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]
案例:
- 要搜索的列必须在group by后

- 否则要在聚合函数中

注意:
- col_name | expr:要查询的列或表达式,可以有多个,必须在 GROUP BY ⼦句中作为分组的依
据 - aggregate_function:聚合函数,⽐如COUNT(), SUM(), AVG(), MAX(), MIN()
- aggregate_expr:聚合函数传⼊的列或表达式,如果列或表达式不在 GOURP BY ⼦句中,必须
包含中聚合函数中
2.1 having子句
用途:用于对group by 的结果进行分组和where用途类似,但group by 查询出来的表为临时表不是真实存在的,而where用于真实表的查询
案例:查询id结果的个数,通过accont,ammont字段分组

注意:
- 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 其他条件;
案例:查询每个班班级人数
- 第一种语法

- 第二种语法

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 其他条件;
案例:
- 第一种语法

- 第二种语法

注意:
- 在查询过程中同一张表要起不同的别名
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 一个完整的查询流程
-
首先确定要查询的表有哪些
-
通过共同字段对表笛卡尔积的结果进行筛选
-
插入查询条件(where)
-
精简字段
4. 合并查询
定义:在实际应⽤中,为了合并多个select操作返回的结果
注意:
- 两张表的结构必须相同,不然结果数据没有意义
4.1 UNION
案例: 查询student1表和student表中的不重复的所有数据

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