SQL JOIN 关键字

INNER JOIN

INNER JOIN 命令返回在两个表中都有匹配值的行。

以下 SQL 选择所有带有客户信息的订单:

实例

SELECT Orders.OrderID, Customers.CustomerName
FROM Orders
INNER JOIN Customers ON Orders.CustomerID = Customers.CustomerID;

亲自试一试

注意:INNER JOIN 关键字只要列之间存在匹配,就会从两个表中选择所有行。如果 "Orders" 表中的记录没有在 "Customers"中找到匹配项,那么这些订单将不会显示!

以下 SQL 语句选择所有带有客户和发货人信息的订单:

实例

SELECT Orders.OrderID, Customers.CustomerName, Shippers.ShipperName
FROM ((Orders
INNER JOIN Customers ON Orders.CustomerID = Customers.CustomerID)
INNER JOIN Shippers ON Orders.ShipperID = Shippers.ShipperID);

亲自试一试

LEFT JOIN

LEFT JOIN 命令返回左表中的所有行和右表中的匹配行。如果没有匹配项,则右侧的结果为 NULL。

以下 SQL 将选择所有客户以及他们可能拥有的任何订单:

实例

SELECT Customers.CustomerName, Orders.OrderID
FROM Customers
LEFT JOIN Orders ON Customers.CustomerID = Orders.CustomerID
ORDER BY Customers.CustomerName;

亲自试一试

注意:LEFT JOIN 关键字返回左表(Customers)中的所有记录,即使在右表(Orders)中没有匹配项。

RIGHT JOIN

RIGHT JOIN 命令返回右表中的所有行和左表中的匹配记录。当没有匹配项时,左侧的结果为 NULL。

以下 SQL 将返回所有员工以及他们可能下的任何订单:

实例

SELECT Orders.OrderID, Employees.LastName, Employees.FirstName
FROM Orders
RIGHT JOIN Employees ON Orders.EmployeeID = Employees.EmployeeID
ORDER BY Orders.OrderID;

亲自试一试

注意:RIGHT JOIN 关键字返回右表(Employees)中的所有记录,即使在左表(Orders)中没有匹配项。

FULL OUTER JOIN

FULL OUTER JOIN 命令在左表或右表存在匹配时返回所有行。

以下 SQL 语句选择所有客户和所有订单:

SELECT Customers.CustomerName, Orders.OrderID
FROM Customers
FULL OUTER JOIN Orders ON Customers.CustomerID=Orders.CustomerID
ORDER BY Customers.CustomerName;

注意:FULL OUTER JOIN 关键字返回左表(Customers)的所有行和右表(Orders)的所有行。如果 "Customers" 中的行在 "Orders" 中没有匹配项,或者 "Orders" 中的行在 "Customers" 中没有匹配项,那么这些行也将被列出。