引入

  • 连接查询

    • 同时涉及多个表的查询称为连接查询

    • 用来连接两个表的条件称为连接条件

  • 分类

    • 内连接(INNER JOIN)

    • 外连接(OUTER JOIN)

      • 左外连接(LEFT JOIN)

      • 右外连接(RIGHT JOIN)

  • 外连接与普通连接的区别

    • 普通连接操作只输出满足连接条件的元组

    • 外连接操作以指定表为连接主体,将主体表中不满足连接条件的元组一并输出

INNER JOIN

INNER JOIN(也可以省略 INNER 使用 JOIN,效果一样)来连接两张表

img

LEFT JOIN

left join会读取左边的数据表 的所有选取的字段数据,即便在右侧表 中 没有对应的字段值也会查出来

img

RIGHT JOIN

RIGHT JOIN 会读取右边数据表的全部数据,即便左边边表无对应数据

img

示例

内连接(INNER JOIN)示例

内连接返回两个表中匹配的行。如果在连接的表中没有找到匹配项,则该行不会出现在结果中。

假设有两个表:studentscourses

students 表:

student_id

student_name

1

Alice

2

Bob

3

Charlie

courses 表:

course_id

course_name

student_id

101

Math

1

102

English

2

103

Computer Science

1

104

History

4

SQL 查询(内连接):

SELECT students.student_name, courses.course_name FROM students INNER JOIN courses ON students.student_id = courses.student_id;

结果

student_name

course_name

Alice

Math

Alice

Computer Science

Bob

English

内连接返回的结果只包含在两个表中都有对应 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;

结果

student_name

course_name

Alice

Math

Alice

Computer Science

Bob

English

Charlie

NULL

左外连接保留了左表(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;

结果

student_name

course_name

Alice

Math

Alice

Computer Science

Bob

English

NULL

History

右外连接保留了右表(courses)中的所有记录,即使左表(students)没有与 student_id 匹配的记录。