MySQL JOIN 两个 SELECT
在 MySQL 中,可以使用 JOIN 操作符将两个 SELECT 语句的结果集合并在一起。JOIN 是一种在关系型数据库中用于连接两个或多个表的操作。
什么是 JOIN
在数据库中,通常会有多个表用于存储数据。当需要从这些表中检索数据时,可能需要将它们连接在一起,以便获取所需的信息。
JOIN 是一种在关系型数据库中用于连接两个或多个表的操作。通过 JOIN 操作,可以根据表之间的关联关系通过共享的列将数据连接在一起。
JOIN 操作通常用于查询多个表的数据,以获取更复杂的结果。它可以根据需要连接不同类型的 JOIN,如 INNER JOIN、LEFT JOIN、RIGHT JOIN 等。
JOIN 操作示例
为了演示 JOIN 操作,我们将使用两个示例表:customers
和 orders
。
customers 表
customer_id | customer_name | contact_name | country |
---|---|---|---|
1 | Alfreds | Maria | Germany |
2 | Ana Trujillo | Ana | Mexico |
3 | Antonio Moreno | Antonio | Mexico |
4 | Around the Horn | Thomas | UK |
5 | Berglunds | Christina | Sweden |
orders 表
order_id | customer_id | order_date |
---|---|---|
1 | 3 | 2021-01-01 |
2 | 2 | 2021-02-01 |
3 | 4 | 2021-03-01 |
4 | 1 | 2021-04-01 |
5 | 5 | 2021-05-01 |
我们的目标是获取每个订单的详细信息,包括订单号、客户名称和订单日期。
INNER JOIN
INNER JOIN 是最常见的 JOIN 类型,它返回两个表中匹配的行。
以下是使用 INNER JOIN 连接 customers
和 orders
表的示例代码:
SELECT orders.order_id, customers.customer_name, orders.order_date
FROM orders
INNER JOIN customers ON orders.customer_id = customers.customer_id;
上述代码中的 ON
子句指定了连接条件,即根据 orders
和 customers
表中的 customer_id
列进行连接。
LEFT JOIN
LEFT JOIN 返回左表中的所有行,并包括与右表匹配的行。
以下是使用 LEFT JOIN 连接 customers
和 orders
表的示例代码:
SELECT orders.order_id, customers.customer_name, orders.order_date
FROM customers
LEFT JOIN orders ON customers.customer_id = orders.customer_id;
在上面的代码中,customers
表是左表,orders
表是右表。LEFT JOIN 返回了 customers
表中的所有行,以及与之关联的 orders
表中的行。
RIGHT JOIN
RIGHT JOIN 返回右表中的所有行,并包括与左表匹配的行。
以下是使用 RIGHT JOIN 连接 customers
和 orders
表的示例代码:
SELECT orders.order_id, customers.customer_name, orders.order_date
FROM customers
RIGHT JOIN orders ON customers.customer_id = orders.customer_id;
在上述代码中,customers
表是左表,orders
表是右表。RIGHT JOIN 返回了 orders
表中的所有行,以及与之关联的 customers
表中的行。
FULL JOIN
FULL JOIN 返回左右表中的所有行,即使没有匹配的行。
以下是使用 FULL JOIN 连接 customers
和 orders
表的示例代码:
SELECT orders.order_id, customers.customer_name, orders.order_date
FROM customers
FULL JOIN orders ON customers.customer_id = orders.customer_id;
FULL JOIN 返回了 customers
表和 orders
表中的所有行,无论它们是否匹配。
关系图
下面是 customers
和 orders
表之间关系的关系图:
erDiagram
customers ||..o{ orders : has
总结
通过使用 JOIN 操作符,我们可以将两个 SELECT 语句的结果集合并在一起,并根据表之间的关联关系获取更复杂的结果。
在本文中,我们介绍了 INNER JOIN、LEFT