SQL 必知必会·笔记<12>组合查询

什么是组合查询

SQL 通过执行多个查询(多条SELECT 语句),并将结果作为一个查询结果集返回。这些组合查询通常称为并(union)或复合查询(compound query)。

 

什么时候使用组合查询

 

一般以下两种情况需要使用组合查询:

  • 在一个查询中从不同的表返回结构数据;
  • 对一个表执行多个查询,按一个查询返回数据。

 

提示:组合查询和多个WHERE 条件

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

 

1. 创建组合查询

可用UNION 操作符来组合数条SQL 查询。利用UNION,可给出多条SELECT 语句,将它们的结果组合成一个结果集。

 

使用UNION示例:

1 SELECT cust_name, cust_contact, cust_email
2 FROM Customers
3 WHERE cust_state IN ('IL','IN','MI')
4 UNION
5 SELECT cust_name, cust_contact, cust_email
6 FROM Customers
7 WHERE cust_name = 'Fun4All';

 

UNION规则

  • UNION 必须由两条或两条以上的SELECT 语句组成,语句之间用关键字UNION 分隔。
  • UNION 中的每个查询必须包含相同的列、表达式或聚集函数(不过,各个列不需要以相同的次序列出)。
  • 列数据类型必须兼容:类型不必完全相同,但必须是DBMS 可以隐含转换的类型(例如,不同的数值类型或不同的日期类型)。

 

包含或取消重复的行

默认情况下UNION 从查询结果集中自动去除了重复的行,,如果想返回所有的匹配行,可使用UNION ALL 替换UNION即可。

 

使用UNION ALL:

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

 

提示:UNION 与WHERE

UNION 几乎总是完成与多个WHERE 条件相同 的工作。UNION ALL 为UNION 的一种形式,它完成WHERE 子句完成不了的工作。如果确实需要每个条件的匹配行全部出现(包括重复行), 就必须使用UNION ALL,而不是WHERE。

 

2. 对组合查询结果排序

使用UNION 组合查询时,只能使用一条ORDER BY 子句,它必须位于最后一条SELECT 语句之后

 

提示:操作多个表

UNION 在需要组合多个表的数据时很有用,即使是有不匹配列名的表,在这种情况下,可以将UNION 与别名组合,检索一个结果集。

你可能感兴趣的:(sql)