10分钟掌握SQL连接:inner、outer、left、right

admin 2023-10-16 585 阅读 0评论

介绍SQL中使用的四种主要类型的连接:内连接、外连接、左连接和右连接。

1 简介

结构化查询语言(SQL)是一种强大的编程语言,用于管理和操作数据库。用户可以进行检索、存储、编辑和分析存储在关系数据库中的数据。使用SQL的关键操作之一是“连接”,SQL中的连接功能能够基于相关的列将两个或多个表的数据进行合并。


本文将解释SQL中使用的四种主要类型的连接:内连接、外连接、左连接和右连接。

2 什么是SQL中的连接

在数据库的上下文中,连接操作是根据两个或多个表之间的相关列,将它们的行组合起来。我们可以将连接看作是一种将多个表中的数据整合起来的方法,创建一个可以像单个实体一样查询的视图。

下面是使用到的两个表的例子:

-- Table: Customers
CREATE TABLE Customers (
    ID INT,
    NAME VARCHAR(100)

)
;

INSERT INTO Customers (ID, NAME) VALUES
(1'Bob'),
(2'Alice'),
(3'Mary'),
(4'John')
;

-- Table: Orders
CREATE TABLE Orders (
    ORDER_ID INT,
    CUSTOMER_ID INT,
    PRODUCT VARCHAR(100)

)
;

INSERT INTO Orders (ORDER_ID, CUSTOMER_ID, PRODUCT) VALUES
(10011'Laptop'),
(10022'Phone'),
(10034'TV'),
(10043'Keyboard')
;

3 内连接

内连接是SQL中最常用的连接类型。它返回两个表中具有匹配值的记录。如果某条记录在任何一个表中没有匹配项,则不包含在结果中。

我们根据Customers.IDOrders.CUSTOMER_ID来连接这两个表:

SELECT Customers.NAME, Orders.PRODUCT
FROM Customers
INNER JOIN Orders
ON Customers.ID = Orders.CUSTOMER_ID;

4 左连接(左外连接)

左连接或左外连接,返回左表中的所有记录,以及右表中的匹配记录。如果没有匹配项,则右侧的结果为NULL。

假设我们还有一个没有下任何订单的客户:

-- Adding a new customer
INSERT INTO Customers (ID, NAME) VALUES
(5'Emma')
;

如果现在执行一个左连接:

SELECT Customers.NAME, Orders.PRODUCT
FROM Customers
LEFT JOIN Orders
ON Customers.ID = Orders.CUSTOMER_ID;

5 右连接(右外连接)

右连接或右外连接,返回右表中的所有记录,以及左表中的匹配记录。如果没有匹配项,则左侧的结果为NULL。

假设我们的数据库中有一个来自不在Customers表中列出的客户的订单:

-- Adding a new order
INSERT INTO Orders (ORDER_ID, CUSTOMER_ID, PRODUCT) VALUES
(10056'Mouse')
;

如果现在执行一个右连接:

SELECT Customers.NAME, Orders.PRODUCT
FROM Customers
RIGHT JOIN Orders
ON Customers.ID = Orders.CUSTOMER_ID;

6 全外连接

全外连接在左表或右表记录中有匹配项时,返回所有记录。它是左连接和右连接的组合。如果没有匹配项,则任何一侧的结果都为NULL。

使用修改过的Customers和Orders表来执行一个全外连接:

SELECT Customers.NAME, Orders.PRODUCT
FROM Customers
FULL OUTER JOIN Orders
ON Customers.ID = Orders.CUSTOMER_ID;

请注意,并非所有的数据库系统都支持全外连接。如果你的数据库系统不支持它,你可以通过组合左连接和右连接来实现相同的结果。

7 总结

SQL连接(Joins)是一个强大的功能,允许我们根据相关列从两个或多个表中组合数据,它们是SQL和数据库管理的重要组成部分。

掌握如何使用每种连接类型:内连接(Inner Join)、左连接(Left Join)、右连接(Right Join)和全外连接(Full Outer Join),对于优化您的SQL查询和从数据库中检索正确的数据非常有帮助。

喜欢就支持以下吧
点赞 0

发表评论

快捷回复: 表情:
aoman baiyan bishi bizui cahan ciya dabing daku deyi doge fadai fanu fendou ganga guzhang haixiu hanxiao zuohengheng zhuakuang zhouma zhemo zhayanjian zaijian yun youhengheng yiwen yinxian xu xieyanxiao xiaoku xiaojiujie xia wunai wozuimei weixiao weiqu tuosai tu touxiao tiaopi shui se saorao qiudale qinqin qiaoda piezui penxue nanguo liulei liuhan lenghan leiben kun kuaikule ku koubi kelian keai jingya jingxi jingkong jie huaixiao haqian aini OK qiang quantou shengli woshou gouyin baoquan aixin bangbangtang xiaoyanger xigua hexie pijiu lanqiu juhua hecai haobang caidao baojin chi dan kulou shuai shouqiang yangtuo youling
提交
评论列表 (有 0 条评论, 585人围观)

最近发表

热门文章

最新留言

热门推荐

标签列表