这篇文章主要介绍“SQL的内连接和外连接怎么用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“SQL的内连接和外连接怎么用”文章能帮助大家解决问题。
JOIN 运算符允许您以各种方式组合相关信息,正如我在上面简要解释的那样。连接有多种类型,分为两大类 - 内部连接和外部连接。
INNER JOIN 和 OUTER JOIN 之间的最大区别在于,内连接将仅保留来自彼此相关的两个表(在结果表中)的信息。另一方面,外部联接还将保留与结果表中的另一个表无关的信息。
让我们详细了解 INNER JOIN 和 OUTER JOIN 如何工作以更好地理解它们。
内部联接将仅保留来自两个相关联的表的信息。如果您将这两个表想象为维恩图,则由 INNER JOIN 生成的表将是下面它们重叠的绿色突出显示部分:
内连接的维恩图表示
这是内部联接的语法:
SELECT * FROM table1
JOIN table2
ON relation;
内连接语法
我们将在下面通过一个例子来了解它是如何工作的。
如果要保留所有数据,而不仅仅是相互关联的数据,则可以使用 OUTER 联接。
有三种类型的外部联接:LEFT JOIN,RIGHT JOIN,和FULL JOIN。它们之间的差异涉及它们保留哪些不相关的数据——它可以来自第一个表、第二个表或两者。没有要填充的数据的单元格的值为NULL。
注意:LEFT JOIN是所有版本的 SQL 中最普遍实现的。但是对于RIGHT JOIN和FULL JOIN就不是这样了,在早期的各种SQL版本中都没有实现(但oracle数据库在数据表连接方面实现得比较充分)。
让我们看看每个人是如何单独工作的。然后我们将通过下面的示例了解它们是如何工作的。
LEFT OUTER JOIN,或简称Left Join,将保留左(第一个)表中的不相关数据。
您可以用带有两个圆圈的维恩图来想象它,结果表是绿色突出显示的部分,其中包括公共/重叠部分和左侧圆圈的其余部分。
左外连接的维恩图表示
语法如下所示。您会看到它类似于 Inner Join 语法,但添加了LEFT关键字。
SELECT columns
FROM table1
LEFT JOIN table2
ON relation;
左外连接
RIGHT OUTER JOIN,或简称为Right Join,将保留与第一个表无关的第二个表中的数据。
您可以用带有两个圆圈的维恩图来想象它,结果表是绿色突出显示的部分,其中包括重叠部分和右侧圆圈的其余部分。
右外连接的维恩图表示
语法如下,唯一的区别是RIGHT关键字。
SELECT columns
FROM table1
RIGHT JOIN table2
ON relation;
右外连接
您可以将 FULL OUTER JOIN 视为左连接和右连接的组合。它将保留两个表中的所有行,缺失的数据将用NULL.
您可以用带有两个圆圈的维恩图来想象它,结果表是绿色突出显示的部分,其中包括所有内容:重叠部分、左圆和右圆。
完全外连接的维恩图表示
语法如下,使用FULL关键字。
SELECT columns
FROM table1
FULL JOIN table2
ON relation;
全外连接
兽医诊所可能的数据库可以有一张用于宠物的表和一张用于主人的表。由于一个所有者可能有多个宠物,因此 pets 表将有一owner_id列指向所有者表。
身份证 | 姓名 | 年龄 | 所有者_ID |
---|---|---|---|
1 | 菲多 | 7 | 1 |
2 | 小姐 | 3 | 1 |
3 | 娘娘腔 | 10 | 2 |
4 | 铜 | 1 | 3 |
5 | 料斗 | 2 | 0 |
身份证 | 姓名 | 电话号码 |
---|---|---|
1 | 约翰尼 | 4567823 |
2 | 奥利 | 7486513 |
3 | 伊莱尼亚 | 3481365 |
4 | 路易丝 | 1685364 |
您可以使用简单的查询来获取一个带有彼此相邻的宠物名称和所有者名称的表。让我们用所有不同的 JOIN 运算符来做。
让我们首先使用JOIN.
在这种情况下,你会SELECT选择在pets表中的列name(并将其重命名pet_name)。然后从owners表中选择列name,并将其重命名为owner.。这将是这样的:SELECT pets.name AS pet_name, owners.name AS owner
。
接着,可以使用FROM关键字声明列来自pets表,并使用JOIN关键字声明想与owners表进行连接:FROM pets JOIN owner
。
最后,当需要加入的两列一一对应时,使用ON关键字将pets表的owner_id与owners表的id使用等号连接起来: pets.owner_id = owners.id
。
这是全部:
SELECT pets.name AS pet_name, owners.name AS owner
FROM pets
JOIN owners
ON pets.owner_id = owners.id;
您将得到如下表格,其中仅包括与主人有关的宠物和与宠物有关的主人。
宠物名称 | 所有者 |
---|---|
菲多 | 约翰尼 |
小姐 | 约翰尼 |
娘娘腔 | 奥利 |
铜 | 伊莱尼亚 |
让我们执行相同的查询,LEFT JOIN以便您可以看到不同之处。除了添加LEFT关键字之外,查询是相同的。
SELECT pets.name AS pet_name, owners.name AS owner
FROM pets
LEFT JOIN owners
ON pets.owner_id = owners.id;
在这种情况下,左表中的行pets, 全部保留,当owners表中缺少数据时,用 填充NULL。
宠物名称 | 所有者 |
---|---|
菲多 | 约翰尼 |
小姐 | 约翰尼 |
娘娘腔 | 奥利 |
铜 | 伊莱尼亚 |
料斗 | 空 |
似乎有一只宠物没有在主人那里注册。
如果您使用 using 执行相同的查询RIGHT JOIN,则会得到不同的结果。
SELECT pets.name AS pet_name, owners.name AS owner
FROM pets
RIGHT JOIN owners
ON pets.owner_id = owners.id;
在这种情况下,右表中的所有行owners, 都被保留,如果有缺失值,则用 填充NULL。
宠物名称 | 所有者 |
---|---|
菲多 | 约翰尼 |
小姐 | 约翰尼 |
娘娘腔 | 奥利 |
铜 | 伊莱尼亚 |
空 | 路易丝 |
似乎有一个没有注册宠物的主人。
您可以再次执行相同的查询,使用FULL JOIN.
SELECT pets.name AS pet_name, owners.name AS owner
FROM pets
FULL JOIN owners
ON pets.owner_id = owners.id;
结果表再次不同——在这种情况下,两个表中的所有行都被保留。
宠物名称 | 所有者 |
---|---|
菲多 | 约翰尼 |
小姐 | 约翰尼 |
娘娘腔 | 奥利 |
铜 | 伊莱尼亚 |
料斗 | 空 |
空 | 路易丝 |
在我们的数据库中似乎有没有主人的宠物和没有宠物的主人。
关于“SQL的内连接和外连接怎么用”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注亿速云行业资讯频道,小编每天都会为大家更新不同的知识点。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。