引入
连接查询
同时涉及多个表的查询称为连接查询
用来连接两个表的条件称为连接条件
分类
内连接(INNER JOIN)
外连接(OUTER JOIN)
左外连接(LEFT JOIN)
右外连接(RIGHT JOIN)
外连接与普通连接的区别
普通连接操作只输出满足连接条件的元组
外连接操作以指定表为连接主体,将主体表中不满足连接条件的元组一并输出
INNER JOIN
INNER JOIN(也可以省略 INNER 使用 JOIN,效果一样)来连接两张表
LEFT JOIN
left join会读取左边的数据表 的所有选取的字段数据,即便在右侧表 中 没有对应的字段值也会查出来
RIGHT JOIN
RIGHT JOIN 会读取右边数据表的全部数据,即便左边边表无对应数据
示例
内连接(INNER JOIN)示例
内连接返回两个表中匹配的行。如果在连接的表中没有找到匹配项,则该行不会出现在结果中。
假设有两个表:students
和 courses
。
students 表:
courses 表:
SQL 查询(内连接):
SELECT students.student_name, courses.course_name FROM students INNER JOIN courses ON students.student_id = courses.student_id;
结果:
内连接返回的结果只包含在两个表中都有对应 student_id
的记录。
外连接(OUTER JOIN)示例
外连接有三种类型:左外连接(LEFT OUTER JOIN)、右外连接(RIGHT OUTER JOIN)和全外连接(FULL OUTER JOIN)。
左外连接(LEFT OUTER JOIN):返回左表(students
)中的所有记录,即使右表(courses
)中没有匹配项。
SQL 查询(左外连接):
SELECT students.student_name, courses.course_name FROM students LEFT OUTER JOIN courses ON students.student_id = courses.student_id;
结果:
左外连接保留了左表(students
)中的所有记录,即使右表(courses
)没有与 student_id
匹配的记录。
右外连接(RIGHT OUTER JOIN):返回右表(courses
)中的所有记录,即使左表(students
)中没有匹配项。
SQL 查询(右外连接):
SELECT students.student_name, courses.course_name FROM students RIGHT OUTER JOIN courses ON students.student_id = courses.student_id;
结果:
右外连接保留了右表(courses
)中的所有记录,即使左表(students
)没有与 student_id
匹配的记录。