Oracle常用sql语句(三)之子查询

简介: 子查询子查询要解决的问题,不能一步求解分为: - 单行子查询 - 多行子查询语法: SELECT select_list FROM table WHERE expr operator (SELECT select_list ...

子查询

子查询要解决的问题,不能一步求解

分为:
- 单行子查询
- 多行子查询

语法:

    SELECT select_list
    FROM table
    WHERE expr operator (SELECT select_list
                         FROM   table);
  • 子查询(内查询)在住查询之前一次执行完成
  • 子查询的记过被主查询使用(外查询)

注意:
1.括号
2.合理的书写风格
3.可以在住查询的 WHERE SELECT HAVING FROM 后面使用子查询
4.不可以在GROUP BY 后面使用
5.强调FROM后面的子查询
6.主查询和子查询可以不是同一张表;只用子查询返回的结果,主查询可以使用即可
7.一般不在子查询中排序;但在top-n分析问题中
8.一般先执行子查询,在执行主查询;但相关子查询例外
9.单行子查询只能使用单行操作符;多行子查询只能使用多行子查询
10.子查询中的null:单行的子查询,多行子查询

解释:
–5、强调from后面的子查询
查询员工信息:员工号 姓名 月薪

SELECT
    * 
FROM
    ( SELECT empno, ename, sal FROM emp );

查询员工信息:员工号 姓名 月薪 年薪

SELECT
    * 
FROM
    (
SELECT
    empno,
    ename,
    sal,
    sal * 12 annsal 
FROM
    emp)

–6、主查询和子查询可以不是同一张表;只有子查询返回的结果 主查询可以使用 即可
查询部门名称是SALES的员工

SELECT
    * 
FROM
    emp 
WHERE
    deptno = ( SELECT deptno FROM dept WHERE dname = 'SALES' );

–7.一般不在子查询中排序;但在top-n分析问题中

– 找到员工表中工资最高的三名员工

SELECT
    empno,
    ename,
    sal 
FROM
    ( SELECT * FROM emp ORDER BY sal DESC ) 
WHERE
    ROWNUM < 4

8.一般先执行子查询,在执行主查询;但相关子查询例外

相关子查询:
– 找到员工表中薪水大于本部门平均薪水的员工

-- 一般方法
SELECT
    e.ename,
    e.sal,
    e.deptno,
    d.avgsal 
FROM
    emp e,
    ( SELECT deptno, AVG( sal ) avgsal FROM emp GROUP BY deptno ) d 
WHERE
    e.deptno = d.deptno 
    AND e.sal > d.avgsal

-- 相关子查询
SELECT
    empno,
    ename,
    sal,
    ( SELECT avg( sal ) FROM emp WHERE deptno = e.deptno ) avgsal 
FROM
    emp e 
WHERE
    sal > (SELECT avg( sal ) 
           FROM  emp 
           WHERE deptno = e.deptno)

10.子查询中的null
in关键字中可以有null
not in 中有null就会查不到数据原因如下

  • not in 等同于 <>ALL

集合运算

这里写图片描述

INTERSECT(交集),返回两个查询共有的记录。

UNION ALL(并集),返回各个查询的所有记录,包括重复记录。

UNION(并集),返回各个查询的所有记录,不包括重复记录。

MINUS(补集),返回第一个查询检索出的记录减去第二个查询检索出的记录之后剩余的记录。

注意的问题:
1、参与运算的各个集合必须列数相同 且类型一致(列数不够可以用,to_number(null)、to_char(null)等去填充
2、采用第一个集合作为最后的表头
3、order by永远在最后
4、括号,改变执行顺序

相关文章
|
3月前
|
SQL Oracle 关系型数据库
Oracle数据库创建表空间和索引的SQL语法示例
以上SQL语法提供了一种标准方式去组织Oracle数据库内部结构,并且通过合理使用可以显著改善查询速度及整体性能。需要注意,在实际应用过程当中应该根据具体业务需求、系统资源状况以及预期目标去合理规划并调整参数设置以达到最佳效果。
304 8
|
6月前
|
SQL 关系型数据库 PostgreSQL
CTE vs 子查询:深入拆解PostgreSQL复杂SQL的隐藏性能差异
本文深入探讨了PostgreSQL中CTE(公共表表达式)与子查询的选择对SQL性能的影响。通过分析两者底层机制,揭示CTE的物化特性及子查询的优化融合优势,并结合多场景案例对比执行效率。最终给出决策指南,帮助开发者根据数据量、引用次数和复杂度选择最优方案,同时提供高级优化技巧和版本演进建议,助力SQL性能调优。
604 1
|
8月前
|
SQL Oracle 关系型数据库
解决大小写、保留字与特殊字符问题!Oracle双引号在SQL中的特殊应用
在Oracle数据库开发中,双引号的使用是一个重要但易被忽视的细节。本文全面解析了双引号在SQL中的特殊应用场景,包括解决标识符与保留字冲突、强制保留大小写、支持特殊字符和数字开头标识符等。同时提供了最佳实践建议,帮助开发者规避常见错误,提高代码可维护性和效率。
296 6
|
9月前
|
SQL Oracle 关系型数据库
【YashanDB知识库】共享利用Python脚本解决Oracle的SQL脚本@@用法
【YashanDB知识库】共享利用Python脚本解决Oracle的SQL脚本@@用法
|
9月前
|
SQL Oracle 关系型数据库
【YashanDB知识库】yashandb执行包含带oracle dblink表的sql时性能差
【YashanDB知识库】yashandb执行包含带oracle dblink表的sql时性能差
|
9月前
|
SQL Oracle 关系型数据库
【YashanDB知识库】共享利用Python脚本解决Oracle的SQL脚本@@用法
本文来自YashanDB官网,介绍如何处理Oracle客户端sql*plus中使用@@调用同级目录SQL脚本的场景。崖山数据库23.2.x.100已支持@@用法,但旧版本可通过Python脚本批量重写SQL文件,将@@替换为绝对路径。文章通过Oracle示例展示了具体用法,并提供Python脚本实现自动化处理,最后调整批处理脚本以适配YashanDB运行环境。
|
Oracle 关系型数据库
|
Oracle 关系型数据库
一道Oracle子查询小练习
昨天晚上躺在床上看Oracle(最近在学习这个),室友说出个题目让我试试。题目如下: 有如下表结构,请选择出成绩为前三名的人的信息(如果成绩相同,则算并列),表名为test:     NAME                      GRADE    -------------------- ...
646 0
|
3月前
|
Oracle 关系型数据库 Linux
【赵渝强老师】Oracle数据库配置助手:DBCA
Oracle数据库配置助手(DBCA)是用于创建和配置Oracle数据库的工具,支持图形界面和静默执行模式。本文介绍了使用DBCA在Linux环境下创建数据库的完整步骤,包括选择数据库操作类型、配置存储与网络选项、设置管理密码等,并提供了界面截图与视频讲解,帮助用户快速掌握数据库创建流程。
365 93
|
2月前
|
Oracle 关系型数据库 Linux
【赵渝强老师】使用NetManager创建Oracle数据库的监听器
Oracle NetManager是数据库网络配置工具,用于创建监听器、配置服务命名与网络连接,支持多数据库共享监听,确保客户端与服务器通信顺畅。
202 0

推荐镜像

更多