iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >oracle子查询
  • 759
分享到

oracle子查询

2024-04-02 19:04:59 759人浏览 薄情痞子
摘要

最近在加强oracle查询,在网上看到了一个不错的视频,把学习笔记和大家分享一下oracle 子查询的语法(即select语句的嵌套)子查询要注意的问题:  1.子查询语法中的小括号&n

最近在加强oracle查询,在网上看到了一个不错的视频,把学习笔记和大家分享一下


oracle 子查询的语法(即select语句的嵌套)

子查询要注意的问题:
  1.子查询语法中的小括号
  2.子查询的书写风格
  3.可以使用子查询的位置:where ,select ,having,from
  4.不可以在主查询的group by 使用
  5.from的子查询
  6.主查询和子查询可以不是同一张表
  7.一般不在子查询中使用排序,因为对主查询没有意义,但在top-N分析顺序,要排序
  8.执行顺序:先执行子查询,再执行主查询,但相关查询例外
  9.单行子查询只能使用单行子查询,多行子查询使用多行子查询(查询结果多行)
  10.子查询null问题


---------------------------------------------------------------------------------------------

(1).可以使用子查询的位置:where ,select ,having,from

  1. select(在select语句后面的查询必需是单行子查询,即结果返回为1条)
       
     SELECT EMPNO,ENAME,SAL,(SELECT JOB FROM EMP where empno=7839) from emp

    2.having(查询平均薪水大于30号部门最高薪水的部门平均薪水
    select deptno,avg(sal)
         from emp
         group by deptno
         having avg(sal) >(select max(sal)
                   from emp
                           where deptno=30)

    3.from--后面是放一张表,或结果集(一条查询语句),在from的子查询可以看成一张新的表
       select *
       from (select empno,ename,sal,sal*12 from emp)


    4.where

        查询工资比scott的员工

        select * from emp where sal > (select sal
                from emp
                where ename='scott')


(2).主查询和子查询可以不是同一张表,只要子查询返回的结果主查询能够使用就行

select * from emp
           where deptno = (select deptno
                           from dept
                                where dname='sales')  --也可以使用多表查询(数据库只需要请求一次,根据笛卡尔积的大小才能判断哪种方法
                                                      --比较好


(3)一般不在子查询中使用排序,因为对主查询没有意义,但在top-N分析顺序,要排序

查找员工工资高的前3名:

--rownum:oracle自动加上的伪列,要得到伪列的值,必须在select语句中显示的查询出来
--rownum只能使用<,<=
--行号永远按照默认的顺序生成,不会随着排序而变化
 select rownum,empno,ename,sal
 from(select * from emp order by sal desc)
 where rownum<=3;


(4).执行顺序:先执行子查询,再执行主查询,但相关查询例外

相关子查询:(对于外面的表有一个要求,即必须有一个别名),可以把主查询中的值作为参数传递给子查询
 例:查询员工表中薪水大于本部门的平均薪水,
 select empno,ename,sal,(select avg(sal) from emp where deptno=e.deptno) salavg
 from emp e
 where sal >(select avg(sal) from emp where deptno=e.deptno)

(5).单行子查询只能使用单行子查询,多行子查询使用多行子查询(查询结果多行)

单行操作符:=,>,>=,<,<=,<>
多行操作符:in,any,all

查询员工信息,职位为7566员工一样,sal大于7588

select * from emp
         where job =
          (select job from emp where empno=7566 ) and
          sal>(select sal from emp where empno=7588)
     

查询工资最低的员工信息
select * from emp
where sal = (select min(sal) from emp);

查询最低工资大于20号部门最低工资的部门号和部门的最低工资


select dept,min(sal) from emp
group by deptno
having min(sal) > (select min(sal) from emp
            where deptno=20);


多行子查询:
   select *
    from emp
    where deptno in (select * from dept where dname='sales' or dname='accounting')

还可以使用多表查询

查询工资比30号部门任意一个员工高的员工信息

select * from emp
         where sal > any (select sal from emp where deptno=30)
                  --(select min(sal) from emp where deptno=30)

查询工资比30号部门所有一个员工高的员工信息

select * from emp
         where sal > all(select sal from emp where deptno=30)
             --(select max(sal) from emp where deptno=30)




(6)子查询null问题
单行子查询null问题
   select * from emp
          where job =
               (select job
                from emp where ename='tom')


多行子查询的null值问题
查询不是老板的员工
select * from emp
      where emp not in (select mgr from emp )--如果子查询出来的结果有null
  只要集合中有null值,那么不能使用not in (可以使用in),因为not in 相当于<>all,(in等同于any)
  <>null永远为假


正确的

select * from emp
      where emp not in (select mgr from emp where mgr is not null )



 ----------------------------华丽丽的分割线--------------------------------------------------------

分页查询
     select * from
      (select rownum r ,e.* from  
     (select * from emp order by sal desc) e1 where rownum<=5)
      where r>1
 

您可能感兴趣的文档:

--结束END--

本文标题: oracle子查询

本文链接: https://www.lsjlt.com/news/42289.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Oracle 查询转换之子查询展开
    概念:子查询展开(Subquery Unnesting)是优化器处理带子查询的目标sql的一种优化手段,它是指优化器不再将目标sql中子查询当作一个独立的处理单元来单独执行,而是将该子查询转换为它自身和外部...
    99+
    2024-04-02
  • Oracle 笔记之子查询
    子查询当我们的一个操作需要基于另一个查询记过,那么就先行执行的这个查询就是子查询子查询分为:单行单列子查询:查的结果只有一行,且只有一个字段多行单列子查询:查询出来的结果有多行,但只有一列 多行多列子查询查...
    99+
    2024-04-02
  • oracle子查询怎么用
    非常抱歉,由于您没有提供文章标题,我无法为您生成一篇高质量的文章。请您提供文章标题,我将尽快为您生成一篇优质的文章。...
    99+
    2024-05-21
  • 怎么在oracle中查询操作子查询
    怎么在oracle中查询操作子查询?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。一、子查询语法SELECT select_l...
    99+
    2024-04-02
  • Mysql---子查询的三种查询方式( 表子查询,条件子查询,列中子查询)
    mysql子查询 子查询分为: 列中子查询 单列单行表子查询 必须有别名条件子查询 单行单列 多行单列 下列示例表结构: grade表: result表: student表: subject表:...
    99+
    2023-09-04
    mysql sql 数据库
  • MySQL子查询详解(单行子查询、多行子查询与相关子查询)
    目录0.概念1.需求分析与问题解决1.1提出具体问题:1.2 子查询的基本使用: 子查询的基本语法结构:1.3 子查询的分类2.单行子查询2.1实例:2.2空值问题2.3非法使用子查...
    99+
    2024-04-02
  • MySQL子查询(嵌套查询)
    子查询指一个查询语句嵌套在另一个查询语句内部的查询,这个特性从 MySQL 4.1 开始引入。 在SELECT 子句中先计算子查询,子查询结果作为外层另一个查询的过滤条件,查询可以基于一 个表或者多个表。子查询中常用的操作符有 AN...
    99+
    2023-09-04
    mysql 数据库 sql Powered by 金山文档
  • MYSQL——子查询
       MYSQL的子查询1   求平均值   SELECT AVG (字段 如good_price) FROM  tdb_表名;...
    99+
    2024-04-02
  • Oracle在PL/SQL中使用子查询
    目录一、概述1、单行子查询(子查询只返回一行)2、多行单列子查询(子查询返回多行)3、多列子查询二、在DDL语句中使用子查询1、create table2、create View3、...
    99+
    2024-04-02
  • Oracle REGEXP_LIKE模糊查询用法例子
    目录1、函数介绍2、使用此函数不区分大小写2-1、LIKE 函数2-2、REGEXP_LIKE 函数3、多条件3-1、多个OR条件时,LIKE函数就不能满足需求了。3-2、AND :既有A又有B3-3、检索以某个字符串开...
    99+
    2022-11-19
    oracle regexp_like模糊查询 oracle模糊查询like语句 Oracle模糊查询
  • 怎么理解Oracle数据库中的多表查询,分组查询,子查询
    本篇内容介绍了“怎么理解Oracle数据库中的多表查询,分组查询,子查询”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能...
    99+
    2024-04-02
  • Oracle与PostgreSQL子查询有什么不同
    本篇内容主要讲解“Oracle与PostgreSQL子查询有什么不同”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Oracle与PostgreSQL子查询有什么...
    99+
    2024-04-02
  • mysql标量子查询和非法子查询的区别
    这篇文章主要讲解了“mysql标量子查询和非法子查询的区别”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“mysql标量子查询和非法子查询的区别”吧!#whe...
    99+
    2024-04-02
  • MySQL基础-子查询
    文章目录 MySQL基础-子查询一、子查询概念1、什么是子查询2、子查询的分类 二、单行子查询1、单行比较操作符2、基本子查询3、HAVING 子查询4、CASE中的子查询5、子查询其他问题 三、多行子查询1、多...
    99+
    2023-12-22
    mysql 数据库 sql
  • mysql的in+子查询
    【mysql最糟糕的子查询:in+子查询】 select * from film where film_id in (select film_id from film_actor where acto...
    99+
    2023-08-18
    mysql
  • Laravel:whereIn子查询
    文档 https://learnku.com/docs/laravel/9.x/queries/12246 示例如下 $users = User::whereNotIn('id', func...
    99+
    2023-09-01
    php laravel
  • oracle中with语句中可以套子查询吗
    oracle 的 with 子句允许嵌套子查询,通过创建子查询别名来增强可读性和可维护性,优化性能并简化复杂查询结构。 Oracle with子句中嵌套子查询 答案: 可以 详细说明:...
    99+
    2024-05-09
    oracle
  • mysql中怎么实现查询和子查询
    这篇文章给大家介绍mysql中怎么实现查询和子查询,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。一、查询的五种子句        wher...
    99+
    2024-04-02
  • MySQL如何在查询中使用子查询
    MySQL中可以在查询中使用子查询来实现更复杂的查询逻辑。子查询是一个嵌套在主查询中的查询语句,通常用于获取主查询中某些条件的结果,...
    99+
    2024-03-06
    MySQL
  • 详解MySQL子查询(嵌套查询)、联结表、组合查询
    一、子查询 MySQL 4.1版本及以上支持子查询 子查询:嵌套在其他查询中的查询。 子查询的作用: 1、进行过滤: 实例1:检索订购物品TNT2的所有客户的ID = + 一般,在WHERE...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作