您的位置:首页 > 数据库

SQL读书笔记(九) UNION

2016-03-06 10:34 211 查看
笔记参考自SQL必知必会,写下读书时的笔记,方便以后查询阅读,也希望能帮到各位道友哦~

利用UNION操作符将多条SELECT语句组合成一个结果集。

UNION其实不难,也就注意几点就行,UNION ALL包括重复行,而UNION不包含。

很简单的例子就是,如果有两个人名字相同但是职业不同,但我们使用UNION输出所有人时只会输出其中的一人,而UNION ALL则会全输出。。

按我的理解什么时候使用UNION呢,就是我们需要从多个表中去找数据时,就类似我们要统计所有产品的顾客,而产品之间没有联系,自成一张表,我们就需要用UNION来输出所有的顾客集

主要有两种情况需要使用组合查询:

在一个查询中从不同的表返回结构数据;

对一个表执行多个查询,按一个查询返回数据。

多数情况下,组合相同表的两个查询所完成的工作与具有多个WHERE子句条件的一个查询所完成的工作相同。换句话说,任何具有多个WHERE子句的SELECT语句都可以作为一个组合查询,在下面可以看到这一点。

举个例子,假如需要Illinois、Indiana和Michigan等美国几个州的所有顾客的报表,还想包括不管位于哪个州的所有的Fun4All。当然可以利用WHERE子句来完成此工作,不过这次我们使用UNION。

SELECT cust_name, cust_contact, cust_email FROM Customers WHERE cust_state IN ('IL','IN','MI');
SELECT cust_name, cust_contact, cust_email FROM Customers WHERE cust_name = 'Fun4All';


可以通过两个查询语句完成上述步骤

SELECT cust_name, cust_contact, cust_email
FROM Customers
WHERE cust_state IN ('IL','IN','MI')
UNION
SELECT cust_name, cust_contact, cust_email
FROM Customers
WHERE cust_name = 'Fun4All';


这条语句由前面的两条SELECT语句组成,之间用UNION关键字分隔。UNION指示DBMS执行这两条SELECT语句,并把输出组合成一个查询结果集。

SELECT cust_name, cust_contact, cust_email
FROM Customers
WHERE cust_state IN ('IL','IN','MI')
OR cust_name = 'Fun4All';


在这个简单的例子中,使用UNION可能比使用WHERE子句更为复杂。但对于较复杂的过滤条件,或者从多个表(而不是一个表)中检索数据的 情形,使用UNION可能会使处理更简单。

UNION规则

可以看到,UNION非常容易使用,但在进行组合时需要注意几条规则。

UNION必须由两条或两条以上的SELECT语句组成,语句之间用关键字UNION分隔(因此,如果组合四条SELECT语句,将要使用三 个UNION关键字)。

UNION中的每个查询必须包含相同的列、表达式或聚集函数(不过,各个列不需要以相同的次序列出)。

列数据类型必须兼容:类型不必完全相同,但必须是DBMS可以隐含转换的类型(例如,不同的数值类型或不同的日期类型)。 如果遵守了这些基本规则或限制,则可以将UNION用于任何数据检索操作。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: