JOIN 是一种用于将多个表中的数据按照特定条件合并在一起的操作
以下是一些常见的 JOIN 类型及其解释和示例:
一、 语法示例
1. 内连接(INNER JOIN):
内连接返回两个表中满足连接条件的数据行。只有那些在两个表中都存在的数据行才会被返回。
示例:
SELECT orders.order_id, customers.customer_name
FROM orders
INNER JOIN customers ON orders.customer_id = customers.customer_id;
2. 左外连接(LEFT JOIN):
左外连接返回左表中的所有数据行,以及满足连接条件的右表中的匹配数据行。如果没有匹配的数据行,右表的列值将为NULL。
示例:
SELECT customers.customer_name, orders.order_id
FROM customers
LEFT JOIN orders ON customers.customer_id = orders.customer_id;
-
右外连接(RIGHT JOIN):
右外连接与左外连接相似,但是返回右表中的所有数据行,以及满足连接条件的左表中的匹配数据行。如果没有匹配的数据行,左表的列值将为NULL。示例:
SELECT orders.order_id, order_items.item_name FROM orders RIGHT JOIN order_items ON orders.order_id = order_items.order_id;
-
全外连接(FULL OUTER JOIN):
全外连接返回左表和右表中的所有数据行,并将它们根据连接条件合并。如果没有匹配的数据行,对应表的列值将为NULL。示例:
SELECT customers.customer_name, orders.order_id FROM customers FULL OUTER JOIN orders ON customers.customer_id = orders.customer_id;
二、 场景示例
假设我们有两个表:students
和 courses
,以及以下数据:
students 表:
student_id | student_name | course_id |
---|---|---|
1 | Alice | 101 |
2 | Bob | 102 |
3 | Carol | NULL |
courses 表:
course_id | course_name |
---|---|
101 | Math |
102 | Science |
103 | History |
现在,我们可以使用不同连接类型来查找学生和他们所选的课程。
-
内连接(INNER JOIN):
这将返回只有学生 Alice 和 Bob,以及他们所选的课程 Math 和 Science 的结果。student_name course_name Alice Math Bob Science -
左外连接(LEFT JOIN):
这将返回所有学生,包括他们所选的课程,以及没有选择课程的学生 Carol。student_name course_name Alice Math Bob Science Carol NULL -
右外连接(RIGHT JOIN):
这将返回所有课程,包括选择该课程的学生,以及没有学生选择的课程 History。student_name course_name Alice Math Bob Science NULL History -
全外连接(FULL OUTER JOIN):
这将返回所有学生和所有课程,包括没有选择课程的学生和没有学生选择的课程。student_name course_name Alice Math Bob Science Carol NULL NULL History