更新时间:2026-07-03 GMT+08:00
左半连接
功能描述
左半连接(LEFT SEMI JOIN)用来查看左表中符合 JOIN 条件的记录。左半连接只返回左表中的记录,不返回右表的列。
语法格式
SELECT attr_expr_list FROM table_reference LEFT SEMI JOIN table_reference ON join_condition;
参数说明
| 参数 | 说明 |
|---|---|
| attr_expr_list | 查询列表达式列表,指定需要返回的列。所涉及的字段只能是左表中的字段,否则会出错。 |
| table_reference | 进行连接的表名或子查询。必须是已存在的表,否则会出错。 |
| LEFT SEMI JOIN | 左半连接关键字,只显示左表中满足 JOIN 条件的记录。 |
| join_condition | 连接条件,通常为两表之间列的等值比较表达式。 |
| ON | 指定连接条件的关键字。 |
注意事项
- 所要进行 JOIN 连接的表必须是已经存在的表,否则会出错。
- attr_expr_list 中所涉及的字段只能是左表中的字段,否则会出错。
- 左半连接与左外连接的区别:左半连接只返回左表中符合 JOIN 条件的记录,而左外连接返回左表所有的记录,匹配不上 JOIN 条件的记录右表列返回 NULL。
- 左半连接的效果等价于 WHERE ... IN 或 WHERE EXISTS 子查询。
示例
返回选课学生的姓名及其所选的课程编号。
SELECT student_info.name, student_info.courseId FROM student_info LEFT SEMI JOIN course_info ON student_info.courseId = course_info.courseId;
等价写法(使用 WHERE IN):
SELECT name, courseId FROM student_info WHERE courseId IN (SELECT courseId FROM course_info);
等价写法(使用 WHERE EXISTS):
SELECT name, courseId FROM student_info WHERE EXISTS (SELECT 1 FROM course_info WHERE student_info.courseId = course_info.courseId);
父主题: 连接