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

相关推荐
Tansmjs3 小时前
使用Python自动收发邮件
jvm·数据库·python
m0_561359673 小时前
用Python监控系统日志并发送警报
jvm·数据库·python
Dxy12393102163 小时前
MySQL INSERT ... ON DUPLICATE KEY UPDATE 与非主键唯一字段
数据库·mysql
zhousenshan3 小时前
springboot事务管理几种方式
数据库
布局呆星4 小时前
SQLite数据库的介绍与使用
数据库·python
2401_838472514 小时前
用Python和Twilio构建短信通知系统
jvm·数据库·python
石头wang4 小时前
oracle jdbc 依赖以及对dbeaver的性能影响,如何选择oracle驱动, oracle jdbc 驱动
数据库·oracle
weixin_452159554 小时前
如何从Python初学者进阶为专家?
jvm·数据库·python
2301_790300964 小时前
用Python读取和处理NASA公开API数据
jvm·数据库·python