mysql什么时候使用Union

Mar*_*ark 4 mysql sql union select

对于 Union,您会在什么现实情况下使用它?因为对我来说,对具有不同列用途/含义的两个表中的两个选择查询使用联合是没有意义的。例如:

表人:

id   name    age

1    mark    23
2    shawn   18
Run Code Online (Sandbox Code Playgroud)

表地址:

id   personID   address

1      1        some address
2      2        another random address
Run Code Online (Sandbox Code Playgroud)

根据上表,您会以什么方式或出于任何原因使用联合查询?

编辑

基本上我的理解是,为了提高效率,在将不同表中的类似信息处理到一张表中时使用 UNION,而不是总是单独查询或使用 JOIN 来处理类似信息。

编辑

或者当表(DB)的设计没有经过深思熟虑时。因为没有什么可以阻止任何人设计一个不完美的数据库,因为时间限制并且当您不知道表的最终设计的全部范围时。

小智 5

一个简单的示例是,您出于给定原因想要对非标准化表进行标准化(但不更改原始表)。假设您有一个名为 Loan_Disbursements 的表,具有以下属性:

LoanID, Disbursement_Date, Disbursement_Amount, Refund_Date, Refund_Amount
Run Code Online (Sandbox Code Playgroud)

您想将其标准化为以下内容(我知道,不是最好的名称):

LoanID, Activity_Date, Activity_Amount, Activity_Name
Run Code Online (Sandbox Code Playgroud)

代码看起来像这样:

SELECT LoanID, Disbursement_Date AS Activity_Date, Disbursement_Amount AS Activity_Amount, 'Disbursement' AS Activity_Name
FROM Loan_Disbursements

UNION ALL

SELECT LoanID, Refund_Date AS Activity_Date, Refund_Amount AS Activity_Amount, 'Refund' AS Activity_Name
FROM Loan_Disbursements
Run Code Online (Sandbox Code Playgroud)

当然,还有其他方法可以在一个 SQL 语句中实现相同的目的(例如使用两个派生表)。但是,您还需要评估查询计划以及性能是否存在差异。

附带说明一下,如果您问“在完美的世界中”,这会在哪里使用 - 这实际上就像问“在完美的世界中”,为什么需要备胎。快二十年了,我还没有找到这个完美的世界。但是,这确实是乐趣的一部分。

我希望这有帮助。

干杯!