在mysql中何时使用Union

在mysql中何时使用Union,mysql,sql,select,union,Mysql,Sql,Select,Union,有了联盟,你会在什么样的现实世界中使用它?因为对我来说,在两个具有不同列用途/含义的表中的两个select查询上使用union是没有意义的。例如: 服务员: id name age 1 mark 23 2 shawn 18 表格地址: id personID address 1 1 some address 2 2 another random address 根据上面的表,您将以何种方式或出于任何原

有了联盟,你会在什么样的现实世界中使用它?因为对我来说,在两个具有不同列用途/含义的表中的两个select查询上使用union是没有意义的。例如:

服务员:

id   name    age

1    mark    23
2    shawn   18
表格地址:

id   personID   address

1      1        some address
2      2        another random address
根据上面的表,您将以何种方式或出于任何原因使用联合查询

编辑

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

编辑


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

一个简单的例子是,对于一个非规范化的表,您希望基于给定的原因对其进行规范化(但不更改原始表)。假设您有一个名为Loan_Payments的表,该表具有以下属性:

LoanID, Disbursement_Date, Disbursement_Amount, Refund_Date, Refund_Amount
您希望将其规范化为以下内容(我知道,不是最好的名称):

代码如下所示:

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
当然,还有其他方法可以在一条SQL语句中实现同样的功能(比如使用两个派生表)。但是,您还需要评估查询计划以及性能是否存在差异

作为旁注,如果你问“在一个完美的世界”,这将被用于哪里-这真的就像问“在一个完美的世界”,你为什么需要一个备用轮胎。近二十年来,我还没有找到这个完美的世界。但是,这真的是乐趣的一部分

我希望这有帮助


干杯

问一个关于在什么情况下使用工会的问题有什么错?我不明白这怎么会违反指导原则…@Shadow,这是一个合理的问题。如果你不想回答这个问题,那就继续吧。大多数“现实世界”的情况都是设计糟糕的模式和/或条件优化。(IMHO)当无法使用
JOIN
或任何方法合理检索数据时,您仍然希望在一次查询中提取数据。@BillKarwin如果以正确的方式询问,这是一个合法的问题。这个问题写得很糟糕,在我写Commo的原始版本中,我不清楚OP的目的是什么。我仍然不清楚样本数据的用途是什么,union不能用于此目的。这个问题的语气带有偏见。从投票结果来看,还有其他人在这个问题上有类似的想法。确切地说,工会是为了提高效率。因为假设你有来自多个表的相似信息,并且有几个查询要对这些相似的信息执行,那么对相似的信息进行并集不是更有效吗,从那时起,对它进行查询,而对每个查询总是执行某种类型的联接?但是你是对的,这是因为从来没有足够的时间或需要像设计任何东西一样设计一个完美的数据库,在这种情况下,您需要备份选项。
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