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、括号,改变执行顺序

相关文章
|
14天前
|
SQL Oracle 关系型数据库
如何在 Oracle 中配置和使用 SQL Profiles 来优化查询性能?
在 Oracle 数据库中,SQL Profiles 是优化查询性能的工具,通过提供额外统计信息帮助生成更有效的执行计划。配置和使用步骤包括:1. 启用自动 SQL 调优;2. 手动创建 SQL Profile,涉及收集、执行调优任务、查看报告及应用建议;3. 验证效果;4. 使用 `DBA_SQL_PROFILES` 视图管理 Profile。
|
27天前
|
SQL Java 数据库连接
如何在 Java 代码中使用 JSqlParser 解析复杂的 SQL 语句?
大家好,我是 V 哥。JSqlParser 是一个用于解析 SQL 语句的 Java 库,可将 SQL 解析为 Java 对象树,支持多种 SQL 类型(如 `SELECT`、`INSERT` 等)。它适用于 SQL 分析、修改、生成和验证等场景。通过 Maven 或 Gradle 安装后,可以方便地在 Java 代码中使用。
173 11
|
4月前
|
SQL 监控 Oracle
Oracle SQL性能优化全面指南
在数据库管理领域,Oracle SQL性能优化是确保数据库高效运行和数据查询速度的关键
|
4月前
|
SQL 存储 Oracle
Oracle数据库SQL语句详解与应用指南
在数字化时代,数据库已成为各类企业和组织不可或缺的核心组件。Oracle数据库作为业界领先的数据库管理系统之一,广泛应用于各种业务场景。掌握Oracle数据库的SQL语句是数据库管理员、开发人员及运维人员的基本技能。本文将详细介绍Oracle数据库SQL语句的基本概念、语法、应用及最佳实践。一、Or
125 3
|
4月前
|
SQL 关系型数据库 PostgreSQL
遇到SQL 子查询性能很差?其实可以这样优化
遇到SQL 子查询性能很差?其实可以这样优化
212 2
|
4月前
|
SQL Oracle 关系型数据库
Oracle SQL:了解执行计划和性能调优
Oracle SQL:了解执行计划和性能调优
116 1
|
6月前
|
SQL 数据库 开发者
SQL中的子查询:嵌套查询的深度解析
【8月更文挑战第31天】
724 0
|
5月前
|
关系型数据库 MySQL 网络安全
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
|
7月前
|
SQL 存储 监控
SQL Server的并行实施如何优化?
【7月更文挑战第23天】SQL Server的并行实施如何优化?
176 13

推荐镜像

更多