oracle基础(in和exists转换)

发布时间 2023-03-22 21:10:42作者: Argitacos

select * from emp;          --emp全表
select * from dept;          --dept全表

--查询emp表中,工资是800,950,1300或者3000的员工信息

select * from emp where sal in(800,950,1300,3000);          --

转换为exists:

select * from emp e    --emp表简称为e

  where exists (         --替换in,对后面的子查询进行判断是否成立

    select * from (

       select min ( sal ) m from emp group by deptno    --查询emp表中各部门的最低工资,并简称为m

                              --(除聚合函数和分组的列名之外,select后的列名必须写在group by后面)

         ) e2               --e2为select * from (select min ( sal ) m from emp group by deptno)括号内表的简称

        where e2.m = e.sal );        --约束e2中的m列与表中的sal列相等

 

 exists相当于java中的布尔类型,若exists后面的程序成立则运行前面的程序,若不成立则不运行,起判断作用。

因为m列与sal列同在同一程序中,所以可以直接写等于;若不是同一程序,等于的结果则以笛卡尔积的方式呈现。