SQL JOIN的类型
SQL JOIN的类型 SQL联接 SQL Join用于根据定义的条件从两个或多个表中获取或合并数据(行或列)…
SQL JOIN的类型
SQL联接
SQL Join用于根据定义的条件从两个或多个表中获取或合并数据(行或列)。
表1:订单
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:客户
CustomerID | CustomerName | Country |
---|---|---|
100 | Messy | Maxico |
101 | Prince | Taiwan |
103 | Maria Fernandez | Turkey |
105 | Jasmine | Paris |
110 | Faf Weasel | Indonesia |
120 | Romen Rocket | Russia |
现在,我们有两个表Order和Customer。两个表中共有一个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中使用了不同类型的联接:
- 内部联接/简单联接
- 左外联接/左联接
- 右外连接/右连接
- 完全外部加入
- 交叉连接
- 自我加入
内部联接
内部联接用于选择两个表中所有匹配的行或列,或者只要定义的条件在SQL中有效即可。
句法:
Select column_1, column_2, column_3 FROM table_1 INNER JOIN table_2 ON table_1.column = table_2.column;
我们可以通过维恩图表示内部联接,如下所示:
表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 | [email protected] |
T202 | Mrs Jonas | [email protected] |
T201 | Mr Davis | [email protected] |
T204 | Mrs Lopez | [email protected] |
T205 | Mrs Wiley | [email protected] |
T206 | Mr Bean | [email protected] |
我们有两个表:学生表和教师表。让我们使用INNER JOIN编写SQL查询以联接表,如下所示:
Select Student_ID, StudentName, TeacherName, TeacherEmail FROM Students INNER JOIN Teachers ON Students.TeacherID = Teachers.TeacherID;
执行查询后,将产生下表。
自然加入
它是一种内部类型,它根据相同的列名连接两个或多个表,并且两个表上都具有相同的数据类型。
句法:
Select * from tablename1 Natural JOIN tablename_2;
我们有两个表:学生表和教师表。让我们使用Natural JOIN编写SQL查询来联接表,如下所示:
Select * from Students Natural JOIN Teachers;
执行上述查询后,将产生下表。
左联接
LEFT 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;
我们还可以通过维恩图表示左连接,如下所示:
注意:在某些数据库中,LEFT JOIN也称为LEFT OUTER JOIN。
表1:Product_Details
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_Details和Customer_Details表。让我们使用LEFT JOIN编写SQL查询来联接表,如下所示:
Select ID, ProductName, CustomerName, CustomerAddress, Amount FROM Product_Details LEFT JOIN Customer_Details ON Product_Details.ID = Customer_Details.ProductID;
执行查询后,它将产生下表。
正确的联接或正确的外部联接:
RIGHT JOIN用于从右表(表2)检索所有记录,并从左表(表1)检索匹配的行或列。如果两个表都不包含任何匹配的行或列,则返回NULL。
句法:
Select column_1, column_2, column(s) FROM table_1 RIGHT JOIN table_2 ON table_1.column_name = table_2.column_name;
我们还可以通过维恩图表示正确的联接,如下所示:
注意:在某些数据库中,RIGHT JOIN也称为RIGHT OUTER JOIN。
表1:Product_Details
ID | 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 |
Omen | England | 29 | Pro107 |
Morgan | England | 20 | Pro108 |
我们有两个表:Product_Details和Customer_Details表。让我们使用RIGHT JOIN编写连接表的SQL查询,如下所示:
Select ID, ProductName, CustomerName, CustomerAddress, Amount FROM Product_Details LEFT JOIN Customer_Details ON Product_Details.ID = Customer_Details.ProductID;
执行查询后,将产生下表。
完全加入或完全外部加入:
它是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;
或者,完全外部联接
Select column_1, column_2, column(s) FROM table_1 FULL OUTER JOIN table_2 ON table_1.column_name = table_2.column_name;
我们还可以通过维恩图表示完整的外部联接,如下所示:
表1:Product_Details
ID | 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 |
Omen | England | 29 | Pro107 |
Morgan | England | 20 | Pro108 |
我们有两个表:Product_Details和Customer_Details表。让我们使用FULL JOIN编写SQL查询来联接表,如下所示:
Select ID, ProductName, CustomerName, CustomerAddress, Amount FROM Product_Details FULL JOIN Customer_Details ON Product_Details.ID = Customer_Details.ProductID;
执行查询后,将产生下表。
注意:MySQL不支持FULL JOIN概念,因此我们可以使用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
交叉加入
它也称为CARTESIAN JOIN,它返回两个或多个联接表的笛卡尔积。 CROSS JOIN生成一个表,该表将第一张表中的每一行与第二张表中的每一行合并。不需要在CROSS JOIN中包含任何条件。
句法:
Select * from table_1 cross join table_2;
要么,
Select column1, column2, column3 FROM table_1, table_2;
表1:Product_Details
ID | 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 |
Omen | England | 29 | Pro107 |
Morgan | England | 20 | Pro108 |
我们有两个表:Product_Details和Customer_Details表。让我们使用FULL JOIN编写SQL查询来联接表,如下所示:
Select ID, ProductName, CustomerName, CustomerAddress, Amount FROM Product_Details, Customer_Details;
执行查询后,将产生下表。
自我加入
这是一个SELF JOIN,用于通过连接自身来创建表,因为有两个表。它对SQL语句中的至少一个表进行临时命名。
句法:
Select column1, column2, column(s) FROM table_1 Tbl1, table_2 Tbl2 WHERE condition;
Tbl1和Tbl2是同一表的两个不同的表别名。
表1:Product_Details
ID | ProductName | Amount |
---|---|---|
Pro101 | Laptop | 56000 |
Pro102 | Mobile | 38000 |
Pro103 | Headphones | 5000 |
Pro104 | Television | 25000 |
Pro105 | iPad | 60000 |
让我们使用SELF JOIN编写SQL查询来联接表,如下所示:
Select TB.ID, TB.ProductName FROM Product_Details TB, Product_Details TB2 WHERE TB.AMOUNT < TB2.AMOUNT;
执行查询后,将产生下表。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 wper_net@163.com 删除。
还没有任何评论,赶紧来占个楼吧!