多表连接

来源:互联网 发布:cntv mac版 编辑:程序博客网 时间:2024/06/14 10:18

连接概念:

(1)FROM子句中的连接条件;

(2)WHERE子句中的连接条件和搜索条件;

(3)HAVING子句中的搜索条件。

(4)CROSS JOIN:结果只包含两个表中所有行的结合,指明两个表之间的笛卡尔操作。

(5)[INNER] JOIN:内连接,结果只包含满足条件的列。

(6)LEFT[OUTER] JOIN:左连接,结果包含满足条件的行及左侧表中的全部行。

(7)RIGHT [OUTER] JOIN:右连接,结果包含满足条件的行及右侧表中的全部行。

(8)FULL [OUTER] JOIN:完全连接,结果包含满足条件的行和两侧表中的全部行。

 

内连接:通过比较数据源表间共享列的值,从多个源表检索符合条件的行的操作。可以使用等号运算符连接,也可以连接两个不相等的列中的值。

例如:查询选修课程号为c1234的学生的学号、姓名和期末成绩。

SELECT student.studentno,sname,final

FROM student INNER JOIN score

          ON student.studentno=score.studentno

WHERE score.courseno='c1234'

 

外部连接:包括满足搜索条件的连接表中的所有行,甚至包括在其他连接表中没有匹配行的一个表中的行。对于当一个表中的行与其他表中的行不匹配时返回的结果集行,则解析为不存在相应的表的所有结果集列提供NULL值。

(1)左连接,是一种外部连接,其中包括JOIN子句中左侧表中的所有行。右表中的行与左表中的行不匹配时,将为来自右表的所有结果集列赋以NULL值。

例如:利用左外连接方式查询08级学生的学号、姓名、平时成绩和期末成绩。

SELECT student.studentno,sname,usually,final

FROM student  LEFT JOIN score

          ON student.studentno=score.studentno

WHERE substring(student.studentno,1,2)='08'

 

(2)右外连接,其中包含JOIN子句中最右侧表的所有行。如果右侧表中的行与左侧表中的行不匹配,则将结果集中来自左侧表的所有列分配NULL值。

例如:利用右连接方式查询教师的排课情况。

SELECT courseno,tname,teacher.teacherno,major

FROM teach_class RIGHT JOIN teacher

      ON teacher_class.teacherno=teacher.teacherno