1.32.1 内连接
功能描述
仅将两个表中满足连接条件的行组合起来作为结果集。
语法格式
SELECT attr_expr_list FROM table_reference
{JOIN | INNER JOIN} table_reference ON join_condition;
关键字
JOIN/INNER JOIN:只显示参与连接的表中满足JOIN条件的记录。
注意事项
● 所要进行JOIN连接的表必须是已经存在的表,否则会出错。
● 在一次查询中可以连接两个以上的表。
示例
通过将student_info与course_info两张表中的课程编号匹配建立JOIN连接,来查看学 生姓名及所选课程名称。
SELECT student_info.name, course_info.courseName FROM student_info JOIN course_info ON (student_info.courseId = course_info.courseId);
1.32.2 左外连接
功能描述
根据左表的记录去匹配右表,返回所有左表记录,没有匹配值的记录的返回NULL。
语法格式
SELECT attr_expr_list FROM table_reference
LEFT OUTER JOIN table_reference ON join_condition;
关键字
LEFT OUTER JOIN:返回左表的所有记录,没有匹配值的记录将返回NULL。
注意事项
所要进行JOIN连接的表必须是已经存在的表,否则会出错。
示例
左外连接时利用student_info表中的courseId与course_info中的courseId进行匹配,返 回已经选课的学生姓名及所选的课程名称,没有匹配值的右表记录将返回NULL。
SELECT student_info.name, course_info.courseName FROM student_info
LEFT OUTER JOIN course_info ON (student_info.courseId = course_info.courseId);
1.32.3 右外连接
功能描述
根据右表的记录去匹配左表,返回所有右表记录,没有匹配值的记录返回NULL。
语法格式
SELECT attr_expr_list FROM table_reference
RIGHT OUTER JOIN table_reference ON join_condition;
关键字
RIGHT OUTER JOIN:返回右表的所有记录,没有匹配值的记录将返回NULL。
注意事项
所要进行JOIN连接的表必须是已经存在的表,否则会出错。
示例
右外连接和左外连接相似,但是会将右边表(这里的course_info)中的所有记录返回,
没有匹配值的左表记录将返回NULL。
SELECT student_info.name, course_info.courseName FROM student_info
RIGHT OUTER JOIN course_info ON (student_info.courseId = course_info.courseId);
1.32.4 全外连接
功能描述
根据左表与右表的所有记录进行匹配,没有匹配值的记录返回NULL。
语法格式
SELECT attr_expr_list FROM table_reference
FULL OUTER JOIN table_reference ON join_condition;
关键字
FULL OUTER JOIN:根据左表与右表的所有记录进行匹配,没有匹配值的记录返回 NULL。
注意事项
所要进行JOIN连接的表必须是已经存在的表,否则会出错。
示例
利用全外连接可以将两张表中的所有记录返回,没有匹配值的左表及右表记录将返回 NULL。
SELECT student_info.name, course_info.courseName FROM student_info
FULL OUTER JOIN course_info ON (student_info.courseId = course_info.courseId);
1.32.5 隐式连接
功能描述
与内连接功能相同,返回两表中满足WHERE条件的结果集,但不用JOIN显示指定连接 条件。
语法格式
SELECT table_reference.col_name, table_reference.col_name, ... FROM table_reference, table_reference WHERE table_reference.col_name = table_reference.col_name;
关键字
WHERE:隐式连接利用WHERE条件实现类似JOIN...ON...的连接,返回匹配的记录。
语法格式中仅给出等式条件下的WHERE条件过滤,同时也支持不等式WHERE条件过
滤。注意事项
● 所要进行JOIN连接的表必须是已经存在的表,否则会出错。
● 隐式JOIN的命令中不含有JOIN...ON...关键词,而是通过WHERE子句作为连接条件 将两张表连接。
示例
返回courseId匹配的学生姓名及课程名称。
SELECT student_info.name, course_info.courseName FROM student_info,course_info WHERE student_info.courseId = course_info.courseId;
1.32.6 笛卡尔连接
功能描述
笛卡尔连接把第一个表的每一条记录和第二个表的所有记录相连接,如果第一个表的 记录数为m, 第二个表的记录数为n,则会产生m*n条记录数。
语法格式
SELECT attr_expr_list FROM table_reference CROSS JOIN table_reference ON join_condition;
关键字
join_condition:连接条件,如果该条件恒成立(比如1=1),该连接就是笛卡尔连接。
所以,笛卡尔连接输出的记录条数等于被连接表的各记录条数的乘积,若需要进行笛 卡尔积连接,需使用专门的关键词CROSS JOIN。CROSS JOIN是求笛卡尔积的标准方 式。
注意事项
所要进行JOIN连接的表必须是已经存在的表,否则会出错。
示例
返回student_info与course_info两张表中学生姓名与课程名称的所有组合。
SELECT student_info.name, course_info.courseName FROM student_info CROSS JOIN course_info ON (1 = 1);
1.32.7 左半连接
功能描述
左半连接用来查看左表中符合JOIN条件的记录。
语法格式
SELECT attr_expr_list FROM table_reference LEFT SEMI JOIN table_reference ON join_condition;
关键字
LEFT SEMI JOIN:只显示左表中的记录。可通过在LEFT SEMI JOIN, WHERE...IN和 WHERE EXISTS中嵌套子查询来实现。左半连接与左外连接的区别是,左半连接将返回 左表中符合JOIN条件的记录,而左外连接将返回左表所有的记录,匹配不上JOIN条件 的记录将返回NULL值。
注意事项
● 所要进行JOIN连接的表必须是已经存在的表,否则会出错。
● 此处的attr_expr_list中所涉及的字段只能是左表中的字段,否则会出错。
示例
返回选课学生的姓名及其所选的课程编号。
SELECT student_info.name, student_info.courseId FROM student_info
LEFT SEMI JOIN course_info ON (student_info.courseId = course_info.courseId);
1.32.8 不等值连接
功能描述
不等值连接中,多张表通过不相等的连接值进行连接,并返回满足条件的结果集。
语法格式
SELECT attr_expr_list FROM table_reference JOIN table reference ON non_equi_join_condition;
关键字
non_equi_join_condition:与join_condition类似,只是join条件均为不等式条件。
注意事项
所要进行JOIN连接的表必须是已经存在的表,否则会出错。
示例
返回student_info_1与student_info_2两张表中的所有学生姓名对组合,但不包含相同 姓名的姓名对。
SELECT student_info_1.name, student_info_2.name FROM student_info_1 JOIN student_info_2 ON (student_info_1. name <> student_info_2. name);