标准SQL中提供了四种JOIN方式:
1、INNER JOIN(就是我们通常的JOIN)
2、LEFT JOIN(在某些数据库中称为LEFT OUTER JOIN)
3、RIGHT JOIN(在某些数据库中称为RIGHT OUTER JOIN)
4、FULL JOIN(在某些数据库中称为FULL OUTER JOIN)
下面我们将以实际的应用来分析介绍这四种JOIN方式。
现在假设有两个表:Persons和Orders,表示顾客和他们的订单。现有数据分别如下:
Persons:
Orders:
1、INNER JOIN操作:当两个表中有匹配时,才返回数据行。
现在我们希望列出所有人的订购:
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
INNER JOIN Orders
ON Persons.Id_P=Orders.Id_P
ORDER BY Persons.LastName
返回的结果如下:
从图中可以看出,只把两个表中有匹配的数据行列出来了。
2、LEFT JOIN操作:会返回左边表中的所有行,即使右表中没有匹配项。
现在我们希望列出所有人以及他们的订购——如果他们有订购的话。这里就可以使用LEFT JOIN来完成:
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
LEFT JOIN Orders
ON Persons.Id_P=Orders.Id_P
ORDER BY Persons.LastName
返回的结果如下:
从图中可以看出,这次查询结果列出了所有的人,并把它们相关的订单列出来了。
3、RIGHT JOIN操作:会返回右边表中的所有行,即使左表中没有匹配项。LEFT和RIGHTj 相对而言。下面的操作如果换一下位置,使用LEFT JOIN也可完成。
现在我们希望列出所有的订单以及订购他们的人——如果在Perons中存在订购它的人的话。这里假设id_P不只在Persons一个表中有。那么就可以使用RIGHT JOIN来完成:
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
RIGHT JOIN Orders
ON Persons.Id_P=Orders.Id_P
ORDER BY Persons.LastName
返回结果如下:
从图中可以看出,这次查询结果列出了所有的订单,并把其相应的人——如果在Persons中的话,也列了出来。
4、FULL JOIN操作:只要其中某个表存在匹配,FULL JOIN 关键字就会返回行。它会列出参与JOIN操作的表中的所有数据行,不管他们之前是否匹配。
现在我们希望列出所有的人,以及他们的定单,以及所有的定单,以及定购它们的人,那么就可以使用FULL JOIN操作来完成:
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
FULL JOIN Orders
ON Persons.Id_P=Orders.Id_P
ORDER BY Persons.LastName
返回结果如下:
上面对SQL中的JOIN操作做了简单的介绍,希望对大家有所帮助。
参考资料:http://www.w3school.com.cn/sql/sql_join.asp