0 概念: 主查询之前的查询,作为结果服务于主查询。
解决的问题: 不能一步求解
单行子查询: 返回的结果是一条记录
多行子查询: 返回的结果是两条和两条以上的记录
1 要注意的问题:
1. 括号
2. 合理的书写风格
3. 可以主查询的where/ select/ from/ having后面放置子查询, 如果是在select后,那么这个查询必须是单行子查询
4. 不可以在主查询的group by后面放置子查询
5. 强调from后面的子查询
6. 主查询和子查询可以不是同一张表,只要子查询返回的结果 主查询可以使用即可
7. 一般不在子查询使用order by,但在Top-N分析问题中 必须使用order by
8. 一般先执行子查询,再执行主查询;但相关子查询除外
9. 单行子查询只能使用单行操作符 多行子查询只能使用多行操作符
10. 子查询中null
2 案例:
2.1 在主查询select后跟子查询
select ename,sal,(select job from emp where empno=7839) as jobname from emp;
Tom_ABCD | 6000 | PRESIDENT |
SMITH | 800 | PRESIDENT |
ALLEN | 1600 | PRESIDENT |
WARD | 1250 | PRESIDENT |
2.2 在主查询from后跟子查询
select * from (select ename,sal,sal*12 annlsal from emp)
Tom_ABCD | 6000 | 72000 |
SMITH | 800 | 9600 |
ALLEN | 1600 | 19200 |
WARD | 1250 | 15000 |
3 多行子查询用到的操作符:
操作符 | 含义 |
IN | 等于列表中的任何一个 |
ANY | 和子查询返回的任意一个数值比较 |
ALL | 和子查询返回的所有数值比较 |
查询部门名称是SALES和ACCOUNTING的员工
select *
from emp
where deptno in (select deptno from dept where dname='SALES' or dname='ACCOUNTING');
查询工资比30号部门任意一个员工高的员工信息
select *
from emp
where sal > any(select sal from emp where deptno = 30);
查询工资比30号部门所有员工高的员工信息
select *
from emp
where sal > all (select sal from emp where deptno=30);
等同于:
select *
from emp
where sal > (select max(sal) from emp where deptno=30);
在员工表中查询本身是领导的员工信息(是领导表示自己主键编码在领导编码mgr中出现)
from emp
where empno in (select mgr from emp);
在员工表中查询本身不是领导的员工信息(子查询not in中需要排除null)
select *
from emp
where empno not in (select mgr from emp where mgr is not null)
7844 | TURNER | SALESMAN | 7698 | 08-9月 -81 | 1500 | 0 | 30 |
7521 | WARD | SALESMAN | 7698 | 22-2月 -81 | 1250 | 500 | 30 |
7654 | MARTIN | SALESMAN | 7698 | 28-9月 -81 | 1250 | 1400 | 30 |
子查询中的Null问题:
a) 所有和空值比较的函数都返回一个空值,
b) 只要子查询中包含一个空值,那么请不要使用not in操作,
c) 如果用的话,操作等同于 <>all
a not in(100,20,null) ---> 等同于 a!= 100 and a!= 20 and a!=all
因此 not in的子查询中要排除空值,否则不会得到任何数据
相关推荐
首先,Oracle SQL与标准SQL略有不同,它包含了一些特定于Oracle的功能,如子查询、连接操作、游标、函数和存储过程等。`SQL(oracle).doc`很可能是一份详细的文档,涵盖了这些主题。例如,它可能详细讲解了如何使用...
以下是一些Oracle基础知识的详细解释: 1. SQL*Plus工具:这是Oracle数据库管理员(DBA)和开发人员常用的命令行界面,用于执行SQL查询和其他数据库操作。`set linesize` 和 `set pagesize` 用于调整输出的行宽和每...
本资料“oracle基础知识回顾与练习.zip”是针对Oracle数据库的基础知识进行整理,采用纯SQL语句的形式,适合初学者及需要巩固基础的用户进行学习和实践。 1. SQL基础 SQL(Structured Query Language)是用于管理...
### Oracle基础知识概述 本文旨在为初学者提供Oracle数据库的基础知识概览,重点涵盖子查询、集合操作以及常用函数等核心概念和技术。通过本篇的学习,读者可以更好地理解Oracle数据库的操作方式,并掌握一些实用...
了解SQL的基本语法,如SELECT语句、JOIN操作、子查询以及事务处理,是成为Oracle开发人员的基础。此外,理解Oracle的数据模型,包括实体、关系、属性和键,有助于设计高效且可靠的数据库结构。 数据库架构方面,...
首先,Oracle 11g的基础知识包括数据库体系结构,它主要由实例和数据库两部分构成。实例是运行在操作系统上的内存结构和后台进程,而数据库则是存储在磁盘上的物理文件集合,如数据文件、控制文件、重做日志文件等。...
"oracledba.rar_oracle_oracle practice" 提供的资料是针对Oracle数据库管理员(DBA)的速成教程,旨在帮助学习者快速掌握Oracle数据库的基础知识以及实际操作技巧。 在Oracle数据库安装过程中,首先需要了解操作...
- **子查询与连接**:理解如何使用子查询和不同类型的连接(内连接、外连接、自连接)来处理复杂的数据关系。 2. **索引优化** - **索引类型**:B树索引、位图索引、函数索引、唯一索引和非唯一索引等,以及它们...
Oracle PL/SQL是一种强大的编程语言,它将关系数据库管理系统的强大功能与结构化查询语言(SQL)的灵活性相结合。在Oracle数据库环境中,PL/SQL被广泛用于开发存储过程、函数、触发器、游标和包,以实现复杂的业务...
以下将详细讲解Oracle基础知识,包括数据库管理、表的创建与维护、SQL查询技巧、权限管理以及PL/SQL编程等方面。 1. **Oracle数据库优势** Oracle数据库因其高性能、高可用性和安全性而受到青睐。它支持大规模并发...
知识点:子查询的使用、MAX 函数的使用 3. 分组查询 第三个练习题是找出 EMP 中那些工资高于他们所在部门的管理者工资的员工。该查询使用了 JOIN 运算符来连接 EMP 表,并使用 ANY 运算符来比较工资。 知识点:...
1. SQL基础:SQL语法,查询优化,子查询,连接操作。 2. PL/SQL编程:过程、函数、触发器、游标等高级特性。 3. 数据库架构:理解Oracle的物理和逻辑结构。 4. 性能监控:使用企业管理器、SQL*Plus命令行工具进行...
3. **SQL基础**:掌握SQL语言,包括数据查询、插入、更新和删除,以及更复杂的SQL语句如JOIN、子查询和聚合函数。 4. **表和索引**:理解表的创建、修改和删除,以及索引的作用、类型和管理,包括唯一索引、非唯一...
了解Oracle数据库的基础知识,包括数据库架构、表空间、数据类型、索引、视图、存储过程和触发器等,是深入学习PL/SQL的前提。 2. **PL/SQL简介**:PL/SQL是Oracle专为数据库编程设计的一种过程化语言,结合了SQL...
在Oracle数据库管理中,性能监控是一项至关重要的任务,它确保系统的稳定运行,提高查询效率,减少资源浪费。Oracle性能监控涉及多个层面,包括SQL查询优化、系统资源使用情况监控、数据库活动跟踪等。以下是对...
4. **子查询**:子查询是嵌套在其他查询中的查询,可以作为值、条件或表达式的一部分,用于筛选或计算数据。 5. **高级查询**:包括使用集合操作(UNION、INTERSECT、EXCEPT)和窗口函数(ROW_NUMBER、RANK、DENSE_...
本教程主要关注Oracle基础使用子查询的知识点。 首先,子查询并不具有特殊的语法结构,它只是SQL查询语句中的一个组成部分,可以出现在SELECT、FROM、WHERE、GROUP BY、HAVING和ORDER BY等子句中。子查询的基本语法...
在学习Oracle数据库时,掌握子查询的使用是一项基础而重要的技能。 子查询的主要概念和知识点可以分为以下几个方面: 1. 子查询的基本概念: 子查询,顾名思义,是在另一个查询(主查询)的内部进行查询。子查询...
本文将深入探讨Oracle数据库的一些基础知识,包括它的功能、常用操作以及学习路径。 一、Oracle数据库函数大全 Oracle数据库支持丰富的函数,用于处理各种数据类型和执行复杂的计算。以下是一些常见的函数类别: ...
- 查询优化:掌握SQL查询优化技巧,包括使用索引、子查询和连接操作。 **3. 数据库管理** - 实例启动与关闭:学会如何启动和关闭数据库实例。 - 数据库备份与恢复:理解物理备份和逻辑备份的区别,以及如何使用...