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 语句中实现相同的目的(例如使用两个派生表)。但是,您还需要评估查询计划以及性能是否存在差异。
附带说明一下,如果您问“在完美的世界中”,这会在哪里使用 - 这实际上就像问“在完美的世界中”,为什么需要备胎。快二十年了,我还没有找到这个完美的世界。但是,这确实是乐趣的一部分。
我希望这有帮助。
干杯!