数据表
t_teacher表
id name
------------
1 teacher1
2 teacher2
3 teacher3
4 teacher4
t_course表
id name tid
----------------
1 course1 2
2 course2 1
3 course3 2
4 course4 3
5 course5 5
内联接
包括相等联接和自然联接。内联接使用比较运算符根据每个表共有的列的值匹配两个表中的行。
SELECT * FROM t_teacher INNER JOIN t_course ON t_teacher.id = t_course.tid;
执行结果:
id name id1 name1 tid
--------------------------------
1 teacher1 2 course2 1
2 teacher2 1 course1 2
2 teacher2 3 course3 2
3 teacher3 4 course4 3
外联接
外联接可以是左向外联接、右向外联接或完整外部联接。在 FROM子句中指定外联接时,可以由下列几组关键字中的一组指定:
1、LEFT JOIN或LEFT OUTER JOIN
左向外联接的结果集包括 LEFT OUTER子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值。
SELECT * FROM t_teacher LEFT OUTER JOIN t_course ON t_teacher.id = t_course.tid;
执行结果:
id name id1 name1 tid
--------------------------------
2 teacher2 1 course1 2
1 teacher1 2 course2 1
2 teacher2 3 course3 2
3 teacher3 4 course4 3
4 teacher4 null null
2、RIGHT JOIN或RIGHT OUTER JOIN
右向外联接是左向外联接的反向联接。将返回右表的所有行。如果右表的某行在左表中没有匹配行,则将为左表返回空值。
SELECT * FROM t_teacher RIGHT OUTER JOIN t_course ON t_teacher.id = t_course.tid;
执行结果:
id name id1 name1 tid
--------------------------------
1 teacher1 2 course2 1
2 teacher2 1 course1 2
2 teacher2 3 course3 2
3 teacher3 4 course4 3
null null 5 course5 5
3、FULL JOIN或FULL OUTER JOIN
完整外部联接返回左表和右表中的所有行。当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值。如果表之间有匹配行,则整个结果集行包含基表的数据值。
SELECT * FROM t_teacher FULL OUTER JOIN t_course ON t_teacher.id = t_course.tid;
执行结果:
id name id1 name1 tid
--------------------------------
2 teacher2 1 course1 2
1 teacher1 2 course2 1
2 teacher2 3 course3 2
3 teacher3 4 course4 3
4 teacher4 null null
null null 5 course5 5
交叉联接
交叉联接返回左表中的所有行,左表中的每一行与右表中的所有行组合。交叉联接也称作笛卡尔积。
SELECT * FROM t_teacher CROSS JOIN t_course;
执行结果:
id name id1 name1 tid
--------------------------------
1 teacher1 1 course1 2
2 teacher2 1 course1 2
3 teacher3 1 course1 2
4 teacher4 1 course1 2
1 teacher1 2 course2 1
2 teacher2 2 course2 1
3 teacher3 2 course2 1
4 teacher4 2 course2 1
1 teacher1 3 course3 2
2 teacher2 3 course3 2
3 teacher3 3 course3 2
4 teacher4 3 course3 2
1 teacher1 4 course4 3
2 teacher2 4 course4 3
3 teacher3 4 course4 3
4 teacher4 4 course4 3
1 teacher1 5 course5 5
2 teacher2 5 course5 5
3 teacher3 5 course5 5
4 teacher4 5 course5 5