Oracle 数据库基础学习 (六) 子查询
子查询在一个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 数据库基础学习 (六) 子查询的更多相关文章
- 数据库Mysql的学习(六)-子查询和多表操作
)*0.05 WHERE card_id ='20121xxxxxx'; //子查询就是一个嵌套先计算子查询 SELECT * FROM borrow WHERE book_id =(SELECT b ...
- Oracle 数据库 基础学习 (一) SQL基本知识
Oracle 从零开始,不知所措.要掌握一种技能,最好的方式是先学会怎么使用它,然后再深入学习,先有样子,再有技术. 一,什么是数据库? 为什么需要数据库? 数据库实质上是一个信息的列表,或者是一 ...
- Oracle 数据库基础学习 (七) SQL语句综合练习
一.多表查询综合练习 1. 列出高于在30部门工作的所有人员的薪金的员工的姓名.部门名称.部门编号.部门人数 分析: 需要的员工信息: |-emp表:姓名.部门编号 |-dept表:部门名称.部门编 ...
- Oracle 数据库基础学习 (五) 多表查询
多表查询:查询结果需要用到两个或者以上表,此时需要多表连接,产生多表查询 1.内连接(等值连接) 示例:将两个表内容连接显示 select * from dept d, emp e where d.d ...
- Oracle 数据库基础学习 (三) Oracle 四个表结构
Oracle 四个表的 emp dept salgrade bunus 的结构,记住有利于后期SQL语句的学习 雇员表(emp) No. 字段 类型 描述 1 empno NUMBER(4) 表示 ...
- Oracle 数据库基础学习 (四) group by的使用
group by分组查询 示例:要求查询出每个部门的编号,人数,以及最高和最低工资 select deptno, count(empno), max(sal), min(sal) from em ...
- Oracle 数据库基础学习 (二) 学习小例子:创建一个表,记录商品买卖的情况
运行环境:Oracle database 11g + PL/SQL Developer ex: --创建一个表 create table plspl_test_product( --加入not n ...
- Oracle 数据库基础学习 (八) PL/SQL综合练习
1.定义游标:列出每个员工的姓名.部门名称并编程显示第10个到第20个记录. declare cursor zemp_cursor is (select temp.ename, temp.dname ...
- Mysql数据库基础学习笔记
Mysql数据库基础学习笔记 1.mysql查看当前登录的账户名以及数据库 一.单表查询 1.创建数据库yuzly,创建表fruits 创建表 ) ) ,) NOT NULL,PRIMARY KEY( ...
随机推荐
- Thrift架构~windows下安装和Hello World及编码引起的错误
最近开始正式接触Thrift架构,很牛B的技术,它被apache收纳了,属于开源中的一员,呵呵. 概念: Thrift源于大名鼎鼎的facebook之手,在2007年facebook提交Apache基 ...
- Atitit。木马病毒原理机密与概论以及防御
Atitit.木马病毒原理机密与概论以及防御 1. 定时截屏木马1 1.1. QQ聊天与微信聊天木马1 2. 文档木马1 3. 病毒木马的触发方式2 4. 远程木马2 5. 漏洞木马2 6. 病毒木马 ...
- spring容器对bean生命周期的管理三中方式
spring容器对bean的生命周期管理主要在两个时间点:bean的初始化完成(包括属性值被完全注入),bean的销毁(程序结束,或者引用结束)方式一:使用springXML配置中的init-meth ...
- CSS3选择器的研究
属性选择器 [title]:选择带有title属性的元素 [title='hello']:选择属性是title并且值是hello的元素 [title~='hello']:选择属性是title并且部分值 ...
- 【WP开发】在手机屏幕点亮时播放声音
今天说的内容有点流氓,请诸君在开发应用时谨慎使用. 那么,这活儿到底有多流氓呢? 先介绍一下要实现的功能:当用户按电源键(也可以是双击屏幕)点亮手机的屏幕时播放一下短音乐,而且应用程序可以不在前台运行 ...
- Cocos2d-x 3.2 学习笔记(九)EventDispatcher事件分发机制
EventDispatcher事件分发机制先创建事件,注册到事件管理中心_eventDispatcher,通过发布事件得到响应进行回调,完成事件流. 有五种不同的事件机制:EventListenerT ...
- 数据结构:JAVA_二叉数查找树基本实现(中)
数据结构:二叉数查找树基本实现(JAVA语言版) 1.写在前面 二叉查找树得以广泛应用的一个重要原因是它能保持键的有序性,因此我们可以把它作为实现有序符号表API中的众多方法的基础. 也就是说我们构建 ...
- Screenfly – 各种设备的屏幕和分辨率下快速测试网站
Screenfly 让你能够在各种设备的屏幕和分辨率下查看你的网站.输入网址,并点击GO开始浏览网页.Screenfly 可以使用代理服务器来模拟设备,当您查看您的网站,代理服务器模仿您所选择的设备的 ...
- linux下core dump【总结】
1.前言 一直在从事linux下后台开发,经常与core文件打交道.还记得刚开始从事linux下开发时,程序突然崩溃了,也没有任何日志.我不知所措,同事叫我看看core,我却问什么是core,怎么看. ...
- 开启事务时mybatis返回主键id
先说一下没有注解的 先给出实体类: public class City { private int city_id; private String city_name; public int getC ...