连接查询
内连接:
1. 表与表用逗号“,”分开
2. 增加连接条件(属性相等):student.sno = sc.sno
3. 公共属性一定要加前缀
1. 等值与非等值连接查询
1)连接查询的where子句中用来连接两个表的条件称为连接条件或连接谓词
格式:[<表名1>.]<列名1> <比较运算符> [<表名2>.]<列名2>
比较运算符主要有:= > < >= <= !=
连接运算符为 = 时,称为等值连接,使用其他运算符称为非等值连接
查询每个学生及其选修课程的情况
/*这两个表之间的联系是通过公共属性sno实现的*/
Select student.*, sc.*
From student, sc
Where student.sno = sc.sno
2)自然连接:若在等值连接中把目标列中重复的属性列去掉则为自然连接
对上例用自然连接完成
Select student.sno, sname, sex, sage, sdept, cno, grade
From student, sc
Where student.sno = sc.sno
3)一条SQL语句可以同时完成选择和连接查询,这时WHERE子句是由连接谓词和选择谓词组成的复合条件。
查询选修2号课程且成绩在90分以上的所有学生的学号和姓名
Select student.sno, sname
From student, sc
Where student.sno = sc.sno and sc.cno = ’2’ and sc.grade>90
2. 自身连接
一个表与其自己进行连接,称为表的自身连接
查询每一门课的间接先修课(即先修课的先修课)
Select first.cno, second.cpno
From course first, course second
Where first.cpno = second.cno
3. 外连接:
1. 外连接的表是有顺序的
2. 外连接条件不是全局条件
3. 当行一个不能少时,使用外连接
有时想以student表为主体列出每个学生的基本情况及其选课情况。
若某个学生没有选课,仍把student的悬浮元组保存在结果关系中,而在sc表的属性上填空值NULL,这时就需要使用外连接。
外连接:把悬浮元组也保存在结果关系中,而在其他属性上填空值NULL
查询每个学生及其选修课程情况
Select student.sno, sname, sex, sage, sdept, cno, grade
From student LEFT OUTER JOIN sc ON ( student.sno = sc.sno )
/*也可以用USING来去掉结果中的重复值:From student LEFT OUTER JOIN sc USING ( sno )*/
左外连接:T1 LEFT OUTER JOIN T2 ON T1.A = T2.A
右外连接:T1 RIGHT OUTER JOIN T2 ON T1.A = T2.A
全外连接:T1 FULL OUTER JOIN T2 ON T1.A = T2.A
4. 多表连接
两个以上的表进行连接
查询每个学生的学号、姓名、选修课程名及成绩
Select student.sno, sname, cname, grade
From student, sc, course
Where student.sno = sc.sno and sc.cno = course.cno