MySQL JOIN 联接用于从多个表中检索数据。只要在SQL语句中将两个或多个表联接在一起,就会执行MySQL JOIN。
MySQL连接有几种类型:
Inner Join 是最常见的联接类型。其从满足联接条件的多个表中返回所有行。
MySQL中INNER JOIN的语法为:
SELECT
columns
FROM
table1
INNER
JOIN
table2
ON
table1.
column
= table2.
;
在这个可视化的图表中,MySQL INNER JOIN将返回阴影部分:
MySQL INNER JOIN将返回table1和table2相交的记录。
这是一个MySQL INNER JOIN的示例:
suppliers.supplier_id, suppliers.supplier_name, orders.order_date
suppliers
orders
suppliers.supplier_id = orders.supplier_id;
这个示例将返回供应商和订单表中的所有行,两个表通过Supplier_id值进行联接。
让我们看一些数据来解释INNER JOINS的工作原理:
假设我们有一个suppliers表,其中有两个字段(supplier_id和Supplier_name)。它包含以下数据:
我们还有另一个orders表,其中包含三个字段(order_id,supplier_id和order_date)。它包含以下数据:
运行下面的MySQL INNER JOIN语句:
得到的结果集如下所示:
供应商表suppliers中 的Microsoft 和 NVIDIA行将被省略,因为10002和10003在orders表中不存在。订单表orders 中的的500127行将被省略,因为10004在suppliers 表中不存在。
上面的INNER JOIN示例可以使用下面的旧语法进行重写:
suppliers, orders
WHERE
直接在FROM后面列出所有的联接表,在WHERE指明他们之间的关系。
另一种联接称为MySQL LEFT OUTER JOIN。这种类型的联接返回在ON条件中指定的LEFT手表中的所有行,并且仅返回来自另一个表中与联接字段相等(满足联接条件)的那些行。
MySQL中LEFT OUTER JOIN的语法为:
LEFT
[
OUTER
]
在某些数据库中,将LEFT OUTER JOIN关键字替换为LEFT JOIN。
在图中,MySQL LEFT OUTER JOIN将返回阴影部分:
MySQL LEFT OUTER JOIN将返回table1中的所有记录,并且仅返回table2中与table1相交的那些记录。
这是一个MySQL LEFT OUTER JOIN的示例:
此LEFT OUTER JOIN示例将返回供应商表中的所有行,并且仅返回订单表中联接字段相等的所有行。
如果订单表中不存在供应商表中的vendor_id值,则订单表中的所有字段在结果集中将显示为null。
假设我们有一个供应商表suppliers ,其中有两个字段(supplier_id和Supplier_name)。它包含以下数据:
另外一个订单表orders ,具有三个字段(order_id,supplier_id和order_date)。它包含以下数据:
运行下面的SELECT语句:
先返回suppliers中的所有数据,然后根据supplier_id从orders表中获取相应的order_date, 如果没有对应的supplier_id ,则返回null。
另一种联接称为MySQL RIGHT OUTER JOIN。这种类型的联接返回在右边表中的所有行,并且仅返回来自另一个表中联接字段相等(满足联接条件)的那些行。
把左外连接中的表名对调,其结果和右外连接的结果是一样的。
MySQL中RIGHT OUTER JOIN的语法为:
RIGHT
在某些数据库中,将RIGHT OUTER JOIN关键字替换为RIGHT JOIN。
在图中,MySQL RIGHT OUTER JOIN将返回阴影区域:
MySQL RIGHT OUTER JOIN将返回table2中的所有记录,并且仅返回table1中与table2相交的那些记录。
这是一个MySQL RIGHT OUTER JOIN的示例:
orders.order_id, orders.order_date, suppliers.supplier_name
该示例将返回orders表中的所有行,并且仅返回的suppliers表中supplier_id相等的行。如果订单表中的Supplier_id值不存在于供应商表中,则供应商表中的所有字段在结果集中将显示为null
假设我们有一个供应商表,其中有两个字段(supplier_id和Supplier_name)。它包含以下数据:
另外一个是订单表,具有三个字段(order_id,supplier_id和order_date)。它包含以下数据:
如果我们在下面运行SELECT语句(包含RIGHT OUTER JOIN):
我们的结果集如下所示:
结果中包含了orders 表的所有行,同时通过supplier_id获取了suppliers 中的数据。由于supplier_id等于10002的记录在suppliers中没有,所以值为null。
原文链接:https://codingdict.com/