本文整理自网络,侵删。
目录
- 1. 插入被查询的结果
- 2. 聚合查询
- 2.1 介绍
- 2.2 聚合函数
- 2.3 group by 子句
- 2.4 having
- 3. 联合查询
- 3.1 介绍
- 3.2 内连接
- 3.3 外连接
- 3.4 自连接
- 3.5 子查询
- 3.6 合并查询
1. 插入被查询的结果
语法:
insert into 要插入的表 [(列1, ..., 列n)] select {* | (列1, ..., 列n)}from 要查询的表
上述语句可以将要查询的表的某些列插入到新的表中对应的某些列
2. 聚合查询
2.1 介绍
聚合查询:是指对一个数据表中某个字段的数据进行部分或者全部统计查询的一种方式(即是在行的维度进行合并的查询)。比如所有全部书的平均价格或者是书籍的总数量等等,在这些时候就会使用到聚合查询这种方法。
2.2 聚合函数
聚合查询可以使用以下常用聚合函数,这些聚合函数就相当于 SQL 提供的“库函数”
补充:
- 当只针对某列进行行数的查询时,如果某行的值为 null,则查询结果不计算这行
- 对数据进行求和时,数据类型必须为数字,字符串和日期都无法求和
- 如果语法没有错误,但是出现运行时错误则会报出警告 warnings,此时可以通过 show warnings SQL 语句查看警告信息
接下来以表名为 exam_result
,具体数据如下的表,进行示例展示
id | name | chinese | math | english |
---|---|---|---|---|
1 | 唐三藏 | 67.0 | 98.0 | 56.0 |
2 | 孙悟空 | 87.5 | 78.0 | 77.0 |
3 | 猪悟能 | 88.0 | 98.5 | 90.0 |
4 | 曹孟德 | 82.0 | 84.0 | 67.0 |
5 | 刘玄德 | 55.5 | 85.0 | 45.0 |
6 | 孙权 | 70.0 | 73.0 | 78.5 |
7 | 宋公明 | null | null | null |
2.3 group by 子句
使用前面的聚合函数,实际上是把该表中的所有行结合起来。但还可以使用 group by
来进行分组聚合(在 group by 后面加上指定列名,那么该列中值相同的就将分成一组)
接下来我们将对表名为 emp,数据如下的表进行示例展示
id | name | role | salary |
---|---|---|---|
1 | 张三 | 开发 | 10000 |
2 | 李四 | 开发 | 11000 |
3 | 王五 | 测试 | 9000 |
4 | 赵六 | 测试 | 12000 |
5 | 田七 | 销售 | 7000 |
6 | 魔王 | 老板 | 50000 |
2.4 having
如果使用 group by
子句进行分组以后,需要对分组结果再进行条件过滤,这时就不能使用 where
语句了,而是使用 having 语句
注意:
where
语句是在分组之前进行筛选having
语句是在分组之后进行筛选where
语句和having
语句可以同时使用
示例1: 查询薪资大于10000的岗位
3. 联合查询
3.1 介绍
联合查询:是可合并多个相似的选择查询的结果集。 也就是进行多表查询,其核心思想是使用了笛卡尔积
笛卡尔积思想:
使用笛卡尔积的思想,其实就是把两个表的结果进行一个排列组合,接下来我们将两个表 A、B 通过笛卡尔积的思想得到一个新的表 C
学生表 A:
学号 | 姓名 | 班级id |
---|---|---|
1 | 张三 | 2001 |
2 | 李四 | 2001 |
3 | 王五 | 2002 |
班级表 B:
班级id | 班级名 |
---|---|
2001 | 高二(1)班 |
2002 | 高二(2)班 |
新表 C:
学号 | 姓名 | 班级id | 班级id | 班级名 |
---|---|---|---|---|
1 | 张三 | 2001 | 2001 | 高二(1)班 |
1 | 张三 | 2001 | 2002 | 高二(2)班 |
2 | 李四 | 2001 | 2001 | 高二(1)班 |
2 | 李四 | 2001 | 2002 | 高二(2)班 |
3 | 王五 | 2002 | 2001 | 高二(1)班 |
3 | 王五 | 2002 | 2002 | 高二(2)班 |
补充:
- 笛卡尔积得到的结果任然是一个表
- 该表的列数,是两张表的列数之和
- 该表的行数,是两张表的行数之积
通过新得到的 C 表,我们就可以将 A、B 两张表联系起来,而联系的纽带在上面的示例中就是班级id。到此时,虽然将两个表联系起来了,但是不是新表中的每条数据都是合理的,例如第2行的信息其实就是不正确的。因此将两表联系起来后,还需要加上一些条件的限制,如 A 和 B 表的班级id应该相同,此时就可以得到一个数据更合理的表 D
新表 D:
学号 | 姓名 | 班级id | 班级id | 班级名 |
---|---|---|---|---|
1 | 张三 | 2001 | 2001 | 高二(1)班 |
2 | 李四 | 2001 | 2001 | 高二(1)班 |
3 | 王五 | 2002 | 2001 | 高二(2)班 |
此时我们就可以进行一个多表查询
注意:
联合查询由于使用了笛卡尔积,那么新表的行数就是所有表联合的乘积。因此使用联合查询结果的数据可能很大,要谨慎使用
相关阅读 >>
更多相关阅读请进入《mysql》频道 >>

数据库系统概念 第6版
机械工业出版社
本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。
转载请注明出处:木庄网络博客 » MySQL数据库聚合查询和联合查询操作
相关推荐
评论
管理员已关闭评论功能...
- 欢迎访问木庄网络博客
- 可复制:代码框内的文字。
- 方法:Ctrl+C。