日常生活的交流与学习

首页 新随笔 联系 管理

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 JOINRIGHT JOIN 来模拟 FULL JOIN 的行为。

实操

首先,我们需要创建两个表:CustomersOrders

创建表

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;

image

posted on 2024-09-03 19:00  lazycookie  阅读(9)  评论(0编辑  收藏  举报