查询所有张姓同学学号6_课堂笔记-多表查询

一、表的加法

两张表可以通过使用union子句来把两张表合并同类项。

查询所有张姓同学学号6_课堂笔记-多表查询_第1张图片

也可以通过在union后面加上all把重复的行。

查询所有张姓同学学号6_课堂笔记-多表查询_第2张图片

二、表的联结

在关系型数据库里面,每个实体有自己的一张表(table),所有属性都是这张表的字段(field),表与表之间根据关联字段"连接"(join)在一起。所以,表的连接是关系型数据库的核心问题。

表的连接分类:交叉连接(cross join)、内连接(inner join)、左连接(left join)、右连接(right join)、全连接(full join)

⑴交叉连接(cross join):也叫笛卡尔积,是将表中的每一行和另一表的每一行连接在一起。但是交叉连接在实际生活中比较少应用,这是因为结果行数太多了,需要花费大量的运算成本和设备支持,且实际的价值不高。

查询所有张姓同学学号6_课堂笔记-多表查询_第3张图片

⑵内连接(inner join):内连接是查找出同时存在于两张表中的数据,内连接的句式inner join on。

举例:查找出学生表和成绩表都有的学号和学号对应的姓名、成绩。

查询所有张姓同学学号6_课堂笔记-多表查询_第4张图片

⑶左连接(left join):左连接查询出会将左侧表中的数据和左侧表与右侧表匹配的数据取出来。左连接的句式是left join on。

举例:将学生表中的学号,姓名与右侧表通过一一对应。

查询所有张姓同学学号6_课堂笔记-多表查询_第5张图片

查询所有张姓同学学号6_课堂笔记-多表查询_第6张图片

但是学号为0002,性别为女,姓名为猴子的这名同学在表二没有对应信息。但是left join左连接并不会省略或忽视掉这名同学。所以这名同学信息照样显示,只不过她的课程号和成绩是null值。

查询所有张姓同学学号6_课堂笔记-多表查询_第7张图片

如果不希望看到两表共有的数据,可以在on a. 学号= b.学号后面加上where b. 学号= Null来查询出只有左侧表才具有的数据。

查询所有张姓同学学号6_课堂笔记-多表查询_第8张图片

⑷右连接(right join):右连接会将右侧表中的数据全部取出来。句式是right join on。

举例:将成绩表中的学号,课程号,成绩与左侧表通过一一对应。

查询所有张姓同学学号6_课堂笔记-多表查询_第9张图片

但是学号为0005的同学,在左侧学生表中并不存在相同学号的信息,所以查询出的结果是学号为0005的同学的学号,姓名都是Null值。

查询所有张姓同学学号6_课堂笔记-多表查询_第10张图片

⑸全连接:查询结果返回左表和右表的所有行,当某行和另一表中有匹配的时候,两个行进行合并。如果某一行和另一个表中没有匹配的时候,另一个表中所对应的值用空值来填充。

总结视图:

查询所有张姓同学学号6_课堂笔记-多表查询_第11张图片

连接查询的运行顺序是:

FROM 从哪张表中查询数据(连接)

WHERE 查询条件(运算符,模糊查询)

GROUP BY 分组(每个)

HAVING 对分组内容指定条件

SELECT 查询结果

ORDER BY 对查询结果排序

LIMIT 从查询结果中取出指定行;

三、连接查询应用案例

问题1:查询出所有学生的学号、姓名、选课数和总成绩

查询所有张姓同学学号6_课堂笔记-多表查询_第12张图片

问题2:查询平均成绩大于85的所有学生的学号、姓名和平均成绩

查询所有张姓同学学号6_课堂笔记-多表查询_第13张图片

问题3:查询学生的选课情况:学号,姓名,课程号,课程名称

查询所有张姓同学学号6_课堂笔记-多表查询_第14张图片

四、case表达式

case表达式: case when <判断表达式> then <表达式>

when <判断表达式> then <表达式>

when <判断表达式> then <表达式>

else <表达式>

end

举例1:查询成绩是优秀还是及格

查询所有张姓同学学号6_课堂笔记-多表查询_第15张图片

举例2:查询出每门课程的优秀人数和及格人数

查询所有张姓同学学号6_课堂笔记-多表查询_第16张图片

你可能感兴趣的:(查询所有张姓同学学号6)