`

oracle基础知识5_子查询

    博客分类:
  • DB
 
阅读更多

 

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;

 

ENAME SAL JOBNAME
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)

 

ENAME SAL ANNLSAL
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)

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
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的子查询中要排除空值,否则不会得到任何数据

分享到:
评论

相关推荐

    SQL(oracle).rar_oracle_oracle sql_oracle 总结_pl sql_sql

    首先,Oracle SQL与标准SQL略有不同,它包含了一些特定于Oracle的功能,如子查询、连接操作、游标、函数和存储过程等。`SQL(oracle).doc`很可能是一份详细的文档,涵盖了这些主题。例如,它可能详细讲解了如何使用...

    oracle基础知识整理

    以下是一些Oracle基础知识的详细解释: 1. SQL*Plus工具:这是Oracle数据库管理员(DBA)和开发人员常用的命令行界面,用于执行SQL查询和其他数据库操作。`set linesize` 和 `set pagesize` 用于调整输出的行宽和每...

    oracle基础知识回顾与练习.zip

    本资料“oracle基础知识回顾与练习.zip”是针对Oracle数据库的基础知识进行整理,采用纯SQL语句的形式,适合初学者及需要巩固基础的用户进行学习和实践。 1. SQL基础 SQL(Structured Query Language)是用于管理...

    Oracle基础知识

    ### Oracle基础知识概述 本文旨在为初学者提供Oracle数据库的基础知识概览,重点涵盖子查询、集合操作以及常用函数等核心概念和技术。通过本篇的学习,读者可以更好地理解Oracle数据库的操作方式,并掌握一些实用...

    oracle资料 包含经典案例 基础教程 和Oracleoracle_database_10g_为_dba_提供的最佳前_20_位的特性.pdf

    了解SQL的基本语法,如SELECT语句、JOIN操作、子查询以及事务处理,是成为Oracle开发人员的基础。此外,理解Oracle的数据模型,包括实体、关系、属性和键,有助于设计高效且可靠的数据库结构。 数据库架构方面,...

    Oracle_11G_数据库应用简明教程PPT

    首先,Oracle 11g的基础知识包括数据库体系结构,它主要由实例和数据库两部分构成。实例是运行在操作系统上的内存结构和后台进程,而数据库则是存储在磁盘上的物理文件集合,如数据文件、控制文件、重做日志文件等。...

    oracledba.rar_oracle_oracle practice

    "oracledba.rar_oracle_oracle practice" 提供的资料是针对Oracle数据库管理员(DBA)的速成教程,旨在帮助学习者快速掌握Oracle数据库的基础知识以及实际操作技巧。 在Oracle数据库安装过程中,首先需要了解操作...

    ORACLE_SQL_ALL.rar_oracle_oracle sql_sql优化

    - **子查询与连接**:理解如何使用子查询和不同类型的连接(内连接、外连接、自连接)来处理复杂的数据关系。 2. **索引优化** - **索引类型**:B树索引、位图索引、函数索引、唯一索引和非唯一索引等,以及它们...

    Oracle_PLSQL.rar_Java plsql_oracle_oracle doc_pl sql_plsql

    Oracle PL/SQL是一种强大的编程语言,它将关系数据库管理系统的强大功能与结构化查询语言(SQL)的灵活性相结合。在Oracle数据库环境中,PL/SQL被广泛用于开发存储过程、函数、触发器、游标和包,以实现复杂的业务...

    Oracle 基础知识 -大全- 原创整理.pdf

    以下将详细讲解Oracle基础知识,包括数据库管理、表的创建与维护、SQL查询技巧、权限管理以及PL/SQL编程等方面。 1. **Oracle数据库优势** Oracle数据库因其高性能、高可用性和安全性而受到青睐。它支持大规模并发...

    Oracle基础查询关联查询练习题.docx

    知识点:子查询的使用、MAX 函数的使用 3. 分组查询 第三个练习题是找出 EMP 中那些工资高于他们所在部门的管理者工资的员工。该查询使用了 JOIN 运算符来连接 EMP 表,并使用 ANY 运算符来比较工资。 知识点:...

    oracle_DBA.rar_dba_dsi401_oracle dba_oracle internal_oracle 培训

    1. SQL基础:SQL语法,查询优化,子查询,连接操作。 2. PL/SQL编程:过程、函数、触发器、游标等高级特性。 3. 数据库架构:理解Oracle的物理和逻辑结构。 4. 性能监控:使用企业管理器、SQL*Plus命令行工具进行...

    Oracle_2Days_DBA

    3. **SQL基础**:掌握SQL语言,包括数据查询、插入、更新和删除,以及更复杂的SQL语句如JOIN、子查询和聚合函数。 4. **表和索引**:理解表的创建、修改和删除,以及索引的作用、类型和管理,包括唯一索引、非唯一...

    OraclePL-SQL.rar_ORACLE PL_oracle_oracle sql

    了解Oracle数据库的基础知识,包括数据库架构、表空间、数据类型、索引、视图、存储过程和触发器等,是深入学习PL/SQL的前提。 2. **PL/SQL简介**:PL/SQL是Oracle专为数据库编程设计的一种过程化语言,结合了SQL...

    oracle性能监控_oracle_维护_日常_性能_监控_

    在Oracle数据库管理中,性能监控是一项至关重要的任务,它确保系统的稳定运行,提高查询效率,减少资源浪费。Oracle性能监控涉及多个层面,包括SQL查询优化、系统资源使用情况监控、数据库活动跟踪等。以下是对...

    oracle-plsql.zip_oracle_pl sql 分组查询_plsql_plsql 分组查询

    4. **子查询**:子查询是嵌套在其他查询中的查询,可以作为值、条件或表达式的一部分,用于筛选或计算数据。 5. **高级查询**:包括使用集合操作(UNION、INTERSECT、EXCEPT)和窗口函数(ROW_NUMBER、RANK、DENSE_...

    Oracle基础使用子查询PPT学习教案.pptx

    本教程主要关注Oracle基础使用子查询的知识点。 首先,子查询并不具有特殊的语法结构,它只是SQL查询语句中的一个组成部分,可以出现在SELECT、FROM、WHERE、GROUP BY、HAVING和ORDER BY等子句中。子查询的基本语法...

    oracle讲义:子查询

    在学习Oracle数据库时,掌握子查询的使用是一项基础而重要的技能。 子查询的主要概念和知识点可以分为以下几个方面: 1. 子查询的基本概念: 子查询,顾名思义,是在另一个查询(主查询)的内部进行查询。子查询...

    关于Oracle数据库的一些基础知识

    本文将深入探讨Oracle数据库的一些基础知识,包括它的功能、常用操作以及学习路径。 一、Oracle数据库函数大全 Oracle数据库支持丰富的函数,用于处理各种数据类型和执行复杂的计算。以下是一些常见的函数类别: ...

    OCP-1Z0042_Oracle_10g_DBA_I.rar

    - 查询优化:掌握SQL查询优化技巧,包括使用索引、子查询和连接操作。 **3. 数据库管理** - 实例启动与关闭:学会如何启动和关闭数据库实例。 - 数据库备份与恢复:理解物理备份和逻辑备份的区别,以及如何使用...

Global site tag (gtag.js) - Google Analytics