SQL JOIN的类型

SQL JOIN的类型

SQL JOIN

一个 SQL Join 用于基于定义的条件从两个或多个表中提取或合并数据(行或列)。

表1:Order

OrderID CustomerID OrderName ProductName
12025 101 Peter ABC
12030 105 Robert XYX
12032 110 James XYZ
12034 115 Andrew PQR
12035 120 Mathew AAA

表2:Customer

CustomerID CustomerName Country
100 Messy Maxico
101 Prince Taiwan
103 Maria Fernandez Turkey
105 Jasmine Paris
110 Faf Weasel Indonesia
120 Romen Rocket Russia

现在,我们有两个表格 OrderCustomer 。这两个表格中都有一个共同的 CustomerID 列。因此,编写SQL查询来定义通用关系,以选择两个表格中匹配记录的内容。

Select Order.OrderID, Customer.CustomerName, Customer.Country, Order.ProductName from Order INNER JOIN Customer ON Order.CustomerID = Customer.CustomerID;

在执行以上SQL查询后,会产生以下输出:

OrderID CustomerName Country ProductName
12025 Prince Taiwan ABC
12030 Jasmine Paris XYX
12032 Faf Weasel Indonesia XYZ
12035 Romen Rocket Russia AAA

SQL的连接类型

SQL中有不同类型的连接:

  1. 内连接/简单连接
  2. 左外连接/左连接
  3. 右外连接/右连接
  4. 全外连接
  5. 交叉连接
  6. 自连接

内连接

内连接用于选择在两个表中匹配的所有行或列,只要在SQL中满足定义的条件。

语法:

Select column_1, column_2, column_3 FROM table_1 INNER JOIN table_2 ON table_1.column = table_2.column;

我们可以通过以下方式用Venn图表示内连接:

SQL JOIN的类型

表格1:学生

Student_ID StudentName Subject TeacherID
101 Alexandra Computer Science T201
102 Charles Economics T202
103 Tom Cruise Computer Science T201
104 Aron Finch Electronics T203
105 Siemen Bajoff Web designing T204
106 Christopher English Literature T205
107 Denim Fashion Designer T206

表2:教师

TeacherID TeacherName TeacherEmail
T201 Mr Davis stash
T202 Mrs Jonas stash
T201 Mr Davis stash
T204 Mrs Lopez stash
T205 Mrs Wiley stash
T206 Mr Bean stash

我们有两个表: 学生表教师表 。让我们使用 INNER JOIN 编写SQL查询来连接这两个表,如下所示:

Select Student_ID, StudentName, TeacherName, TeacherEmail FROM Students INNER JOIN Teachers ON Students.TeacherID = Teachers.TeacherID; 

执行查询后,生成以下表格。

SQL JOIN的类型

自然连接

它是一种基于相同列名并在两个或多个表中具有相同数据类型的内连接类型。

语法:

Select * from tablename1 Natural JOIN tablename_2;

我们有两个表: 学生表教师表 。让我们使用 自然连接 编写SQL查询来联接这两个表,如下所示:

Select * from Students Natural JOIN Teachers;

执行上述查询后,将产生以下表格。

SQL JOIN的类型

左连接

使用 左连接 从左表(表1)检索所有记录以及与右表(表2)匹配的行或列。如果两个表都不包含任何匹配的行或列,则返回NULL。

语法:

Select column_1, column_2, column(s) FROM table_1 LEFT JOIN table_2 ON table_1.column_name = table_2.column_name;

我们还可以通过维恩图来表示左连接,如下所示:

SQL JOIN的类型

注意:在一些数据库中,LEFT JOIN 也称为 LEFT OUTER JOIN。

表 1:产品详情

ProductID ProductName Amount
Pro101 Laptop 56000
Pro102 Mobile 38000
Pro103 Headphones 5000
Pro104 Television 25000
Pro105 iPad 60000

表2:Customer_Details

CustomerName CustomerAddress CustomerAge ProductID
Martin Guptill San Francisco, USA 26 Pro101
James Australia 29 Pro103
Ambati Williamson New Zealand 27 Pro102
Jofra Archer South Africa 24 Pro105
Kate Wiley Australia 20 Pro103

我们有两个表: Product_DetailsCustomer_Details 表。让我们编写SQL查询来使用 LEFT JOIN 连接表,如下所示:

Select ID, ProductName, CustomerName, CustomerAddress, Amount FROM Product_Details LEFT JOIN Customer_Details ON Product_Details.ID = Customer_Details.ProductID;

在执行查询后,将生成以下表格。

SQL JOIN的类型

RIGHT JOIN或RIGHT Outer JOIN:

RIGHT JOIN 用于从右表(table2)检索所有记录以及左表(table1)中的匹配行或列。如果两个表都不包含任何匹配的行或列,则返回NULL。

语法:

Select column_1, column_2, column(s) FROM table_1 RIGHT JOIN table_2 ON table_1.column_name = table_2.column_name;

我们也可以通过维恩图来表示右连接,如下所示:

SQL JOIN的类型

注意:在一些数据库中,RIGHT JOIN 也被称为 RIGHT OUTER JOIN。

Table 1: Product_Details

ID ProductName Amount
Pro101 Laptop 56000
Pro102 Mobile 38000
Pro103 Headphones 5000
Pro104 Television 25000
Pro105 iPad 60000

表格2:客户详细信息

CustomerName CustomerAddress CustomerAge ProductID
马丁·古普蒂尔 美国旧金山 26 Pro101
詹姆斯 澳大利亚 29 Pro103
安巴蒂·威廉姆森 新西兰 27 Pro102
乔夫拉·阿彻尔 南非 24 Pro105
奥曼 英格兰 29 Pro107
摩根 英格兰 20 Pro108

我们有两个表: Product_DetailsCustomer_Details 表。让我们写一个使用 RIGHT JOIN 连接这两个表的 SQL 查询语句,如下所示:

Select ID, ProductName, CustomerName, CustomerAddress, Amount FROM Product_Details LEFT JOIN Customer_Details ON Product_Details.ID = Customer_Details.ProductID;

查询执行后,将产生以下表格。

SQL JOIN的类型

FULL JOIN或FULL Outer JOIN:

它是LEFT JOIN和RIGHT JOIN的组合结果集。连接的表返回来自两个表的所有记录,如果在表中找不到匹配项,则将其置为NULL。它也被称为 FULL OUTER JOIN

语法:

Select column_1, column_2, column(s) FROM table_1 FULL JOIN table_2 ON table_1.column_name = table_2.column_name;

或者, FULL OUTER JOIN

Select column_1, column_2, column(s) FROM table_1 FULL OUTER JOIN table_2 ON table_1.column_name = table_2.column_name;

我们也可以通过维恩图来表示全外连接,如下所示:

SQL JOIN的类型

表 1:产品详情

ID ProductName Amount
Pro101 Laptop 56000
Pro102 Mobile 38000
Pro103 Headphones 5000
Pro104 Television 25000
Pro105 iPad 60000

Table 2: 客户详细信息

CustomerName CustomerAddress CustomerAge ProductID
Martin Guptill San Francisco, USA 26 Pro101
James Australia 29 Pro103
Ambati Williamson New Zealand 27 Pro102
Jofra Archer South Africa 24 Pro105
Omen England 29 Pro107
Morgan England 20 Pro108

我们有两个表: Product_DetailsCustomer_Details 表。让我们使用 FULL JOIN编写SQL查询来连接这两个表,如下所示:

Select ID, ProductName, CustomerName, CustomerAddress, Amount FROM Product_Details FULL JOIN Customer_Details ON Product_Details.ID = Customer_Details.ProductID;

执行查询后,生成下面的表格。

SQL JOIN的类型

注意:MySQL不支持完全连接的概念,因此我们可以使用UNION ALL子句将两个表合并。

这是组合表的 UNION ALL 子句的语法。

Select ID, ProductName, CustomerName, CustomerAddress, Amount FROM Product_Details LEFT JOIN Customer_Details ON Product_Details.ID = Customer_Details.ProductID
UNION ALL
Select ID, ProductName, CustomerName, CustomerAddress, Amount FROM Product_Details RIGHT JOIN Customer_Details ON Product_Details.ID = Customer_Details.ProductID

SQL JOIN的类型

跨连接

也被称为 CARTESIAN JOIN(笛卡尔积) ,它返回两个或多个连接表的笛卡尔积。跨连接 CROSS JOIN(叉连接) 产生一个将第一个表的每一行与第二个表的每一行合并的表。在CROSS JOIN中不需要包含任何条件。

语法:

Select * from table_1 cross join table_2;

或者,

Select column1, column2, column3 FROM table_1, table_2;

表格 1:产品详情

ID ProductName Amount
Pro101 Laptop 56000
Pro102 Mobile 38000
Pro103 Headphones 5000
Pro104 Television 25000
Pro105 iPad 60000

表2:顾客详细信息

CustomerName CustomerAddress CustomerAge ProductID
Martin Guptill San Francisco, USA 26 Pro101
James Australia 29 Pro103
Ambati Williamson New Zealand 27 Pro102
Jofra Archer South Africa 24 Pro105
Omen England 29 Pro107
Morgan England 20 Pro108

我们有两个表: Product_DetailsCustomer_Details 表。让我们使用 FULL JOIN编写SQL查询来连接这两个表,如下所示:

Select ID, ProductName, CustomerName, CustomerAddress, Amount FROM Product_Details, Customer_Details;

执行查询后,生成如下表格。

SQL JOIN的类型

自连接

这是一种自连接,用于通过将其自身连接起来来创建一个表,就像有两个表一样。它在SQL语句中至少给一个表起临时名称。

语法:

Select column1, column2, column(s) FROM table_1 Tbl1, table_2 Tbl2 WHERE condition;

Tbl1Tbl2 是同一张表的两个不同的表别名。

表1:Product_Details

ID ProductName Amount
Pro101 Laptop 56000
Pro102 Mobile 38000
Pro103 Headphones 5000
Pro104 Television 25000
Pro105 iPad 60000

让我们编写SQL查询来使用 自连接 表作为下文的示例:

Select TB.ID, TB.ProductName FROM Product_Details TB, Product_Details TB2
WHERE TB.AMOUNT < TB2.AMOUNT;

执行查询后,会生成下面的表格。

SQL JOIN的类型

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程