2018年10月19日
目录
1、JOIN 的概念
有时为了得到完整的结果,我们需要从两个或更多的表中获取结果。我们就需要执行 join。
SQL join 用于根据两个或多个表中的列之间的关系,从这些表中查询数据。
2、JOIN 使用场景
下面列出了您可以使用的 JOIN 类型,以及它们之间的差异。
- JOIN: 如果表中有至少一个匹配,则返回行(注释:INNER JOIN 与 JOIN 是相同的。)
- LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行
- RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行
- FULL JOIN: 只要其中一个表中存在匹配,就返回行
3、场景一:INNER JOIN
在表中存在至少一个匹配时,INNER JOIN 关键字返回行。
INNER JOIN 关键字在表中存在至少一个匹配时返回行。如果 "Persons" 中的行在 "Orders" 中没有匹配,就不会列出这些行。
表数据
Persons::
Orders:
现在,我们希望列出所有人的定购。
查询语句:【左边:Persons,右边:Orders】
select p.LastName,p.FirstName,o.OrderNo
from g01_admin.Persons p
INNER JOIN g01_admin.Orders o
ON p.Id_P = o.Id_p
ORDER BY p.LastName;
查询结果:
4、场景二: LEFT JOIN
在某些数据库中, LEFT JOIN 称为 LEFT OUTER JOIN。
LEFT JOIN 关键字会从左表 (Persons) 那里返回所有的行,即使在右表 (Orders) 中没有匹配的行。
现在,我们希望列出所有的人,以及他们的定购 - 如果有的话。
查询语句:【左边:Persons,右边:Orders】
select p.LastName,p.FirstName,o.OrderNo
from g01_admin.Persons p
LEFT JOIN g01_admin.Orders o
ON p.Id_P = o.Id_P
ORDER BY p.LastName;
查询结果:
5、场景三:RIGHT JOIN
在某些数据库中, RIGHT JOIN 称为 RIGHT OUTER JOIN。
RIGHT JOIN 关键字会右表 (table_name2) 那里返回所有的行,即使在左表 (table_name1) 中没有匹配的行。
现在,我们希望列出所有的定单,以及定购它们的人 - 如果有的话。
查询语句:【左边:Persons,右边:Orders】
select p.LastName,p.FirstName,o.OrderNo
from g01_admin.Persons p
RIGHT JOIN g01_admin.Orders o
ON p.Id_P = o.Id_P
ORDER BY p.LastName;
查询结果:
6、场景四:FULL JOIN
只要其中某个表存在匹配,FULL JOIN 关键字就会返回行;在某些数据库中, FULL JOIN 称为 FULL OUTER JOIN。
FULL JOIN 关键字会从左表 (Persons) 和右表 (Orders) 那里返回所有的行。如果 "Persons" 中的行在表 "Orders" 中没有匹配,或者如果 "Orders" 中的行在表 "Persons" 中没有匹配,这些行同样会列出。
FULL JOIN 关键字语法
SELECT column_name(s)
FROM table_name1
FULL JOIN table_name2
ON table_name1.column_name=table_name2.column_name
现在,我们希望列出所有的人,以及他们的定单,以及所有的定单,以及定购它们的人。
BUT!!!!
今天用MySQL进行全联查询时报错了,才知道MySQL不支持FULL JOIN,只支持左右关联 可根据左右关联查询实现全联查询。 Mysql不支持FULL JOIN,但是我们可以通过RIGHT JOIN + LEFT JOIN 达到FULL JOIN 的目的。