SQL语句基础-多表连接查询

连接查询介绍

连接查询包括内连接,左外连接,右外连接,全外连接和交叉连接,后面连个很少使用,在此只介绍内连接和左右外连接。
以下表作为示例进行单表查询:
Stduent

Sno Sname Ssex Sbirthday Sdept Memo

Course

Cno Cname PreCno Credit Semester

SC

Sno Cno Grade

具体数据就不予展示了,只要根据表头就可以进行查询了。

内连接

如果两个表的相关字段满足条件,则从这两个表中提取满足连接条件的数据并组合成新的记录,舍弃掉不满足条件的组
语法格式FROM 表1 JOIN 表2 ON <连接条件>
<连接条件>的一般格式:表名1.列名1<比较运算符>表名2.列名2
注意连接条件中的用于进行比较的列必须是相同的,即必须是语义相同的列。
例:

//查看选修了数据库的学生的学号和姓名
SELECT * FROM Student INNER JOIN SC
ON Student.Sno=SC.Sno;
//统计计算机系学生中每门课程的选课人数,平均分,最高分和最低分
SELECT Cno,COUNT(*) 选课人数,AVG(Grade) 平均分,
MAX(Grade) 最高分,MIN(Grade) 最低分,
FROM Student S JOIN SC ON S.Sno=SC.Sno

自连接
自连接是一种特殊的内连接,它是指物理上为同一张表,但是逻辑上将其看成两张表进行连接,注意内连接时必须给表起别名
语法格式:
FROM 表1 AS T1 JOIN 表1 AS T2 ON T1列名=T2.列名
例如:

//查询与“钟文辉”同学同在一个系的学生的姓名和所在系
SELECT S2,Sname,S1,Sdept
FROM Student S1 JOIN Student S2 ON S2.Sdept=S1.Sdept
WHERE S1.Sname='钟文辉' AND S2.Sname!='钟文辉'

左外连接,右外连接

在连接时,保留不满足连接条件的列,组合表的对应位置用NULL代替,左外是保留左表,右外是保留右表。
语法格式
FROM 表1 LEFT|RIGHT [OUTER] JOIN 表2 ON <连接条件>
例如:

//查询没有人选的课程的课程名
SELECT Cname,Sno FROM Course C LEFT 
JOIN SC ON C,Cno=SC.Cno
WHERESC.Cno IS NULL;

猜你喜欢

转载自blog.csdn.net/livovil/article/details/93650401