📜  “内连接”和“外连接”的区别

📅  最后修改于: 2021-09-28 09:59:14             🧑  作者: Mango

加入:
SQL 中的联接用于在特定条件下组合来自多个表的行,这是两个表的列之间的关系。并且有不同类型的连接,在本文中让我们介绍 INNER JOIN 和 OUTER JOIN 以及它们的区别。

让我们考虑两个表studentlocation并通过使用不同的连接组合表来查看差异的外观。
表格1 –

student_id student_name
     12       Gupta
     16       Girish
     17       Gupta
     14        Kunal
     15        Krishna
     18        Satish

学生

表 2 –

student_id student_location
       12   Delhi 
       13   Madras
       15    Tamil Nadu 
       14    Mumbai
       16    Telangana
        20     Punjab

地点

首先,使用MSSQL作为服务器创建表并将数据插入表中:

  • 使用以下查询创建学生表和位置 –

创建了两个表

  • 使用以下查询将行插入学生表和位置 –

插入数据到表中

  • 使用以下查询查看表 –

查看表中的数据

连接类型:

1. 内连接

  • 平等加入
  • 自加入

2. 外连接

  • 左加入
  • 右加入
  • 全面加入

1. 内连接:
当使用内连接时,它只考虑我们想要匹配表的那些属性,如果不匹配,则不会包含在我们的结果表中。
两种类型的内连接 –

  • 平等加入 –
    它是 Inner Join 的子类别,仅限于表中的相等条件。当且仅当查询中存在相等条件时,才称该联接为 Equi join。
    上述两个表上Equi Join的查询:
SELECT * FROM 
student 
INNER JOIN 
location
ON 
student.student_id = location.student_id;

输出表——

  • 自加入 –
    Self Join 将同一张表视为另一个表,并在满足所需条件后输出结果表。

Self Join的查询在上面两个表中:

SELECT s1.student_id ,s1.student_name FROM 
student s1
INNER JOIN 
student s2 
ON 
s1.student_name= s2.student_name AND s1.student_id<> s2.student_id;

输出表——

内连接的维恩图表示

2. 外连接:
在外连接中,我们完全或同时考虑任何表,使得两个表中不匹配的剩余字段保持为 NULL。

三种类型的外连接 –
1. 左连接或(左外连接)-
在左连接中,我们完全考虑左表和右表中匹配的属性(基于条件),以及左表与右表不匹配的属性相对于左表中的列放置为 NULL。
Left Join的查询在上面两个表中:

SELECT * FROM 
student 
LEFT JOIN 
location
ON 
student.student_id = location.student_id;

输出表:

左连接的维恩图表示:

加入——
在右连接中,我们完全考虑右表和左表中匹配的属性(基于条件),以及右表与左表不匹配的属性相对于右表中的列放置为 NULL .
Right Join的查询在上面两个表中:

SELECT * FROM 
student 
RIGHT JOIN 
location
ON 
student.student_id = location.student_id;

输出表——

右连接的维恩图表示 –

完全加入 –
它是左连接和右连接的并集,其中考虑了左表和右表的所有列,其中左表或右表的未匹配或未找到的属性将在结果表中放置为 NULL。
Full Join的查询在上面两个表中:

SELECT * FROM 
student 
FULL JOIN 
location
ON 
student.student_id = location.student_id;

输出表——

完整连接的维恩图表示 –