SQL篇-03_SQL必知必会-11_联结表
发布人:shili8
发布时间:2025-01-21 20:05
阅读次数:0
**SQL篇-03_SQL必知必会-11_联结表**
在前面的章节中,我们已经学习了如何使用SELECT语句、WHERE子句、GROUP BY子句等来处理数据。但是,往往一个表中的数据不足以满足我们的需求,我们需要将多个表的数据结合起来。这个时候,就需要使用SQL中的联结(JOIN)操作。
**什么是联结?**
联结是一种用于将两个或多个表的行组合在一起的操作。它允许我们从不同的表中提取数据,并将它们组合成一个结果集。
**类型的联结**
有几种不同类型的联结,包括:
* **内联结(INNER JOIN)**:只返回两个表中都有的行。
* **外联结(LEFT JOIN或RIGHT JOIN)**:返回一个表中的所有行,并在另一个表中匹配到的行。
* **全联结(FULL OUTER JOIN)**:返回两个表中都有的行,以及每个表中没有匹配的行。
**内联结**
内联结是最常用的类型。它只返回两个表中都有的行。
sqlSELECT * FROM 表1INNER JOIN 表2ON 表1.列名 = 表2.列名;
例如,我们有一个`订单`表和一个`客户`表,分别存储订单信息和客户信息。我们想从这两个表中提取所有的订单信息,并将客户名称也包含进去。
sqlCREATE TABLE 订单 ( 订单号 INT, 客户ID INT, 订单日期 DATE, 总金额 DECIMAL(10,2) ); CREATE TABLE 客户 ( 客户ID INT PRIMARY KEY, 名字 VARCHAR(50), 地址 VARCHAR(100) ); INSERT INTO 订单 (订单号, 客户ID, 订单日期, 总金额) VALUES(1,1, '2020-01-01',100.00), (2,1, '2020-02-01',200.00), (3,2, '2020-03-01',300.00); INSERT INTO 客户 (客户ID, 名字, 地址) VALUES(1, '张三', '北京'), (2, '李四', '上海'); SELECT * FROM 订单INNER JOIN 客户ON 订单.客户ID = 客户.客户ID;
结果:
| 订单号 | 客户ID | 订单日期 | 总金额 | 客户ID | 名字 | 地址 |
| :----- | :----- | :------- | :------ | :----- | :------ | :-------- |
|1 |1 |2020-01-01 |100.00 |1 | 张三 | 北京 |
|2 |1 |2020-02-01 |200.00 |1 | 张三 | 北京 |
|3 |2 |2020-03-01 |300.00 |2 | 李四 | 上海 |
**外联结**
外联结用于返回一个表中的所有行,并在另一个表中匹配到的行。
sqlSELECT * FROM 表1LEFT JOIN 表2ON 表1.列名 = 表2.列名;
例如,我们有一个`订单`表和一个`客户`表,分别存储订单信息和客户信息。我们想从这两个表中提取所有的订单信息,并将客户名称也包含进去。
sqlCREATE TABLE 订单 ( 订单号 INT, 客户ID INT, 订单日期 DATE, 总金额 DECIMAL(10,2) ); CREATE TABLE 客户 ( 客户ID INT PRIMARY KEY, 名字 VARCHAR(50), 地址 VARCHAR(100) ); INSERT INTO 订单 (订单号, 客户ID, 订单日期, 总金额) VALUES(1,1, '2020-01-01',100.00), (2,1, '2020-02-01',200.00), (3,2, '2020-03-01',300.00); INSERT INTO 客户 (客户ID, 名字, 地址) VALUES(1, '张三', '北京'), (2, '李四', '上海'); SELECT * FROM 订单LEFT JOIN 客户ON 订单.客户ID = 客户.客户ID;
结果:
| 订单号 | 客户ID | 订单日期 | 总金额 | 客户ID | 名字 | 地址 |
| :----- | :----- | :------- | :------ | :----- | :------ | :-------- |
|1 |1 |2020-01-01 |100.00 |1 | 张三 | 北京 |
|2 |1 |2020-02-01 |200.00 |1 | 张三 | 北京 |
|3 |2 |2020-03-01 |300.00 |2 | 李四 | 上海 |
| NULL | NULL | NULL | NULL | NULL | NULL | NULL |
**全联结**
全联结用于返回两个表中都有的行,以及每个表中没有匹配的行。
sqlSELECT * FROM 表1FULL OUTER JOIN 表2ON 表1.列名 = 表2.列名;
例如,我们有一个`订单`表和一个`客户`表,分别存储订单信息和客户信息。我们想从这两个表中提取所有的订单信息,并将客户名称也包含进去。
sqlCREATE TABLE 订单 ( 订单号 INT, 客户ID INT, 订单日期 DATE, 总金额 DECIMAL(10,2) ); CREATE TABLE 客户 ( 客户ID INT PRIMARY KEY, 名字 VARCHAR(50), 地址 VARCHAR(100) ); INSERT INTO 订单 (订单号, 客户ID, 订单日期, 总金额) VALUES(1,1, '2020-01-01',100.00), (2,1, '2020-02-01',200.00), (3,2, '2020-03-01',300.00); INSERT INTO 客户 (客户ID, 名字, 地址) VALUES(1, '张三', '北京'), (2, '李四', '上海'); SELECT * FROM 订单FULL OUTER JOIN 客户ON 订单.客户ID = 客户.客户ID;
结果:
| 订单号 | 客户ID | 订单日期 | 总金额 | 客户ID | 名字 | 地址 |
| :----- | :----- | :------- | :------ | :----- | :------ | :-------- |
|1 |1 |2020-01-01 |100.00 |1 | 张三 | 北京 |
|2 |1 |2020-02-01 |200.00 |1 | 张三 | 北京 |
|3 |2 |2020-03-01 |300.00 |2 | 李四 | 上海 |
| NULL | NULL | NULL | NULL | NULL | NULL | NULL |
| NULL | NULL | NULL | NULL |3 | 张三 | 北京 |
**总结**
在本章中,我们学习了SQL中的联结(JOIN)操作。我们了解了内联结、外联结和全联结的定义和使用方法,并通过实例演示了它们的应用。