MySQL两表关联简单实现
在数据库设计及操作中,常常需要将两个或多个表进行关联,以获取更多有用的数据。在 MySQL 中,通过使用 JOIN 操作符可以实现两个表的关联。本文将介绍两个表关联的实现方法,并附有相关代码演示。
1. 内联结(INNER JOIN)
内联结又称为等值连接,是最基本的连接方式之一。它可以将两个表根据某列相同的记录关联起来。语法如下:
SELECT *
FROM table1
JOIN table2
ON table1.column1 = table2.column2;
其中,table1 和 table2 是待关联的两个表名,column1 和 column2 是这两个表需要关联的列名。关联后,将返回符合条件的记录(两表列匹配的行),如果没有匹配到任何记录,则不返回任何结果。
下面是一个简单的内联结示例,其中包含两个表——客户表和订单表:
客户表(customer):
| id | name |
| — | ——– |
| 1 | Alice |
| 2 | Bob |
| 3 | Charlie |
订单表(orders):
| id | customer_id | order_date |
| — | ———–| ———-|
| 1 | 1 | 2020-01-01|
| 2 | 1 | 2020-02-01|
| 3 | 2 | 2020-02-15|
我们可以使用下面的 SQL 语句执行这个关联操作:
SELECT *
FROM customer
JOIN orders
ON customer.id = orders.customer_id;
执行后的结果如下:
| id | name | id | customer_id | order_date |
| — | ——– | — | ———–| ———-|
| 1 | Alice | 1 | 1 | 2020-01-01|
| 1 | Alice | 2 | 1 | 2020-02-01|
| 2 | Bob | 3 | 2 | 2020-02-15|
可以看出,返回了两个表中已匹配的行。
2. 左联结(LEFT JOIN)
左联结也称为左外连接,它返回的记录集包含左表中的所有记录,以及右表中匹配左表中相应记录的记录集(如果有的话)。如果右表中没有匹配的行,将返回 NULL 值。
语法如下:
SELECT *
FROM table1
LEFT JOIN table2
ON table1.column1 = table2.column2;
和内联结类似,table1 和 table2 是待关联的两个表名,column1 和 column2 是这两个表需要关联的列名。
下面是一个左联结的示例,在客户表(customer)和订单表(orders)的基础上,新增加了一个订单状态表(order_status):
订单状态表(order_status):
| id | status |
| — | ————|
| 1 | In Progress |
| 2 | Completed |
接下来,我们需要关联三个表,获取每个客户的订单的状态信息(如果有的话):
SELECT *
FROM customer
LEFT JOIN orders
ON customer.id = orders.customer_id
LEFT JOIN order_status
ON orders.status_id = order_status.id;
执行后的结果如下:
| id | name | id | customer_id | order_date | status_id | status |
| — | ——– | — | ———–| ———-| ———| ———–|
| 1 | Alice | 1 | 1 | 2020-01-01| 1 | In Progress|
| 1 | Alice | 2 | 1 | 2020-02-01| NULL | NULL |
| 2 | Bob | 3 | 2 | 2020-02-15| 2 | Completed |
| 3 | Charlie | NULL| NULL | NULL | NULL | NULL |
可以看出,左联接的结果包含左表的所有行,以及右表中匹配左表中某些行的行,还包括左表中没有匹配的行的 NULL 值。因此,在上例中,Alice 的第二笔订单没有状态,因此状态列返回了 NULL 值。
本文提供了两个基本的 MySQL 关联表方式(内联结和左联结)的实现代码演示,可以帮助初学者更好地掌握如何使用 JOIN 操作符来关联两个表。