您的位置:首页 > 数据库 > Oracle

原创:oracle 子查询介绍<七>

2011-04-16 19:57 351 查看
前几节课中我们渐渐的对oracle的知识,有了进一步的了解与掌握,随着时间的推移,在这节课程中我们来讲解SQL子查询的知识,希望通过授课中的内容对你有所帮助!

 

Java代码

 




子查询概念 :当一个查询的结果是另一个查询的条件时,称之为子查询。   

使用子查询注意事项:   

         子查询可以嵌套多层   

         子查询需要圆括号()括起来   

子查询语法:   

SELECT  select_list    

FROM    table    

WHERE   expr operator   

            (SELECT select_list    

               FROM     table);   

?   子查询 (内查询) 在主查询之前一次执行完成。   

?   子查询的结果被主查询使用 (外查询)。   

举例:查询员工的工资大于JONES的员工信息   

分析过程如下:   

首先:查询JONES的员工工资是多少 :结果2975  

SQL> select sal from emp where ename='JONES';   

实际上我们要查询的是:薪资大于2975的员工的信息写法如下:   

SQL> select * from emp where sal>2975;   

//综合以上写出子查询的结果如下:   

SQL> select * from emp where sal>(select sal from emp where ename='JONES');   

注意:   

?   子查询要包含在括号内。    

?   将子查询放在比较条件的右侧。   

  

根据查询的结果(内部嵌套查询的结果)把子查询的类型分为单行子查询与多行子查询,   

   注意:   

?   单行操作符对应单行子查询,多行操作符对应多行子查询。   

单行操作符   

>、>=、 <、 <= 、<>、=   

举例:   

//查询编号7876相同职位的员工信息 并且薪资大于编号为7521的薪资的员工信息   

SQL> select * from emp where job=( select job from emp where empno=7876) and sal>( select sal from emp where empno=7521);   

//子查询含有组函数   

SQL> select * from emp where sal>(select avg(nvl(sal,0)) from emp);   

//子查询含有having子句 查询部门的最小工资大于20号部门最小工资的部门号及最小工资数   

SQL> select deptno,min(sal) from emp group by deptno having min(sal)>( select min(sal) from emp where deptno=20);   

  

备注:子查询可以返回空行 没要查询到结果是可以的。   

  

多行子查询   

?    返回多行。   

?   使用多行比较操作符。   

操作符如下图:   

操作符 描述   

In  等于列表中的任何一个   

Any 子查询返回的任意一个值比较 相同还有some   

All 和子查询返回的所有值比较     

Exists     

  

//查询薪水小于工作岗位CLERK的任何一个薪资的员工信息 并且不包含工作岗位为CLERK的员工信息   

SQL> select * from emp where sal < any (select sal from emp where job='CLERK') and job<>'CLERK';   

//all与所有值比较 >all 代表的是大于查询结果的最大值   

SQL> select * from emp where sal > all (select sal from emp where job='CLERK') and job<>'CLERK';   

//查询岗位与部门编号为10相同的员工信息 不包含自己。   

SQL> select * from emp where job in(select job from emp where deptno=10) and deptno<>10;   

  

只做思考?   

  

SQL> select * from emp where exists(select * from dept);   

    

EMPNO ENAME  JOB        MGR HIREDATE       SAL      COMM DEPTNO   

----- ---------- --------- ----- ----------- --------- --------- ------   

 7369 SMITH   CLERK   7902 1980-12-17    800.00               20  

 7499 ALLEN   SALESMAN  7698 1981-2-20   1600.00    300.00     30  

 7521 WARD   SALESMAN  7698 1981-2-22   1250.00    500.00     30  

 …..   

    

SQL> select * from emp where exists(select * from dept where deptno=80);   

    

EMPNO ENAME  JOB        MGR HIREDATE       SAL      COMM DEPTNO   

----- ---------- --------- ----- ----------- --------- --------- ------   

  

  

以上内容版权归redarmy_chen所有,如需转载请附带出处,如有疑问请发送邮件至redarmy_chen@qq.com  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  oracle list 工作 java sql