Oracle之子查询
来源:互联网 发布:淘宝十大女装店 编辑:程序博客网 时间:2024/03/29 07:07
6.1.1
在一个查询的内部嵌套另外一个查询,则此查询称为子查询
语法结构如下:
SELECT(DISTINCT)*|查询列1 别名1,查询列2 别名2...
FROM 表名称1 别名1,表名称2 别名2(...一个完整的查询)
(WHERE 条件)
(...一个完整的查询)
(GROUP BY 分组条件)(HAVING 分组条件)
(ORDER BY 排序字段 ASC|DESC,排序字段 ASC|DESC)
范例:
要求查询出比 empno 为7654工资要搞的全部雇员的信息
分析:
1、首先要查询出7654该员工的工资
SELECT sal FROM emp WHERE empno=7654;
2、查询比其工资高的雇员信息
SELECT * FROM emp
WHERE sal>(SELECT sal FROM emp WHERE empno=7654);
所有的子查询必须在“()”中编写代码
子查询在操作中分为以下三类:
单列子查询:返回的结果是一列的一个内容(最多)
单行子查询:返回多个列,有可能是一条完整的记录
多行子查询:返回多条记录
范例;要求查询出工资比7654高,同时与7788从事相同工作的全部雇员的信息
分析:1、查询出7654雇员的工资
SELECT sal FROM emp WHERE empno=7654;
2、查询出工作一样的雇员
SELECT job FROM emp WHERE job=(SELECT job FROM emp WHERE empno=7788);
3、综合查询
SELECT * FROM EMP
WHERE sal>(SELECT sal FROM emp WHERE empno=7654) and
job =(SELECT job FROM emp WHERE empno=7788);
范例:要求查询出工资最低的雇员姓名、工作、和工资
SELECT ename,job,sal
FROM emp
WHERE sal=(SELECT MIN(sal) FROM emp);
以最低工资为条件进行下一步查询出其详细信息
SELECT *
FROM emp
WHERE sal=(SELECT MIN(sal) FROM emp);
范例:要求查询出,部门名称、部门的员工数、部门的平均工资、部门的最低收入雇员的姓名;
分析:程序需要两张表关联 dept emp
1、如果要想求出每个部门的员工数量,及平均工资,则肯定需要使用分组统计,按照deptno进行分组,
SELECT deptno ,COUNT(empno),AVG(sal)
FROM emp
GROUP BY deptno;
2、但是如果要查出来部门的名称,则需要与dept表进行关联,必须要去掉笛卡尔积
所以我们要使用 第一步查询出来的结果(3条记录) 我们将它作为一张临时表 来查询
我们给它一个别名为 ed
SELECT d.dname,ed.c,ed.a
FROM dept d,(SELECT deptno ,COUNT(empno) c,AVG(sal) a
FROM emp
GROUP BY deptno) ed
WHERE d.deptno=ed.deptno;
3、求出最高及最低收入的雇员姓名 因为关联了雇员姓名所以要通过sal字段来关联
(如果此时在一个部门中同时出现2个工资最低的雇员则程序出错,该语句仅作语法研究)
SELECT d.dname,ed.c,ed.a,e.ename
FROM dept d,(SELECT deptno ,COUNT(empno) c,AVG(sal) a,
MIN(sal) min
FROM emp
GROUP BY deptno) ed ,emp e
WHERE d.deptno=ed.deptno and e.sal=ed.min;
在子查询中,存在以下三种查询的操作符号:
1、IN
2、ANY
3、ALL
IN 范例:求出每个部门的最低工资的雇员信息
每个部门的最低工资,返回值肯定是多个,所以此时可以使用IN指定一个操作范围
SELECT * FROM emp
WHERE sal IN (SELECT MIN(sal) FROM emp GROUP BY deptno);
ANY 操作
=ANY:于IN德操作符功能完全一样
>ANY: 比里面最小的值要大
<ANY: 比里面最大的值要小
ALL操作:
>ALL: 比里面最大的值要大
<ALL: 比里面最小的值要小
对于子查询来讲,还可以进行多列子查询,一个子查询可以同时返回多个查询的列
范例:
SELECT sal,NVL(comm,-1)
FROM emp
WHERE (sal,NVL(comm,-1)) IN (SELECT sal,NVL(comm,-1) FROM emp WHERE deptno=20);
- Oracle之子查询
- Oracle之子查询
- oracle数据库之子查询
- Oracle之子查询
- Oracle笔记之子查询
- oracle之子查询常用
- Oracle数据库之子查询
- Oracle之子查询
- oracle强化练习之子查询
- oracle SQL语句之子查询
- 10-Oracle入门之子查询
- Oracle数据库笔记之子查询
- ORACLE多表查询之子查询
- Oracle数据库的查询之子查询(六)
- oracle 基本语句学习 (三)之子查询
- Oracle之子查询(认证考试指南)
- Oracle常用sql语句(三)之子查询
- SQL数据库之子查询
- sql server 2005
- 导出Excel
- javascript图片展示效果
- Northwind数据库的查询结果绑定到gridview的问题
- Oracle之组函数及分组统计(重点)
- Oracle之子查询
- 测试资料
- 面向对象的基础 摘抄笔记
- 寻找我的快乐
- 第一天
- 第一章 概 论
- 第 二 章 线 性 表
- 一点杂记
- [Ext入门]图文详解Ext常见开发工具的安装使用(转)