美文网首页
@MySQL语法之JOIN

@MySQL语法之JOIN

作者: 阿父 | 来源:发表于2017-07-20 16:52 被阅读32次

如果数据存储在多个表中,如何用一条 SELECT 语句就检索出数据呢?——使用联结(join)
通过一个简单的例子理解 mysql 中的:

  • INNER JOIN
  • LETF OUTTER JOIN (or sometimes called LEFT JOIN)
  • RIGHT OUTTER JOIN (or sometimes called RIGHT JOIN)

文章目录


案例: 现有两张表 suppliersorders,两表通过字段 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 表中,所以还是会被返回。

相关文章

网友评论

      本文标题:@MySQL语法之JOIN

      本文链接:https://www.haomeiwen.com/subject/zkkjkxtx.html