子查询在一个select中出现多个嵌套查询语句

1、在where子句中使用子查询(一般返回"单行单列" "单行多列" "多行单列"(可以提供in、any、all ))

示例1:查找低于平均工资的雇员信息(返回单行单列)

select * from emp where sal < (select avg(sal) from emp)

示例2:查找出公司最早雇佣的雇员信息(返回单行单列)

select * from emp where hiredate =(select min(hiredate) from emp) 

示例3:与scott从事同一个工作,且工资相同(返回多行单列)--但是一般不这么使用

select * from emp
where ((job, sal)= (select job, sal from emp where ename='SCOTT')) and (ename != 'SCOTT')

在子查询返回多行单列的时候,可以使用in、any、all 进行比较

⑴   in和not in(不能与null一起使用)的用法

示例:查询和职位是MANAGER工资不同的员工信息

select * from emp
where sal not in (select sal from emp where job='MANAGER') ;

⑵  any的用法(  “>any”大于最小的 “<any”小于最大的)

示例1:查询和职位是MANAGER工资相同的员工信息(”=any”和in一样用法)

select * from emp
where sal =any (select sal from emp where job='MANAGER') ;

示例2:查询比职位是MANAGER工资最低工资还高的员工信息(”>any”就是比最小的大)

select * from emp
where sal >any (select sal from emp where job='MANAGER') ;

示例3:查询比职位是MANAGER工资最高工资还低的员工信息(”<any”就是比最大的小)

select * from emp
where sal <any (select sal from emp where job='MANAGER') ;

⑶  all的用法(“>all”比最大的大 “<all”比最小的小)

示例1:查询比职位是MANAGER工资都高的员工信息(”>all”就是比最大的还大)

select * from emp
where sal >all (select sal from emp where job='MANAGER') ;

示例2:查询比职位是MANAGER工资都低的员工信息(”<all”就是比最小的还小)

select * from emp
where sal <all (select sal from emp where job='MANAGER') ;

2、在having子句中使用子查询,使用的情况只有在子查询返回单行单列,并且使用统计函数的情况

示例1:查询出高于公司平均工资的员工的职位名称,职位人数,平均工资

select job, count(empno), avg(sal)
from emp
group by job
having avg(sal) > (select avg(sal) from emp) ;

3、在select子句中使用子查询(返回单行单列,不过一般不使用)

示例1:查询每个雇员的编号、姓名、职位、部门名称

使用多表查询:

select e.empno, e.ename, e.job, d.dname
from emp e, dept d
where e.deptno=d.deptno(+) ;

使用select子查询:

select e.empno, e.ename, e.job, (select dname from dept d where e.deptno=d.deptno) dname
from emp e ;

4、在from子句中使用子查询(返回多行多列)

示例1:查询每个部门名称、位置、部门人数

使用多表查询:

select d.dname, d.loc, count(empno)
from emp e, dept d
where e.deptno=d.deptno(+)
group by d.dname, d.loc ;

使用from子查询:

  |-查询部门的名称、位置、编号

select deptno, dname, loc from dept ; 

  |-查询部门的编号和部门人

select  deptno, count(empno)
from emp
group by deptno ;

  |-实现在from的子查询,相当与将两张表做多表连接查询

select d.dname, d.loc, temp.count
from dept d, (select deptno, count(empno) count from emp group by deptno ) temp
where d.deptno=temp.deptno(+) ;

注意:1、当子查询返回单行单列、多行单列、单行多列的情况,在where子句中实现子查询

   2、having子句中使用子查询,使用的情况只有在子查询返回单行单列,并且使用统计函数的情况

     3、当子查询返回多行多列的情况,在from子句中实现子查询

     4、一般不在select子句中实现子查询

Oracle 数据库基础学习 (六) 子查询的更多相关文章

  1. 数据库Mysql的学习(六)-子查询和多表操作

    )*0.05 WHERE card_id ='20121xxxxxx'; //子查询就是一个嵌套先计算子查询 SELECT * FROM borrow WHERE book_id =(SELECT b ...

  2. Oracle 数据库 基础学习 (一) SQL基本知识

    Oracle 从零开始,不知所措.要掌握一种技能,最好的方式是先学会怎么使用它,然后再深入学习,先有样子,再有技术.   一,什么是数据库? 为什么需要数据库? 数据库实质上是一个信息的列表,或者是一 ...

  3. Oracle 数据库基础学习 (七) SQL语句综合练习

    一.多表查询综合练习 1.  列出高于在30部门工作的所有人员的薪金的员工的姓名.部门名称.部门编号.部门人数 分析: 需要的员工信息: |-emp表:姓名.部门编号 |-dept表:部门名称.部门编 ...

  4. Oracle 数据库基础学习 (五) 多表查询

    多表查询:查询结果需要用到两个或者以上表,此时需要多表连接,产生多表查询 1.内连接(等值连接) 示例:将两个表内容连接显示 select * from dept d, emp e where d.d ...

  5. Oracle 数据库基础学习 (三) Oracle 四个表结构

    Oracle 四个表的 emp dept  salgrade  bunus 的结构,记住有利于后期SQL语句的学习 雇员表(emp) No. 字段 类型 描述 1 empno NUMBER(4) 表示 ...

  6. Oracle 数据库基础学习 (四) group by的使用

      group by分组查询 示例:要求查询出每个部门的编号,人数,以及最高和最低工资  select deptno, count(empno), max(sal), min(sal) from em ...

  7. Oracle 数据库基础学习 (二) 学习小例子:创建一个表,记录商品买卖的情况

      运行环境:Oracle database 11g + PL/SQL Developer ex: --创建一个表 create table plspl_test_product( --加入not n ...

  8. Oracle 数据库基础学习 (八) PL/SQL综合练习

    1.定义游标:列出每个员工的姓名.部门名称并编程显示第10个到第20个记录. declare cursor zemp_cursor is (select temp.ename, temp.dname ...

  9. Mysql数据库基础学习笔记

    Mysql数据库基础学习笔记 1.mysql查看当前登录的账户名以及数据库 一.单表查询 1.创建数据库yuzly,创建表fruits 创建表 ) ) ,) NOT NULL,PRIMARY KEY( ...

随机推荐

  1. js笔记——理解js中的call及apply

    call及apply在js里经常碰得到,但一直感觉很陌生,不能熟练使用.怎样才能熟练应用呢? 为什么存在call和apply? 在javascript OOP中,我们经常会这样定义: function ...

  2. salesforce 零基础开发入门学习(十四)salesforce中工厂模式的运用

    提到工厂模式,想必大家都很熟悉,工厂模式作为一种设计模式,同样在salesforce中适用. 举一个例子,笔作为基类,可以有钢笔,铅笔,圆珠笔等等.有一个笔的工厂,当你向它要钢笔,它就会生产一支钢笔; ...

  3. jQuery对 动态添加 的元素 绑定事件(on()的用法)

    从jQuery 版本 1.7 起,on() 方法是向被选元素添加事件处理程序的(官方推荐)首选方法. 当浏览器下载完一个页面的时候就开始渲染(翻译)HTML标签,然后执行css.js代码,在执行js代 ...

  4. ECMAScript 6 入门

    ECMAScript 6 入门 东西真多哇 http://es6.ruanyifeng.com/#docs/module 目录 前言 ECMAScript 6简介 let和const命令 变量的解构赋 ...

  5. 让 “微软雅黑” 在IE6下完美显示

    微软雅黑可以说是网页中最常见的字体了,但是往往在IE8+的浏览器上调试得很好,到了IE6则会变成默认的"宋体". 因为宋体字体宽度通常比雅黑的要宽,有时候会把页面都布局挤乱. 为了 ...

  6. Python基础语法

    学习一门编程语言,通常是学习该语言的以下几个部分的内容: 基础语法:如,变量的声明与调用.基本输出语句.代码块语法.注释等: 数据类型:通常都为 数字.字符串.布尔值.数组.链表.Map.Set等: ...

  7. javascript运算符——关系运算符

    × 目录 [1]恒等 [2]相等 [3]大于[4]小于 前面的话 关系运算符用于测试两个值之间的关系,根据关系是否存在而返回true或false,关系表达式总是返回一个布尔值,通常在if.while或 ...

  8. Linux命令之diff

    1.命令格式: diff[参数][文件1或目录1][文件2或目录2] 2.命令功能: diff命令能比较单个文件或者目录内容.如果指定比较的是文件,则只有当输入为文本文件时才有效.以逐行的方式,比较文 ...

  9. T-SQL中的一些小陷阱

    1,当心ISNULL函数对你的逻辑引起BUG 有人喜欢或者习惯于(并不代表我推荐,甚至这种写法没有任何好处)用ISNULL处理变量这种方式写查询 比如:select * from TestISNULL ...

  10. Azure REST API (2) Azure Storage

    <Windows Azure Platform 系列文章目录> 注意:本文适用于国内由世纪互联运维的Azure China. 本文将会介绍如何使用REST API来直接访问Storage ...