数据准备:
员工表staff
一、集合查询
集合操作主要包括并操作UNION、交操作INTERSECT和差操作EXCEPT。但是INTERSECT和EXCEPT无法在MySQL中使用,只能在oracle中使用.
限定条件:
(1)子结果集的列数必须相同;
(2)对应项的数据类型也必须相同。
(3)子结果集要具有相同的结构。
(4)每个子结果集不能包含order by和compute子句。
1、UINION(并)
并集:返回各子结果集所有记录组合在一起的新结果集。
eg:查询年龄小于26或者性别是'female'的员工信息
等同于:
注:使用UINION时,系统会自动去掉重复元组。若想保留重复元组则用UINION ALL操作符。
2、mysql中利用in实现交集
交集:返回左边结果集和右边结果集中都有的记录
例:查询年龄小于26且性别是'female'的员工信息
3、mysql中利用not in实现差集
差集:返回左边结果集中已经有的记录,而右边结果集中没有的记录
例:查询年龄小于26且性别不是'female'的员工信息
4、结果集的排序
注:ORDER BY是对整个运算后的结果排序,并不是对单个数据集
例:查询年龄小于26或者性别是'female'的员工信息,且根据年龄降序排列。
二、基于派生表的查询
子查询既可以出现在WHERE子句中,还可以出现在FROM子句中,这时子查询生成的临时派生表成为主查询的查询对象。
注:通过FROM子句生成派生表时,AS关键字可以省略,但必须为派生关系指定一个别名
例:查询高于同一部门员工的平均年龄的员工信息。