SQL知识点小结(连接查询)

数据查询(连接查询)

等值与非等值连接查询

定义
等值连接:连接运算符为“=”

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

SELECT student.*, SC.*
FROM Student. SC
WHERE Student.Sno = SC.Sno; 

问题
连接结果显示冗余字段
对策

  • 自然连接
  • 采用在SELECT中去掉重复字段的方式实施
SELECT Student.Sno, Sname, Ssex, Sage, Sdept, Cno, Grade
FROM Student, SC
WHERE Student. Sno = SC.Sno;

(1)嵌套循环法
(2)排序合并法
(3)索引连接

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

SELECT Student.Sno, Sname
FROM Student, SC
WHERE Student.Sno=SC.Sno AND SC.Cno='2' AND SC.Grade>90;
  • 一条SQL语句可以同时完成选择和连接查询,这时WHERE 子句是由连接谓词和选择谓词组合成的复合条件。

自身连接

定义
一个表与其自己进行连接,是一种特殊的连接
特点

  • 需要给表起别名以示区别
  • 由于所有属性名都是同名属性,因此必须使用别名前缀

例3

SELECT FIRST.Cname, SECOND Cname
FROM Course FIRST, Course Second
WHERE FIRST.Cpno = SECOND. Cno

例3.1
例3.2

外连接

外连接与普通连接的区别

  • 普通连接操作只输出满足连接条件的元组
  • 外连接操作以指定表为连接主体,将主题表中不满足连接条件的元组一并输出
  • 左外连接:列出左边关系中所有的元组
  • 右外连接:列出右边关系中所有的元组

例4
改写例2

SELECT Student.Sno, Sname, Ssex, Sage, Sdept, Cno, Grade
FROM Student LEFT OUT JOIN SC ON (Student.Sno=SC.Sno)

有些商业系统的表达更简单:

SELECT Student.Sno, Sname, Ssex, Sage, Sdept, Cno, Grade
FROM Student, SC
WHERE Student.Sno(+)=SC.Sno; 

有(+)的一方表示连接主体

多表连接

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

SELECT Student.Sno, Sname, Cname, Grade
FROM Student, SC, Course /*多表连接*/
WHERE  Student.Sno = SC.Sno
		AND SC.Cno = Course.Cno;

与两表连接一样

猜你喜欢

转载自blog.csdn.net/m0_71290816/article/details/127048357