12

我正在经历联合和联合所有逻辑并尝试示例。令我困惑的是,为什么两个表中的列数必须相同才能执行联合或联合所有操作?

如果我的问题很愚蠢,请原谅我,但我无法在任何地方得到确切的答案。从概念上讲,只要存在一个公共列,合并两个表应该很容易对吧?(如连接操作)。但事实并非如此,我想知道为什么?

4

5 回答 5

13

JOIN 操作不需要在两个表中选择相同数量的列。UNION 操作与连接不同。可以将其视为两个单独的数据列表,可以将它们“粘贴”到一个大块中。您不能有不匹配的列。

另一种看待它的方法是 JOIN 这样做:

TableA.Col1, TableA.Col2 .... TableB.Col1, TableB.Col2

一个 UNION 这样做:

TableA.Col1, TableA.Col2
TableB.Col1, TableB.Col2

JOINS 向行添加列,UNIONS 向现有行添加更多行。这就是为什么他们必须“匹配”。

马特

于 2013-01-31T05:02:42.017 回答
2

假设您有 EMPTable,其列和值如下:id、name、address、salary、DOB 1、'SAM'、'2 Merck Ln'、100000、'08/18/1980'

如果您只想使用列名进行 UNION(假设值是 'TOBY'),这意味着您必须将其他值默认为 NULL(智能软件或数据库可以为您隐式执行此操作),本质上转换为以下(防止关系表的完整性)->

1, 'SAM', '2 Merck Ln', 100000, '08/18/1980'
UNION
NULL,'TOBY', NULL, NULL, NULL

根据定义,“联合”是同一类或类型的(不同)值的合并。

于 2014-09-24T18:57:00.280 回答
2

加入运营combines columns from two tables

其中 Union 和 Union all combines two results sets,所以为了组合两个结果,您需要具有相同数量的列和兼容的数据类型。

在现实世界中,例如,为了玩板球比赛,您需要两队都有 11 名球员,不允许一支球队有 7 名球员,不允许对方球队有 11 名球员。

于 2013-01-31T05:02:11.673 回答
1

UNION您需要研究和之间的区别JOIN

基本上,UNION当您想从一个源(表、视图、表组等)获取记录并将这些结果与来自另一个源的记录组合时使用。它们必须具有相同的列才能获得一组共同的结果。

当您JOIN想将来自一个来源的记录与另一个来源连接时使用。根据您的需要,有几种类型的 JOIN(INNER、LEFT、RIGHT 等)。使用 JOIN 时,您可以指定所需的任何列。

祝你好运。

于 2013-01-31T05:02:25.327 回答
0

当我们想从两个或多个表中获取数据时,基本上使用连接,并且为此不需要获取相同数量的列,考虑使用规范化概念将表分为两部分的情况,

emp [eid, ename,edob,esal] emp_info [eid,emob_no]

在这里,我想知道姓名和手机号码。在所有员工中,我们将使用联接的概念,因为这里我们需要的信息不能由同一张表提供。

所以我们将使用..

SELECT E.ENAME,EI.EMOB_NO 从 EMP E, EMP_INFO EI WHERE E.EID = EI.EID AND LOWER(E.ENAME)='john' ;

现在考虑一下我们想要找到在银行拥有储蓄账户和贷款账户的员工的情况。这里我们想从两个表结果中找到常见的元组。为此,我们将使用集合操作。[路口]

对于集合操作,必须满足 2 个条件。

  1. 相同的编号 必须从每个表中获取属性。

  2. 每个属性的域必须相同或与更高的兼容...

于 2013-01-31T05:14:29.583 回答