`
dong_dong
  • 浏览: 31654 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Oracle学习之子查询

阅读更多

一、子查询

 

          在一个SQL语句中嵌套另一个SQL语句成为子查询。

          当一个问题无法通过一部解决时可考虑使用子查询,一个出现在SELECT

       语句的FROM子句中的子查询被称为"内嵌视图";一个出现在SELECT语

       句的WHERE子句中的子查询被称为"内嵌子查询",一个子查询能够包含

           另一个子查询,在一个顶级的查询中,Oracle数据库没有限制在FROM

           子句中的嵌套层数,可以在一个WHERE子句中嵌套255层子查询

 

            子查询可包括:

1、单行子查询(子查询只返回一行)

 

                    单行子查询可使用如下操作符:

 

                    >        大于

    <        小于

       =        等于

    >=     大于等于

    <=     小于等于

    <>     不等于

 

2、多行子查询(子查询返回多行)

 

                    多行子查询可使用如下操作符:

 

                    IN        等于列表中的任何一个

                    ANY     和子句中返回的任意一个值比较

                    ALL      和子句中返回的所有值比较

 

     出现在WHERE子句中的子查询语法

 

SELECT  select_list
FROM  table
WHERE expr operator
                  (SELECT select_list
                   FROM  table);

       

查询scott用户下的emp表中工资比scott高的员工的信息(此操作中

        的子查询只返回一行记录)

 

SQL> select * from emp
  2  where sal>(
  3            select sal from emp where ename='SCOTT');

     EMPNO ENAME      JOB              MGR HIREDATE              SAL       COMM     DEPTNO
---------- ---------- --------- ---------- -------------- ---------- ---------- ----------
      7839 KING       PRESIDENT            17-11月-81           5000                    10
 

 

查询scott用户下的emp表中所有的经理的信息(此操作子查询会返回

多行记录)

SQL> select * from emp
  2  where empno in (
  3                 select mgr from emp);

     EMPNO ENAME      JOB              MGR HIREDATE              SAL       COMM     DEPTNO
---------- ---------- --------- ---------- -------------- ---------- ---------- ----------
      7566 JONES      MANAGER         7839 02-4月 -81           2975                    20
      7698 BLAKE      MANAGER         7839 01-5月 -81           2850                    30
      7782 CLARK      MANAGER         7839 09-6月 -81           2450                    10
      7788 SCOTT      ANALYST         7566 19-4月 -87           3000                    20
      7839 KING       PRESIDENT            17-11月-81           5000                    10
      7902 FORD       ANALYST         7566 03-12月-81           3000                    20

已选择6行。

 

 

      出现在FROM子句中的子查询语法

 

SELECT select_list
FROM  (SELECT select_list
       FROM table)
WHERE expr;
 

    将scott用户下的emp表中查询出的数据作为一个内嵌视图在FROM子句中

    使用

 

SQL> select *
  2  from (select empno,ename,job,sal from emp);

     EMPNO ENAME      JOB              SAL
---------- ---------- --------- ----------
      7369 SMITH      CLERK            880
      7499 ALLEN      SALESMAN        1600
      7521 WARD       SALESMAN        1250
      7566 JONES      MANAGER         2975
      7654 MARTIN     SALESMAN        1250
      7698 BLAKE      MANAGER         2850
      7782 CLARK      MANAGER         2450
      7788 SCOTT      ANALYST         3000
      7839 KING       PRESIDENT       5000
      7844 TURNER     SALESMAN        1500
      7876 ADAMS      CLERK           1100
      7900 JAMES      CLERK            950
      7902 FORD       ANALYST         3000
      7934 MILLER     CLERK           1300

已选择14行。
 

      子查询也可出现在SELECT列表中,但此时子查询只能是一个单行子查询

 

select (select job from emp where empno=7369)
from emp;

 

      子查询也可出现在HAVING子句中

 

SQL> select empno,ename, sal,deptno
  2  from emp
  3  group by deptno,empno,ename,sal
  4  having deptno in (
  5                   select deptno from emp
  6                   where deptno=10 or deptno=20)
  7  order by deptno,sal;

     EMPNO ENAME             SAL     DEPTNO
---------- ---------- ---------- ----------
      7934 MILLER           1300         10
      7782 CLARK            2450         10
      7839 KING             5000         10
      7369 SMITH             880         20
      7876 ADAMS            1100         20
      7566 JONES            2975         20
      7902 FORD             3000         20
      7788 SCOTT            3000         20

已选择8行。

 

      如果子查询返回了一个空值,则主查询将不会查到任何结果

 

SQL> select * from emp
  2  where empno=(
  3               select empno from emp
  4               where deptno=40);

未选定行
 

 

    子查询注意的问题:

1>、要将子查询发在圆括号内

 

2>、子查询可出现在WHERE子句、FROM子句、SELECT列表(此处

                   只能是一个单行子查询)、HAVING子句中

 

3>、子查询不能出现在主查询的GROUP BY语句中

 

4>、子查询和主查询使用表可以不同,是要子查询返回的结果能够被

                            主查询使用即可

 

5>、一般不会在子查询中使用ORDER BY语句,但在TOP-N分析中

                             必须使用ORDER BY语句

 

6>、当行子查询只能使用单行操作符,多行子查询只能使用多行操作

                   符

 

7>、采用合理的缩进和换行来提过SQL语句的可读性

 

8>、子查询中的空值问题

 

分享到:
评论

相关推荐

    oracle子查询学习教案.pptx

    oracle子查询学习教案.pptx

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

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

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

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

    oracle讲义:子查询

    oracle学习,内容为子查询的基本概念,以及子查询常见的用法等

    Oracle数据库-- 高级子查询chinese

    通过本章学习,您将可以: ...子查询对空值的处理 在 FROM 子句中使用子查询 在SQL中使用单列子查询 相关子查询 书写相关子查询 使用子查询更新和删除数据 使用 EXISTS 和 NOT EXISTS 操作符 使用 WITH 子句

    oracle子查询PPT学习教案.pptx

    oracle子查询PPT学习教案.pptx

    Oracle基础学习之子查询

    所谓子查询就是当一个查询的结果是另一个查询的条件时,称之为子查询。本文给大家详细的介绍了关于Oracle中子查询的相关知识,文中的内容也算是自己的一些学习笔记,希望对有需要的朋友们能有所帮助,感兴趣的朋友们...

    Oracle基础使用子查询PPT课件.pptx

    Oracle基础使用子查询PPT课件.pptx

    oracle学习笔记(txt格式,自己总结的,很详细,每章附有例题和习题及答案)

    oracle学习笔记,txt格式,完全是自己总结的,特别详细,有例子,还有练习题以及答案。包括1.基本SQL语句 2.限制和排列数据 3.单行函数 4.多表查询 5.组函数 6.子查询 7.数据操作 8.创建和维护表 9.约束 10.创建视图...

    oracle子查询PPT课件.pptx

    oracle子查询PPT课件.pptx

    Oracle入门学习资料精华

    里面包含Oracle基础知识讲解,SQL语句的详解,从初级一步一步深入到高级子查询,一届DML和DDL语句的扩展。是一本初学入门Oracle的好资料

    Oracle数据库经典学习教程

    子查询和常用函数 48 1. 子查询 49 2. Oracle中的伪列 51 3. Oracle函数 54 4. 本章总结 62 5. 本章练习 63 表空间、数据库对象 66 1. Oracle数据库对象 67 2. 同义词 67 3. 序列 70 4. 视图 72 5. 索引 74 6. 表...

    第7章 子查询

    掌握子查询可以解决的问题; 了解子查询的分类; 掌握单行子查询、多行子查询、多列子查询; 掌握在WHERE、HAVING、FROM子句中编写子查询; 理解子查询返回空值对主查询所产生的影响; 掌握T0P-N及分页查询;

    Oracle数据库学习笔记

    Oracle数据库学习笔记,包括课程PPT(数据库基础,简单查询,单行多行函数,多表连接,子查询,高级子查询,集合运算,层次查询,DML与事务控制,数据库的网络连接,创建维护表,约束,视图,序列索引和同义词,用户...

    Oracle高级sql学习与练习

    9、相关子查询和非相关子查询 10、增强GROUP BY 11、分析函数(ANALYTICAL FUNCTIONS) 12、ROWID的使用 13、ORACLE 10G正则表达式 14、使用HINT 15、PARITION分区 16、并行操作 17、扩展DDL和DML语句 18、MODEL语句...

    Oracle经典教程(oracle 10g版本11g未找到)

     常用子查询及常用函数  PL/SQL编程  Oracle基本管理 由于在第一学期已经接触了SQL Server,Oracle数据库的概念不是很难,主要是实践,因此在本书的学习中,认真的完成上机练习是学习好本书的关键。 接下来...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 第一章 Oracle入门 一、 数据库概述 数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,它产生于距今五十年前。简单来说是本身可视...

    Oracle通过递归查询父子兄弟节点方法示例

    主要给大家介绍了关于Oracle如何通过递归查询父子兄弟节点的相关资料,递归查询对各位程序员来说应该都不陌生,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧。

Global site tag (gtag.js) - Google Analytics