如果数据存储在多个表中,如何用一条
SELECT
语句就检索出数据呢?——使用联结(join)
通过一个简单的例子理解 mysql 中的:
- INNER JOIN
- LETF OUTTER JOIN (or sometimes called LEFT JOIN)
- RIGHT OUTTER JOIN (or sometimes called RIGHT JOIN)
文章目录
案例: 现有两张表 suppliers
、orders
,两表通过字段 supplier_id
关联。
- suppliers table
supplier_id | supplier_name |
---|---|
10000 | IBM |
10001 | Hewlett Packard |
10002 | Microsoft |
10003 | NVIDIA |
- orders table
order_id | supplier_id | order_date |
---|---|---|
500125 | 10000 | 2017/05/12 |
500126 | 10001 | 2017/05/13 |
500127 | 10004 | 2017/05/14 |
INNER JOIN
使用 INNER JOIN
对于两张关联的表 table1 和 table2 进行查询时,返回的是两张表的交集,即 table1 ∧ table2
,如下图:

对于案例中的 table 执行下面的 LEFT OUTTER JOIN 语句
SELECT suppliers.supplier_id, suppliers.supplier_name, orders.order_date
FROM suppliers
LEFT JOIN orders
ON suppliers.supplier_id = orders.supplier_id;
执行结果:
supplier_id | supplier_name | order_date |
---|---|---|
10000 | IBM | 2017/05/12 |
10001 | Hewlett Packard | 2017/05/13 |
10002 | MICROSOFT | <null> |
10003 | NVIDIA | <null> |
RIGHT OUTTER JOIN
使用 LEFT OUTTER JOIN
对于两张关联的表 table1 和 table2 进行查询时,返回的是 table1 ∧ table2
以及 table2 - table1
,如下图:

对于案例中的 table 执行下面的 LEFT OUTTER JOIN 语句
SELECT orders.order_id, orders.order_date, suppliers.supplier_name, orders.supplier_id
FROM suppliers
RIGHT JOIN orders
ON suppliers.supplier_id = orders.supplier_id;
执行结果:
order_id | order_date | supplier_name | supplier_id |
---|---|---|---|
500125 | 2017/05/12 | IBM | 10000 |
500126 | 2017/05/13 | Hewlett Packard | 10001 |
500127 | 2017/05/14 | <null> | 10004 |
结果表明,对于 supplier_id=10004
,虽然不满足 suppliers.supplier_id = orders.supplier_id
,但由于语句中用的是 RIGHT JOIN
且该条记录是在 orders
表中,所以还是会被返回。
网友评论