连接概念:
(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