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

1.group by子句

把得到的查询结果集按一定规则进行分组
MySQL中查询的进阶之group by子句,联合查询和内连接,外连接_第1张图片
MySQL中查询的进阶之group by子句,联合查询和内连接,外连接_第2张图片
a》查询每个岗位对应平均工资,最高工资,最低工资
MySQL中查询的进阶之group by子句,联合查询和内连接,外连接_第3张图片
MySQL中查询的进阶之group by子句,联合查询和内连接,外连接_第4张图片
MySQL中查询的进阶之group by子句,联合查询和内连接,外连接_第5张图片

group by也可以结合一些条件对数据进一步筛选,不是使用where,而是having.
MySQL中查询的进阶之group by子句,联合查询和内连接,外连接_第6张图片

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

2.联合查询/多表查询

机制:笛卡尔积

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

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

如果针对两个大表进行查询,笛卡尔积的计算开销会很大,最终查找效率也会变低,所以不应该在生产环境对大表进行联合查询。
MySQL中查询的进阶之group by子句,联合查询和内连接,外连接_第7张图片
MySQL中查询的进阶之group by子句,联合查询和内连接,外连接_第8张图片

MySQL中查询的进阶之group by子句,联合查询和内连接,外连接_第9张图片
a》查找名字为许仙的同学的所有成绩。
1>先求出两表笛卡尔积
MySQL中查询的进阶之group by子句,联合查询和内连接,外连接_第10张图片
2>学生id必须相对应
MySQL中查询的进阶之group by子句,联合查询和内连接,外连接_第11张图片
3>找出名字为许仙的同学
MySQL中查询的进阶之group by子句,联合查询和内连接,外连接_第12张图片
多表查询另一种写法,join on
MySQL中查询的进阶之group by子句,联合查询和内连接,外连接_第13张图片
进行多表查询时,写列时要写为[表名].[列名]

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

2>学生id必须相对应

3>按id进行group by,求每个同学总成绩
MySQL中查询的进阶之group by子句,联合查询和内连接,外连接_第14张图片
c》查询所有同学的每一科成绩,和同学相关信息
显示同学姓名,科目名称,对应成绩
1>求出三表的笛卡尔积

2>学生id,课程id 都要相对应
MySQL中查询的进阶之group by子句,联合查询和内连接,外连接_第15张图片
3>保留自己关心的列
MySQL中查询的进阶之group by子句,联合查询和内连接,外连接_第16张图片

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

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

你可能感兴趣的:(CRUD,MySQL,内外连接)