MySQL中查询的进阶之group by子句,联合查询和内连接,外连接

1.group by子句

把得到的查询结果集按一定规则进行分组
在这里插入图片描述
在这里插入图片描述
a》查询每个岗位对应平均工资,最高工资,最低工资
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

group by也可以结合一些条件对数据进一步筛选,不是使用where,而是having.
在这里插入图片描述

b》查找所有平均工资高于250的岗位和平均工资。

2.联合查询/多表查询

机制:笛卡尔积

就是多张表中的每个数据分别进行排列组合之后的结果。

多表查询的过程,就是先计算出多个表的笛卡尔积,在针对这个结果基于一些条件去筛选。

如果针对两个大表进行查询,笛卡尔积的计算开销会很大,最终查找效率也会变低,所以不应该在生产环境对大表进行联合查询。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
a》查找名字为许仙的同学的所有成绩。
1>先求出两表笛卡尔积
在这里插入图片描述
2>学生id必须相对应
在这里插入图片描述
3>找出名字为许仙的同学
在这里插入图片描述
多表查询另一种写法,join on
在这里插入图片描述
进行多表查询时,写列时要写为[表名].[列名]

b》查找所有同学的总成绩,以及该同学的基本信息。
1>求出两表笛卡尔积

2>学生id必须相对应

3>按id进行group by,求每个同学总成绩
在这里插入图片描述
c》查询所有同学的每一科成绩,和同学相关信息
显示同学姓名,科目名称,对应成绩
1>求出三表的笛卡尔积

2>学生id,课程id 都要相对应
在这里插入图片描述
3>保留自己关心的列
在这里插入图片描述

内连接:
在两个表进行笛卡尔积后的结果,一定是在两个表中都出现过的记录

外连接:
1>如果有些数据在表1中存在,在表2中不存在,能查到
在表1中不存在,在表2中存在,查不到,这种称为左连接。
2>如果有些数据在表1中存在,在表2中不存在,查不到
在表1中不存在,在表2中存在,能查到,这种称为右连接。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章