oracle入门04
2011-04-17 15:51
211 查看
子查询
子查询概念 :当一个查询的结果是另一个查询的条件时,称之为子查询。
使用子查询注意事项:
子查询可以嵌套多层
子查询需要圆括号()括起来
子查询语法:
SELECT select_list
FROM table
WHERE expr
operator
(SELECT select_list
FROM table);
l
子查询 (内查询) 在主查询之前一次执行完成。
l
子查询的结果被主查询使用 (外查询)。
举例:查询员工的工资大于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');
注意:
l
子查询要包含在括号内。
l
将子查询放在比较条件的右侧。
根据查询的结果(内部嵌套查询的结果)把子查询的类型分为单行子查询与多行子查询,
注意:
l
单行操作符对应单行子查询,多行操作符对应多行子查询。
单行操作符
>、>=、 <、 <= 、<>、=
举例:
//查询编号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);
备注:子查询可以返回空行 没要查询到结果是可以的。
多行子查询
l
返回多行。
l
使用多行比较操作符。
操作符如下图:
//查询薪水小于工作岗位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
3 rows selected
SQL> select * from emp where
exists(select * from dept where deptno=80);
EMPNO ENAME JOB
MGR HIREDATE SAL COMM DEPTNO
----- ---------- ---------
----- ----------- --------- --------- ------
子查询概念 :当一个查询的结果是另一个查询的条件时,称之为子查询。
使用子查询注意事项:
子查询可以嵌套多层
子查询需要圆括号()括起来
子查询语法:
SELECT select_list
FROM table
WHERE expr
operator
(SELECT select_list
FROM table);
l
子查询 (内查询) 在主查询之前一次执行完成。
l
子查询的结果被主查询使用 (外查询)。
举例:查询员工的工资大于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');
注意:
l
子查询要包含在括号内。
l
将子查询放在比较条件的右侧。
根据查询的结果(内部嵌套查询的结果)把子查询的类型分为单行子查询与多行子查询,
注意:
l
单行操作符对应单行子查询,多行操作符对应多行子查询。
单行操作符
>、>=、 <、 <= 、<>、=
举例:
//查询编号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);
备注:子查询可以返回空行 没要查询到结果是可以的。
多行子查询
l
返回多行。
l
使用多行比较操作符。
操作符如下图:
操作符 | 描述 |
In | 等于列表中的任何一个 |
Any | 子查询返回的任意一个值比较 相同还有some |
All | 和子查询返回的所有值比较 |
Exists |
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
3 rows selected
SQL> select * from emp where
exists(select * from dept where deptno=80);
EMPNO ENAME JOB
MGR HIREDATE SAL COMM DEPTNO
----- ---------- ---------
----- ----------- --------- --------- ------
相关文章推荐
- 04-Oracle入门之简单select语句
- oracle入门04
- 04.风哥Oracle数据库实战入门-Oracle安装配置视频教程
- ASP.NET MVC3+EF4+Oracle入门实例(一)
- Oracle入门第四天(上)——表管理与数据处理
- Oracle RMAN快速入门指南
- Oracle_SQL练习_04
- Oracle-04-用SQL*PLUS创建用户&新用户授权等
- Oracle PL/SQL入门之慨述
- java 从零开始,学习笔记之基础入门<Oracle_基础>(三十三)
- Oracle 的入门心得
- 超全的学习资料——Oracle 从入门到精通
- oracle包(package)入门——应用实例
- oracle 基础学习04 -----游标 包
- 04_XML_01_入门基础
- Oracle经典教程(入门到精通很详细)
- Oracle入门-3包
- [原]java专业程序代写(qq:928900200),学习笔记之基础入门<Oracle_函数_触发器_游标_存储过程_视图>(三十五)
- 数据库基础知识点一:Oracle入门,数据库基本操作,函数
- oracle任务入门