合并查询的操作符
如果必须合并两个或多个查询的结果集,并将每个查询返回的所有行显示为一个结果集,那么应该使用哪个操作符?解决方案是使用联盟操作符。UNION有两个选择- UNION和UNION ALL。
除MySQl外,大多数平台(如DB2、Oracle、SQL server和Postgre SQL)都支持集合操作符UNION或UNION ALL。如果您想重新收集关于表、SQL数据库操作和编程的信息,那么面向初学者的SQL数据库和6天学习SQL都是很好的复习课程。如果您需要关于编写SQL查询和学习如何构建应用程序或生成业务报告的进一步指导,请参阅SQL培训简介.
UNION Statement -它是关于什么的?
UNION命令用于从两个表中选择相关信息,类似于JOIN命令,但不同之处在于JOIN组合了两个表中的列。使用UNION,默认情况下只选择不同的值。UNION语句有效地对结果集执行SELECT DISTINCT。
当使用UNION时,请记住在所有查询中列的顺序、数量和数据类型应该相同。数据类型不必相同,但应该兼容。例如,CHAR和VARCHAR是兼容的数据类型。
SQL Server中的UNION语句
UNION操作符用于组合两个或多个SELECT语句的结果集。
下面是一些在SQL中使用UNION的简单规则:
UNION中的每个SELECT语句必须具有相同数量的列,并且列必须具有类似或兼容的数据类型。
每个SELECT语句中的列必须顺序相同。
如果两个表的列大小不同,那么在返回数据时,SQL server将使用两个列中较大的一个。因此,如果一个SELECT....联盟statement has a CHAR (5) and CHAR (10) column, then it will display output data of both the columns as a CHAR (10) column.
如果表中的列有不同的列名,那么通常使用第一个查询的列名。
SQL联盟的语法:
SELECT column_name(s) FROM table1
联盟
SELECT column_name(s) FROM table2;
SQL Server中的UNION ALL语句
UNION ALL命令与UNION命令类似,区别在于UNION ALL选择所有值。因此,使用UNION ALL不会消除重复行,而是包括它们。这个操作符只是从满足查询的所有表中提取所有行,并将它们合并到一个表中。如果您确定从UNION操作返回的所有记录都是惟一的,那么使用UNION all是更好的选择,因为它可以提供更快的结果。UNION ALL的结果是未排序的。因此,在获得结果之后,可以通过使用最后一个SELECT语句的ORDER by子句对它们进行排序。
SQL UNION ALL语法:
SELECT column_name(s) FROM table1
UNION ALL
SELECT column_name(s) FROM table2;
Oracle中的UNION和UNION ALL
Oracle在以下情况下不支持UNION或UNION ALL查询:
- 包含LONG、BLOB、CLOB、BFILE或VARRAY数据类型列的查询。
- 包含FOR UPDATE子句或TABLE集合表达式的查询。
UNION和UNION ALL语句的例子
为了比较UNION和UNION ALL,让我们取下包含City、State和Zip列的“Contacts”表。
城市国家邮政编码
纳什维尔TN 37235
劳伦斯KS 66049
科瓦利斯或97333
UNION ALLSQL语句
如果我们应用UNION ALL SQL语句,那么我们将合并两个查询,这两个查询将检索并合并来自Tennessee (' TN ')的记录两次。
选择城市,州,邮政
从联系人
WHERE State IN (' KS ', ' TN ')
UNION ALL
SELECT City, State, Zip FROM Contacts WHERE IN (' OR ' TN ')
UNION ALL语法的结果:
城市国家邮政编码
纳什维尔TN 37235
劳伦斯KS 66049
纳什维尔TN 37235
科瓦利斯或97333
使用UNION ALL语法,TN记录出现两次,因为两个SELECT语句都检索TN记录。
联盟SQL语句
我们现在通过编写语法来使用SQL UNION命令:
SELECT City, State, Zip FROM Contacts WHERE State IN (' KS ', ' TN ')
联盟
SELECT City, State, Zip FROM Contacts WHERE IN (' OR ' TN ')
UNION查询的结果如下:
城市国家邮政编码
科瓦利斯或97333
劳伦斯KS 66049
纳什维尔TN 37235
注意,TN记录只出现一次,尽管两个SELECT语句都检索TN记录。UNION语法自动消除两个SQL语句之间的重复记录,并对结果进行排序。结果显示的记录是按字母顺序排序的,因此Corvallis记录首先出现,即使它来自第二个SELECT语句。可以在末尾添加GROUP BY子句对列表进行排序。
根据定义,UNION查询消除了所有重复的行,与UNION all相比,它要慢一些,因为它要执行排序操作。要在SQL Server中做到这一点,UNION语句必须在两个查询返回的所有列上构建一个临时索引。如果无法为查询构建索引,则会得到一个SQL错误。在这种情况下,最好使用UNION ALL语句。
在DB2数据库系统中,可以使用UNION和UNION ALL以及VALUES子句。
结论
如果您还记得使用UNION和UNION ALL的简单规则以及相同的语法,那么根据您的需求组合表就变成了一项简单的任务。如果您想研究基本的SQL查询和其他代码语句,那么检查是一个好主意SQL查询101.如果你想收集关于Oracle SQL和Oracle PL/SQL编程的知识,那么它可能值得一看Oracle SQL简介,或Oracle PL/SQL教程-一个全面的培训课程.