SQL连接查询

等值连接

查询每个学生及其选修课程的情况

SELECT student.*, sc.*
FROM student, sc
WHERE student.`Sno`=sc.`Sno`;

image-20220217095109053

对上例进行自然连接,消除重复Sno列

SELECT student.*, sc.`Cno`, sc.`Grade`
FROM student, sc
WHERE student.`Sno`=sc.`Sno`;

image-20220217095047690

自身连接

需要给表起别名以示区别

查询每一门课的间接先修课(即先修课的先修课)

SELECT first.`Cname`, second.`Cname` CproName 
FROM course FIRST, course SECOND
WHERE first.`Cpno`=second.`Cno`;

image-20220217095432590

外连接

外连接操作以指定表为连接主体,将主体表中不满足连接条件的 元组一并输出

使用外连接查询每个学生及其选修课程的情况

SELECT student.*, sc.`Cno`, sc.`Grade`
FROM student LEFT OUTER JOIN sc ON student.`Sno`=sc.`Sno`;

image-20220217100010141

复合条件连接

WHERE 子句中含多个连接条件

查询选修 2 号课程且成绩在 90 分以上的所有学生的学号和姓名

SELECT student.`Sno`, student.`Sname`
FROM student, sc
WHERE student.`Sno`=sc.`Sno` AND sc.`Cno`='2' AND sc.`Grade`>=90;

image-20220217131700449

查询每个学生的学号、姓名、选修的课程名及成 绩

SELECT student.`Sno`, student.`Sname`, course.`Cname`, sc.`Grade`
FROM student, course, sc
WHERE student.`Sno`=sc.`Sno` AND sc.`Cno`=course.`Cno`;

image-20220217131936125

posted @ 2022-02-17 13:21  dctwan  阅读(107)  评论(0编辑  收藏  举报