ANY子查询和ALL子查询
查询出Emp表中比任意一个销售员(“SALESMAN”)工资低的员工姓名、工作、工资。
销售员在Emp表中有很多条记录,每个人工资不相等,如果返回“比任意员工的工资还低”的条件,返回比“最高工资还低”即可。如果用子查询做,子查询中就会返回多条记录。用普通的关系符(>、<等)运行就会出错。这时候需要用关键字ANY。ANY放在比较运算符后面,表示“任意”的意思
SQL> SELECT ENAME,JOB,SAL FROM EMP 2 WHERE SAL<ANY (SELECT SAL FROM EMP WHERE JOB='SALESMAN') ① 3 /
7 rows selected |
代码解析:
① <any:比子查询结果中任意的值都小,也就是说,比子查询结果中最大值还小,那么同理>any表示比子查询结果中最小值还大。
===================================================================================================================
查询出比所有销售员的工资都高的员工姓名,工作,工资。
ANY可以表示任意的,但本案例中要求比所有销售员工资都高,那么就要使用另外一个关键字ALL。ALL与关系操作符一起使用,表示与子查询中所有元素比较。
SQL> SELECT ENAME,JOB,SAL FROM EMP 2 WHERE SAL>ALL (SELECT SAL FROM EMP WHERE JOB='SALESMAN') ① 3 /
6 rows selected |
代码解析:① >ALL:比子查询结果中所有值还要大,也就是说,比子查询结果中最大值还要大。<ALL表示比最小值还要小。
对于子查询还可以使用IN和NOT IN操作符进行操作。
总结:【ANY】
“比任意一个销售员工资低”==“比最高销售员工资低”;
“比任意一个销售员工资高”==“比最低销售员工资高”;
【ALL】
“比所有销售员工资都低”==“比最低销售员工资低”;
“比所有销售员工资都高”==“比最高销售员工资高”;