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

相关推荐
FYKJ_201031 分钟前
django药饮个性化推荐系统54839-计算机课程设计、毕业设计
vue.js·spring boot·python·mysql·typescript·spark·django
IT枫斗者枫哥6 小时前
MyBatis一对多分页:LIMIT 20,为什么凑不齐20个订单?
java·数据库
Flynt6 小时前
"MySQL搜不动就上ES"?我先在50万行数据上测了它自带的ngram全文索引
mysql·elasticsearch·搜索引擎
Y006 小时前
PostgreSQL 的锁:为什么你的 ALTER TABLE 会卡住,以及怎么查
数据库·postgresql
imDwAaY6 小时前
Redo Log 和 Binlog 为什么需要两阶段提交?
后端·mysql
灰原喜欢柯南6 小时前
OceanBase 运维管理知识点——OCP 监控、诊断与变更控制
数据库·oceanbase
码农-0046 小时前
Springboot 集成 Ehcache操作数据库显示SQL语句设置
数据库·spring boot·sql
仍然.6 小时前
Redis---事务
数据库·redis
oradh6 小时前
Oracle 执行计划的阅读方法(二叉树结构来理解和阅读)
数据库·oracle·执行计划的阅读方法
SelectDB6 小时前
Doris 向量检索上线踩坑记录:七个排查现场与可直接复制的命令
大数据·数据库·数据分析