sql中左连接,右连接,内连接,全连接之间的区别?
定义
1. INNER JOIN
INNER JOIN 返回两个表中具有匹配值的行。如果某行在其中一个表中没有匹配,则该行不会出现在结果集中。
2. LEFT JOIN (LEFT OUTER JOIN)
LEFT JOIN 返回左表的所有行,即使右表中没有匹配的行。如果没有匹配,则结果中的右表列包含 NULL。
3. RIGHT JOIN (RIGHT OUTER JOIN)
RIGHT JOIN 返回右表的所有行,即使左表中没有匹配的行。如果没有匹配,则结果中的左表列包含 NULL。
4. FULL JOIN (FULL OUTER JOIN)
FULL JOIN 返回左表和右表中所有匹配和不匹配的行。对于左表和右表中不匹配的部分,分别填充 NULL。
注意
在某些数据库系统中,如 MySQL,FULL JOIN
不是默认支持的,你可能需要用 UNION
或者 LEFT JOIN
和 RIGHT JOIN
来模拟 FULL JOIN
的行为。
实操
首先,我们需要创建两个表:Customers
和 Orders
。
创建表
CREATE TABLE Customers (
CustomerID INT PRIMARY KEY,
Name VARCHAR(50)
);
CREATE TABLE Orders (
OrderNumber INT PRIMARY KEY,
CustomerID INT
);
插入数据
接下来,我们向这两个表中插入一些示例数据:
INSERT INTO Customers (CustomerID, Name)
VALUES (1, 'Alice'),
(2, 'Bob'),
(3, 'Charlie');
INSERT INTO Orders (OrderNumber, CustomerID)
VALUES (101, 1),
(102, 2),
(103, NULL); -- 添加一个没有客户 ID 的订单
各种 JOIN 的 SQL 语句
INNER JOIN
SELECT Customers.Name, Orders.OrderNumber
FROM Customers
INNER JOIN Orders ON Customers.CustomerID = Orders.CustomerID;
LEFT JOIN (LEFT OUTER JOIN)
SELECT Customers.Name, Orders.OrderNumber
FROM Customers
LEFT JOIN Orders ON Customers.CustomerID = Orders.CustomerID;
RIGHT JOIN (RIGHT OUTER JOIN)
SELECT Customers.Name, Orders.OrderNumber
FROM Customers
RIGHT JOIN Orders ON Customers.CustomerID = Orders.CustomerID;
FULL JOIN (FULL OUTER JOIN)
在 SQL Server 中,你可以使用 FULL OUTER JOIN
直接写出:
SELECT Customers.Name, Orders.OrderNumber
FROM Customers
FULL OUTER JOIN Orders ON Customers.CustomerID = Orders.CustomerID;