集合有交集,并集,差集几种。在SQL中的关键字为以下几种
- INTERSECT 交集
返回 INTERSECT 操作数左右两边的两个查询都返回的所有非重复值。
eg: SELECT id FROM table1 INTERSECT SELECT pid FROM table2;
- UNION 并集
UNION ALL 直接连接,取得所有值,记录可能有重复。
UNION 取唯一值,记录没有重复
eg: SELECT id FROM table1 UNION ALL SELECT pid FROM table2;
eg: SELECT id FROM table1 UNION SELECT pid FROM table2;
UNION和UNION ALL 关键字都是将两个结果集合并为一个,但这两者从使用和效率上来说有所不同。
-
- 对重复结果的处理:UNION在进行表链接后会筛选掉重复的记录,UNION ALL 不会去除重复记录。
- 对排序的处理:UNION将会按照字段的顺序进行排序,UNION ALL只是简单的将两个结果合并后就返回
从效率上说,UNION ALL 要比UNION 快很多,所以,如果可以确认合并的两个结果集中不包含重复数据且不需要排序的话,那么就请使用UNION ALL。
- EXCEPT 差集
从 EXCEPT 操作数左边的查询中返回右边的查询未返回的所有非重复值。
eg: SELECT id FROM table1 EXCEPT SELECT pid FROM table2;
注意:
- 通过比较行来确定非重复值时,两个NULL值被视为相等。EXCEPT或INTERSECT返回的结果集的列名与操作数左侧的查询返回的列名相同。
- ORDER BY 字句中的列名或别名必须引用左侧查询返回的列名