SQL - 使用UNION加入?? UNION使用JOIN?

rkd*_*rkd 7 sql database union join

在我的一次采访中我被问到了这个问题.你能用UNION关键字做JOIN吗?你能用JOIN关键字做UNION吗?

那是 - 1.我应该得到与JOIN相同的输出而不使用JOIN关键字,但使用UNION关键字?2.我应该获得与UNION相同的输出而不使用UNION关键字,但使用JOIN关键字?

如果可能的话,你能给我一个如何做到这一点的例子吗?

Sep*_*eph 9

由于这是一个面试问题,他们正在测试您对这两个功能的理解.

他们期待的可能答案是"通常不会因为执行不同的操作而无法执行此操作",您可以通过声明联合将行附加到结果集的末尾来进行更详细的解释,其中联接会添加更多列.

您可以使用Join和Union工作的唯一方法是行仅包含来自两个源中的一个的数据:

SELECT A.AA, '' AS BB FROM A
UNION ALL 
SELECT '' AS AA, B.BB FROM B
Run Code Online (Sandbox Code Playgroud)

是相同的:

SELECT ISNULL(A.AA, '') AS AA, ISNULL(B.BB, '') AS BB FROM A
FULL OUTER JOIN B ON 1=0
Run Code Online (Sandbox Code Playgroud)

或者仅使用一个类型匹配的列来执行此操作:

SELECT A.AA AS TT FROM A
UNION ALL 
SELECT B.BB AS TT FROM B
Run Code Online (Sandbox Code Playgroud)

是相同的:

SELECT ISNULL(A.AA, B.AA) AS TT
FROM A
FULL OUTER JOIN B ON 1=0
Run Code Online (Sandbox Code Playgroud)

你要这样做的一个例子是你有多个表生成的数据,但你想看到所有的一起,但是我建议在这种情况下使用UNION而不是FULL OUTER JOIN因为查询正在做你做的事情否则会期望.


one*_*hen 9

面试是您设置商品的框架.记住:不要回答问题;)

想想一个新闻发布会:发言人不打算回答来自journos的疑难问题.相反,他们正在寻找他们已经有答案的问题,作为他们想要发布的信息(而不是更多!)

如果我在一次采访中遇到这个问题,我会用它来证明我对关系代数的了解,因为这就是我在采访中所做的事情.我对"在这里谈论关系代数"问题保持警惕,这就是它.

松散地说,JOIN是逻辑AND的对应物,而UNION是逻辑OR的对应物.因此,使用约定逻辑的类似问题可能是,"你能做和使用OR吗?" 和"你能做或使用AND吗?" 答案取决于你可以使用的其他东西,例如NOT可能派上用场;)

我也很想讨论原始运算符集,计算完整性所需的运算符集以及实际用途所需的运算符和短序集之间的差异.

试图直接回答这个问题会引发更多问题.JOIN意味着关系代数中的"自然连接",而在SQL中则意味着INNER JOIN.如果问题特别涉及SQL,您是否必须回答所有JOIN类型?怎么样UNION JOIN

举一个例子,SQL的外连接是着名的UNION.Chris Date表达的比我希望的更好:

外连接明确地设计为在其结果中产生空值,因此通常应该避免.从关系上讲,它是一种猎枪婚姻:它强制表格成为一种结合 - 是的,我的意思是结合,而不是加入 - 即使有问题的表格不符合通常的结合要求(见第6章).实际上,它通过在进行并集之前用空值填充一个或两个表来实现这一点,从而使它们符合通常的要求.但是没有理由不应该使用适当的值而不是空值来填充

SQL和关系理论,CJ Date第1版

如果"我讨厌空白"是你想在面试中得到的东西,这将是一个很好的讨论点!

这些只是想到的一些想法.关键的一点是,通过询问这些问题,面试官会为您提供一个分支机构.你会怎么样?;)