UNION、EXCEPT 以及 I 查询。执行用这些集合运算 不同的结果。
|
NTERSECT 集合运算符使您能够 符连接的每个查询并组合各个查
|
将两个或更多外层查询组合成单个 询的结果。根据运算符不同,产生
|
UNION 运算符通过组合 行而派生出一个结果表。当 种情况下,派生表的每一行
|
其他两个结果表(例如 TABLE1 ALL 随 UNION 一起使用时(即 不是来自 TABLE1 就是来自 TAB
|
和 TABLE2)并消去表中任何重复 UNION ALL),不消除重复行。两 LE2。
|
在下列 UNION 运算符 8 年的人员的姓名:
|
的示例中,查询返回薪水高于 $
|
21,000、有管理责任且工龄少于
|
| SELECT ID, NAME FROM STAFF WHERE SALARY > 21000 |
| SELECT ID, NAME FROM STAFF WHERE JOB='Mgr' AND YEARS < 8 |
| 数据库管理程序组合这两个查询的结果,消除重复行,并按升序返回最终结果。 |
如果在带有任何集合运算符的查询中 该子句。系统对组合的回答集进行排序。 列的名称。替代地,将这些列按其出现的 须在 ORDER BY 子句中指定列号。
|
使用 ORDER BY 子句,则必须在最后一个查询之后写 如果两个表中的列名不同,则组合的结果表没有相应 顺序编号。因此,如果想要对结果表进行排序,则必
|
EXCEPT 运算符通过包括所有在 TABL 生出一个结果表。当 ALL 随 EXCEPT 一
|
E1 中但不在 TABLE2 中的行并消除所有重复行而派 起使用时 (EXCEPT ALL),不消除重复行。
|
在下列 EXCEPT 运算符 8 年或更长的所有人员的姓
|
的示例中,查询返回收入超过 $ 名。
|
21,000 但没有经理职位且工龄为
|
| SELECT ID, NAME FROM STAFF WHERE SALARY > 21000 |
| SELECT ID, NAME FROM STAFF WHERE JOB='Mgr' AND YEARS < 8 |
| 各个查询的结果在关于 UNION 的一节中列出。上面的语句产生下列结果: |
INTERSECT 运算符通过只包括 TABLE 一个结果表。当 ALL 随 INTERSECT 一起
|
1 和 TABLE2 中都有的行并消除所有重复行而派生出 使用时 (INTERSECT ALL),不消除重复行。
|
在下列 INTERSECT 运 于8年的雇员的姓名和 ID。
|
算符的示例中,查询返回收入超
|
过 ,000 有管理责任且工龄少
|
| SELECT ID, NAME FROM STAFF WHERE SALARY > 21000 |
| SELECT ID, NAME FROM STAFF WHERE JOB='Mgr' AND YEARS < 8 |
各个查询的结果在关于 :
|
UNION 的一节中列出。这两个
|
使用 INTERSECT 的查询的结果为
|
5、当使用 UNION、EXC
|
EPT 以及 INTERSECT 运算符时
|
,记住下列事项:
|
运算符的查询选择列表中的所有对应 Reference 中的数据类型相容性表。
|
项必须是相容的。有关更多信息,参见 SQL
|
ORDER BY 子句(如果使用该子句的 对于每个运算符来说,如果列的名称与查 ORDER BY 子句中使用。
|
话)必须放在最后一个带有集合运算符的查询后面。 询的选择列表中对应项的名称相同,则该列名只能在
|
在具有相同数据类型和 针对 UNION、EXCEPT 以及 类型的规则。
|
相同长度的列之间进行的运算会 INTERSECT 集合运算符的结果,
|
产生一个具有该类型和长度的列。 参见 SQL Reference 中结果数据
|
|