当前位置:实例文章 » JAVA Web实例» [文章]SQL篇-03_SQL必知必会-11_联结表

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)操作。我们了解了内联结、外联结和全联结的定义和使用方法,并通过实例演示了它们的应用。

其他信息

其他资源

Top