一个θ连接,equijoin和自然连接之间的区别

当遇到theta连接,equijoins和自然连接时,我无法理解关系代数。 有人能帮助我更好地理解吗? 如果我在theta上使用=号,那么和刚才使用的自然连接完全一样吗?

theta连接允许任意比较关系(如≥)。

equijoin是使用相等运算符的theta连接。

自然连接是在每个关系中具有相同名称的属性上的等同连接。

另外,自然连接删除参与相等比较的重复列,因此每个比较列只有1个保留; 用粗糙的关系代数术语: ⋈ = π R,S- a s ○ ⋈ a R = a S

尽pipe解释确切差异的答案没有问题,但我想说明关系代数是如何转化为SQL的,以及这三个概念的实际价值是什么。

你的问题的关键概念是join的想法。 为了理解一个连接,你需要理解一个笛卡尔乘积(这个例子是基于SQL的,当等价物被称为交叉连接的时候,按照oneday指出);

这在实践中并不是很有用。 考虑这个例子。

 Product(PName, Price) ==================== Laptop, 1500 Car, 20000 Airplane, 3000000 Component(PName, CName, Cost) ============================= Laptop, CPU, 500 Laptop, hdd, 300 Laptop, case, 700 Car, wheels, 1000 

笛卡尔产品产品x组件将是 – 波纹pipe或sql小提琴 。 你可以看到有12行= 3×4。显然,“笔记本电脑”与“车轮”行没有任何意义,这就是为什么在实践中,笛卡尔产品很less使用。

 | PNAME | PRICE | CNAME | COST | -------------------------------------- | Laptop | 1500 | CPU | 500 | | Laptop | 1500 | hdd | 300 | | Laptop | 1500 | case | 700 | | Laptop | 1500 | wheels | 1000 | | Car | 20000 | CPU | 500 | | Car | 20000 | hdd | 300 | | Car | 20000 | case | 700 | | Car | 20000 | wheels | 1000 | | Airplane | 3000000 | CPU | 500 | | Airplane | 3000000 | hdd | 300 | | Airplane | 3000000 | case | 700 | | Airplane | 3000000 | wheels | 1000 | 

JOINs在这里为这些产品增加更多的价值。 我们真正想要的是将产品与其关联的组件“连接”,因为每个组件都属于产品。 做到这一点的方法是join:

产品JOIN组件在Pname上

关联的SQL查询就像这样(你可以在这里玩所有的例子)

 SELECT * FROM Product JOIN Component ON Product.Pname = Component.Pname 

结果是:

 | PNAME | PRICE | CNAME | COST | ---------------------------------- | Laptop | 1500 | CPU | 500 | | Laptop | 1500 | hdd | 300 | | Laptop | 1500 | case | 700 | | Car | 20000 | wheels | 1000 | 

注意结果只有4行,因为笔记本电脑有3个组件,Car有1个,Airplane没有。 这是非常有用的。

回到你的问题,你问的所有连接都是我刚刚展示的JOIN的变体:

自然连接 =连接(ON子句)在所有具有相同名称的列上进行; 它会从结果中删除重复的列,而不是所有其他联接。 大多数DBMS(由微软的SQL Server,Oracle的MySQL等不同厂商创build的数据库系统)甚至不会支持这一点,这只是不好的做法(或故意select不实施它)。 想象一下,开发者来了,并将产品中第二列的名称从价格更改为成本。 然后所有的自然连接都将在PName和Cost上完成,结果为0行,因为没有数字匹配。

Theta Join =这是每个人都使用的普通连接,因为它允许你指定条件(SQL中的ON子句)。 您可以join任何您喜欢的条件,例如在具有类似前两个字母或具有不同价格的产品上。 在实践中,这种情况很less – 95%的情况下,你将join平等条件,这导致我们:

Equi Join =在实践中使用最常见的一种。 上面的例子是一个equi连接。 数据库针对这种types的连接进行了优化! equi连接的对立方式是非等连接,也就是当你join“=”以外的条件时。 数据库没有为此优化! 他们都是一般thetajoin的子集。 自然连接也是一个theta连接,但条件(theta)是隐含的。

信息来源:大学+authentication的SQL Server开发人员+最近完成了斯坦福大学的“数据库入门”,所以我敢说我有关系代数的新思想。

@ outis的答案是好的:就关系而言简洁而正确。

但是,就SQL而言情况稍微复杂一些。

考虑通常的供应商和零件数据库,但在SQL中实现:

 SELECT * FROM S NATURAL JOIN SP; 

将返回结果集**与列

SNO, SNAME, STATUS, CITY, PNO, QTY

连接在两个表中的名称相同的列SNO 。 请注意,结果集有6列,只包含一列SNO

现在考虑一个theta eqijoin,其中必须明确指定连接的列名(加上范围variablesSSP是必需的):

 SELECT * FROM S JOIN SP ON S.SNO = SP.SNO; 

结果集将包含七列,其中包括两列SNO 。 结果集的名称是SQL标准所称的“依赖于实现”,但可能如下所示:

SNO, SNAME, STATUS, CITY, SNO, PNO, QTY

或者也许这个

S.SNO, SNAME, STATUS, CITY, SP.SNO, PNO, QTY

换句话说,SQL中的NATURAL JOIN可以被认为是从结果集中删除带有重复名称的列(但是alas不会删除重复的行 – 你必须记得自己把SELECT改为SELECT DISTINCT )。


**我不太清楚SELECT * FROM table_expression;的结果SELECT * FROM table_expression; 是。 我知道这不是一个关系,因为,除了其他原因,它可以有重名的列或没有名字的列。 我知道这不是一个集合,因为除此之外,列顺序是重要的。 这甚至不是SQL表或SQL表expression式。 我称之为结果集。

自然是Equi的一个子集,是Theta的一个子集。

如果我在Theta上使用=号,就和使用自然连接完全一样。

不一定,但它会是一个Equi。 自然意味着你匹配所有名字相同的列,Equi只意味着你只使用'='(而不是'小于',比如等)

不过,这是纯粹的学术界,你可以使用关系数据库多年,从来没有听到任何人使用这些术语。

theta连接允许任意的比较关系。

equijoin是使用相等运算符的theta连接。

Equijoin当您只使用相等运算符查询连接时,那么该连接查询就属于Equi连接。

Equijoin示例 SELECT * FROM Emp JOIN Dept ON Emp.DeptID = Dept.DeptID; SELECT * FROM Emp INNER JOIN Dept USING(DeptID)

这将显示Emp.Name Emp.DeptID Dept.Name Dept.DeptID作为输出。

Thetajoin当您使用任何运算符(例如,=,<,>,> =等)对连接进行查询时,则该连接查询将在Theta join下进行。

  **NOTE: Equi join is also a theta join!** 

自然连接自然连接是一种通过比较两个表中所有相同名称列隐式发生的等连接types。 请注意,在这里,连接结果对于每对相同的命名列只有一列。

自然连接示例 SELECT * FROM Emp NATURAL JOIN Dept

这将显示DeptID Emp.Name Dept.Name作为输出。

两个表的笛卡尔乘积给出了所有可能的元组组合,如math中的例子,两组的叉积。 因为许多时候有一些垃圾值在内存中占据了不必要的空间,所以这里join了救援,这些救援只给出了那些必要和有意义的属性值的组合。

内部连接在表中重复的字段两次,而自然连接在这里只通过过滤重复的列并只显示一次来解决问题。这两者的作用相同。 自然连接更加高效,因为它保留了内存。同时,自然连接中的冗余被删除。

两个表的equi连接是这样的,它们只显示那些匹配其他表中的值的元组。 例如:让new1和new2是两个表。 如果sql查询select * from new1在new1.id = new.id(id是两个表中的同一列)上joinnew2,则从new2表开始,并与第二个表中的id相匹配的join。 另外,非等联运营商之间没有平等运营商,而且运营商之间。

theta连接由所有比较运算符组成,包括相等和其他<,>比较运算符。 当它使用相等(=)运算符时,它被称为equi连接。

自然连接:当两个关系中至less有一个共同的属性时,自然连接是可能的。

Theta连接:Theta连接可以在两个特定的条件下运行。

Equi加盟:Equi可以在两个股权条件下行事。 这是一种theta连接。