关于自然连接

最近在学数据库,逃课的人伤不起啊,只能自己啃书别。

废话不多说,开始正题吧。

自然连接的定义

自然连接( Natural join)是一种特殊的等值连接,它要求两个关系中进行比较的分量必须是相同的属性组,并且在结果中把重复的属性列去掉。而等值连接并不去掉重复的属性列。自然连接自动判断相同名称的列,而后形成匹配。缺点是,虽然可以指定查询结果包括哪些列,但不能人为地指定哪些列被匹配。另外,自然连接的一个特点是连接后的结果表中匹配的列只有一个



然后开始建了两张表:
CREATE TABLE D_SUBJECT2 (
CLASSID VARCHAR(10) NOT NULL,
CLASSNAME VARCHAR(10) NOT NULL,
PRIMARY KEY(CLASSID)
)

CREATE TABLE D_STUDENT2 (
ID VARCHAR(10) NOT NULL,
NAME VARCHAR(10) NOT NULL,
CLASSID VARCHAR(10) NOT NULL,
PRIMARY KEY(ID),
FOREIGN KEY (CLASSID) REFERENCES D_SUBJECT2 (CLASSID)
)

再插入数据
INSERT INTO D_SUBJECT1(CLASSID, CLASSNAME) SELECT ''''2'''',''''ENGLISH'''' FROM DUAL UNION ALL SELECT ''''3'''',''''CHINESE'''' FROM DUAL

INSERT INTO D_STUDENT1(ID, NAME, CLASSID) SELECT ''''2'''',''''liang'''',''''2'''' FROM DUAL UNION ALL SELECT ''''3'''', ''''zhang'''', ''''3'''' FROM DUAL

查询下表得

112947_oulN_858322

113000_7W8B_858322

然后执行查询
SELECT * FROM D_STUDENT2, D_SUBJECT2

结果为

3

这个和预料中的不一样啊,都变成笛卡尔积了,不过书本上是这样写的,纠结了好久,还在社区提问的。后来问了个师兄才知道。

默认这中情况是笛卡尔积的,要自然连接是要这样的:
SELECT * FROM D_STUDENT2 NATURAL JOIN D_SUBJECT2

被书本坑死啦!!!!尽信书不如无书,古人诚不欺我也。
自然连接是一种在关系数据库中常用的连接操作,用于合并两个或多个的数据。 ### 定义 自然连接是一种特殊的等值连接,它会自动根据两个中具有相同名称的列进行匹配,并消除重复的列。也就是说,它会在两个中找出所有同名列的值都相等的行,然后将这些行合并成一行,且只保留一份同名列。 ### 原理 自然连接的工作原理是通过两个中具有相同名称的列自动进行匹配。假设我们有两个 `TableA` 和 `TableB` ,它们分别包含以下列:`TableA` 有 `ID`、`Name`、`Age` 列,`TableB` 有 `ID`、`Name`、`City` 列。自然连接会比较两个中 `ID` 和 `Name` 列的值,将 `ID` 和 `Name` 都相等的行合并成一行,并且只保留一份 `ID` 和 `Name` 列,同时将 `TableA` 中的 `Age` 列和 `TableB` 中的 `City` 列添加到合并后的行中 [^1]。 ### 使用场景 - **数据整合**:当需要将多个相关的数据合并在一起,以获取更全面的信息时,自然连接非常有用。例如,在一个企业数据库中,员工信息包含员工的基本信息,而部门信息包含部门的相关信息,通过自然连接可以将员工信息和部门信息关联起来,方便进行综合查询和分析。 - **报生成**:在生成报时,可能需要从多个中提取数据并进行整合。自然连接可以帮助将相关的数据组合在一起,生成符合需求的报。 ### 示例 假设有两个 `Employees` 和 `Departments`,结构和数据如下: `Employees` : | ID | Name | Age | DepartmentID | |----|------|-----|--------------| | 1 | Alice | 25 | 101 | | 2 | Bob | 30 | 102 | `Departments` : | DepartmentID | DepartmentName | |--------------|----------------| | 101 | HR | | 102 | IT | 使用 SQL 进行自然连接的示例代码如下: ```sql SELECT * FROM Employees NATURAL JOIN Departments; ``` 执行上述查询后,结果如下: | ID | Name | Age | DepartmentID | DepartmentName | |----|------|-----|--------------|----------------| | 1 | Alice | 25 | 101 | HR | | 2 | Bob | 30 | 102 | IT | 在这个示例中,自然连接根据 `Employees` 和 `Departments` 相同的 `DepartmentID` 列进行匹配,将匹配的行合并在一起,并消除了重复的 `DepartmentID` 列。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值