UNION 用于归拢四个或多少个 SELECT 语句的结果集,UNION查询的语法是

文章介绍了利用union
all实现多表多数据进行查询的实现,有需要的朋友可以参考一下下面的实例哦。

union是一个联合查询,他可以选择2个或更多的表的数据集进来各类操作,有时我们要过滤重复等都是可以的,好面来看看实例吧。

一、UNION和UNION ALL的作用和语法

UNION ALL 的语法如下:

UNION查询,让您结合2个或更多的选择查询的结果集。它消除了各种选择报表之间的重复行。

UNION 用于合并两个或多个 SELECT 语句的结果集,并消去表中任何重复行。
UNION 内部的 SELECT
语句必须拥有相同数量的列,列也必须拥有相似的数据类型。
同时,每条 SELECT 语句中的列的顺序必须相同.
SQL UNION 语法:

[SQL 语句 1]UNION ALL[SQL 语句 2]

每个内部查询的SQL语句必须在结果中相同的字段数套类似的数据类型。

复制代码 代码如下:

我们用和同样的例子来显示出 UNION ALL 和 UNION 的不同

UNION查询的语法是:

SELECT column_name FROM table1
UNION
SELECT column_name FROM table2

UNION
ALL查询允许您结合的结果,设置2个或更多的select查询。它返回的所有行。

代码如下复制代码 select field1, field2, . field_nfrom tablesUNIONselect
field1, field2, . field_nfrom tables;

注释:默认地,UNION 操作符选取不同的值。如果允许重复的值,请使用 UNION
ALL。
当 ALL 随 UNION 一起使用时(即 UNION ALL),不消除重复行
SQL UNION ALL 语法

联盟内的每个SQL语句的所有查询必须在结果中相同的字段数套类似的数据类型。

Example #1

复制代码 代码如下:

语法一个UNION ALL查询:

The following is an example of a UNION query:

SELECT column_name FROM table1
UNION ALL
SELECT column_name FROM table2

代码如下复制代码

代码如下复制代码

注释:另外,UNION 结果集中的列名总是等于 UNION 中第一个 SELECT
语句中的列名。
注意:1、UNION 结果集中的列名总是等于第一个 SELECT 语句中的列名
2、UNION 内部的 SELECT
语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT
语句中的列的顺序必须相同

select field1, field2, . field_nfrom tablesUNION ALLselect field1,
field2, . field_nfrom tables;

select supplier_idfrom suppliersUNIONselect supplier_idfrom orders;

二、union的用法及注意事项

实例

在这个例子中,如果supplier_id出现在供应商和订单表,它会出现在您的结果集一次。会删除重复内容。

union:联合的意思,即把两次或多次查询结果合并起来。
要求:两次查询的列数必须一致
推荐:列的类型可以不一样,但推荐查询的每一列,想对应的类型以一样
可以来自多张表的数据:多次sql语句取出的列名可以不一致,此时以第一个sql语句的列名为准。
如果不同的语句中取出的行,有完全相同(这里表示的是每个列的值都相同),那么union会将相同的行合并,最终只保留一行。也可以这样理解,union会去掉重复的行。
如果不想去掉重复的行,可以使用union all。
如果子句中有order
by,limit,需用括号()包起来。推荐放到所有子句之后,即对最终合并的结果来排序或筛选。
如:

代码如下复制代码

例#2 – ORDER BY子句

复制代码 代码如下:

select supplier_idfrom suppliersUNION ALLselect supplier_idfrom
orders;

下面是一个UNION查询,使用ORDER BY子句

(select * from a order by id) union (select * from b order id);

如果supplier_id出现在供应商和订单表,它会多次出现在你的结果集。union
查询不会删除重复。

代码如下复制代码 select supplier_id, supplier_namefrom supplierswhere
supplier_id 2000UNIONselect company_id, company_namefrom
companieswhere company_id 1000ORDER BY 2;

在子句中,order by
需要配合limit使用才有意义。如果不配合limit使用,会被语法分析器优化分析时去除。

下面看实例来过滤重复的

问:我需要比较两个日期和返回日期值的基础上的一个字段计数。例如,我在一个表的日期字段称为最后更新日期。我要检查,如果TRUNC。

**三、学习例子

代码如下复制代码

答:由于您使用的是这是一个聚合函数COUNT函数,我们建议你使用UNION查询。例如,你可以尝试以下方法:

**下面的例子中使用的原始表:
Employees_China:

select supplier_id, supplier_namefrom supplierswhere supplier_id
2000UNION ALLselect company_id, company_namefrom companieswhere
company_id 1000ORDER BY 2;

代码如下复制代码

复制代码 代码如下:

这样就KO了哈。

SELECT a.code as Code, a.name as Name, count(b.Ncode)FROM cdmaster a,
nmmaster bWHERE a.code = b.codeand a.status = 1and b.status = 1and
b.Ncode ‘a10’and trunc(last_updated_date) = trunc(sysdate-13)group by
a.code, a.nameUNIONSELECT a.code as Code, a.name as Name,
count(b.Ncode)FROM cdmaster a, nmmaster bWHERE a.code = b.codeand
a.status = 1and b.status = 1and b.Ncode ‘a10’and
trunc(last_updated_date) trunc(sysdate-13)group by a.code, a.name;

E_ID E_Name
01 Zhang, Hua
02 Wang, Wei
03 Carter, Thomas
04 Yang, Ming

Employees_USA:

复制代码 代码如下:

相关文章

You can leave a response, or trackback from your own site.

Leave a Reply

网站地图xml地图