数据库学习笔记之数据库查询(二)

数据库学习笔记之数据库查询(二)

这次主要总结一下多表连接查询~~
所谓连接查询,就是指一个查询同时涉及两个或两个以上的表,连接查询又包括内连接、外连接和交叉连接等查询用到的还是这个里面提到的那三个表

内连接
语法:

SELECT ...
FROM 表名 [INNER] JOIN
被连接表
ON <连接条件>

例子:
1、查询每个学生及其选课的详细信息

SELECT * FROM Student INNER JOIN SC ON Student.Sno = SC.Sno;

在这里插入图片描述
2、查询计算机系学生的修课情况,要求列出学生的学号、名字、所修课的课程号和成绩。

SELECT Student.Sno, Student.Sname,SC.Cno, SC.Cno, SC.Grade 
FROM Student JOIN SC 
ON Student.Sno = SC.Sno 
WHERE Student.Sdept = '计算机系';

在这里插入图片描述
3、统计每个系的学生的考试平均成绩

SELECT Student.Sdept, AVG(Grade) 平均成绩 
FROM Student 
JOIN SC 
ON Student.Sno = SC.Sno 
GROUP BY Sdept;

在这里插入图片描述
4、统计计算机系每门课程的选课人数、平均成绩、最高成绩和最低成绩。

SELECT Cno, COUNT(*) 选课人数, AVG(Grade) 平均成绩, MAX(Grade) 最高成绩, MIN(Grade) 最低成绩 
FROM Student 
JOIN SC 
ON Student.Sno = SC.Sno 
WHERE Student.Sdept = '计算机系' 
GROUP BY Cno;

在这里插入图片描述

自连接
说明
自连接为特殊的内连接,相互连接的表物理上为同一张表;必须为两个表取别名,使之在逻辑上成为两个表。
例:
1、查询与刘晨在同一个系学习的学生的姓名和所在的系

SELECT S2.Sname, S2.Sdept 
FROM Student S1 JOIN Student S2 
ON S1.Sdept = S2.Sdept 
WHERE S1.Sname = '刘晨' AND S2.Sname != '刘晨';

在这里插入图片描述
2、查询与“数据结构”学分相同的课程的课程名和学分

SELECT c1.Cname, c1.Ccredit 
FROM Course c1 JOIN Course c2 
ON c1.Ccredit = c2.Ccredit 
WHERE c2.Cname = '数据结构' ;

在这里插入图片描述
外连接
说明:
只限制一张表中的数据必须满足连接条件,而另一张表中数据可以不满足连接条件

语法:

SELECT ...
FROM1 
LEFT | RIGHT [OUTER] JOIN2 
ON <连接条件> 

例:
查询学生的修课情况,包括修了课程的学生和没有修课的学生
如果用普通的查询的话:

SELECT Student.Sno, Sname, Cno, Grade
 FROM Student, SC
 WHERE Student.Sno = SC.Sno; 

由于没有选课的学生在SC表中就没有记录,所以这种查询是查询不到没有修课的学生的记录,查询结果如图:
在这里插入图片描述
所以需要用到外连接查询:
左外连接查询:

SELECT Student.Sno, Sname, Cno, Grade 
FROM Student 
LEFT OUTER JOIN  SC 
ON Student.Sno = SC.Sno; 

右外连接查询:

SELECT Student.Sno, Sname, Cno, Grade 
FROM SC 
RIGHT OUTER JOIN  Student 
ON Student.Sno = SC.Sno; 

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值