Oracle数据库学习(四)--高级查询

1. SQL(高级查询)1.1. 子查询1.1.1. 子查询在WHERE子句中在SELECT查询中,在WHERE查询条件中的限制条件不是一个确定的值,而是来自于另外一个查询的结果。为了给查询提供数据而首先执行的查询语句叫做子查询。子查询:嵌入在其它SQL语句中的SELECT语句,大部分时候出现在WHERE子句中。子查询嵌入的语句称作主查询或父查询。主查询可以是SELECT语
摘要由CSDN通过智能技术生成
     

    1. SQL(高级查询)

    1.1. 子查询

    1.1.1. 子查询在WHERE子句中

    在SELECT查询中,在WHERE查询条件中的限制条件不是一个确定的值,而是来自于另外一个查询的结果。为了给查询提供数据而首先执行的查询语句叫做子查询。

    子查询:嵌入在其它SQL语句中的SELECT语句,大部分时候出现在WHERE子句中。子查询嵌入的语句称作主查询或父查询。主查询可以是SELECT语句,也可以是其它类型的语句比如DML或DDL语句。

    根据返回结果的不同,子查询可分为单行子查询、多行子查询及多列子查询。

    图-1子查询

    例如查找和SCOTT同职位的员工:

    
        
        
        
    1. SELECT e.ename, e.job
    2. FROM emp e
    3. WHERE e.job =
    4. (SELECT job FROM emp WHERE ename = 'SCOTT')

    查找薪水比整个机构平均薪水高的员工:

    
        
        
        
    1. SELECT deptno, ename, sal
    2. FROM emp e
    3. WHERE sal> (SELECT AVG(sal) FROM emp);

    如果子查询返回多行,主查询中要使用多行比较操作符,包括IN、ALL、ANY。其中ALL和ANY不能单独使用,需要配合单行比较操作符>、>=、<、<=一起使用。例如查询出部门中有SALESMAN但职位不是SALESMAN的员工的信息:

    
        
        
        
    1. SELECT empno, ename, job, sal, deptno
    2. FROM emp
    3. WHERE deptno IN
    4. (SELECT deptno FROM emp WHERE job = 'SALESMAN')
    5. AND job <> 'SALESMAN';

    在子查询中需要引用到主查询的字段数据,使用EXISTS关键字。EXISTS后边的子查询至少返回一行数据,则整个条件返回TRUE。如果子查询没有结果,则返回FALSE。例如列出来那些有员工的部门信息:

    
        
        
        
    1. SELECT deptno, dname FROM dept d
    2. WHERE EXISTS
    3. (SELECT * FROM emp e
    4. WHERE d.deptno = e.deptno);

    1.1.2. 子查询在HAVING部分

    子查询不仅可以出现在WHERE子句中,还可以出现在HAVING部分。例如查询列出最低薪水高于部门30的最低薪水的部门信息:

    
        
        
        
    1. SELECT deptno, MIN(sal) min_sal
    2. FROM emp
    3. GROUP BY deptno
    4. HAVING MIN(sal) >
    5. (SELECT MIN(sal) FROM emp WHERE deptno = 30);

    1.1.3. 子查询在FROM部分

    在查询语句中,FROM子句用来指定要查询的表。如果要在一个子查询的结果中继续查询,则子查询出现在FROM 子句中,这个子查询也称作行内视图或者匿名视图。这时,把子查询当作视图对待,但视图没有名字,只能在当前的SQL语句中有效。

    查询出薪水比本部门平均薪水高的员工信息:

    
        
        
        
    1. SELECT e.deptno, e.ename, e.sal
    2. FROM emp e,
    3. (SELECT deptno, AVG(sal) avg_sal FROM emp GROUP BY deptno) x
    4. WHERE e.deptno = x.deptno
    5. ande.sal>x.avg_sal
    6. ORDER BY e.deptno;

    1.1.4. 子查询在SELECT部分

    把子查询放在SELECT子句部分,可以认为是外连接的另一种表现形式,使用更灵活:

    
        
        
        
    1. SELECT e.ename, e.sal, e.deptno,
    2. (SELECT d.deptno FROM dept d
    3. WHERE d.deptno = e.deptno) deptno
    4. FROM emp e;

    1.2. 分页查询

    1.2.1. ROWNUM

    ROWNUM被称作伪列,用于返回标识行数据顺序的数字。例如:

    
        
        
        
    1. SELECT ROWNUM, empno, ename, sal
    2. FROM emp;

    ROWNUM只能从1计数,不能从结果集中直接截取。下面的查询语句将没有结果:

    
        
        
        
    1. SELECT ROWNUM, empno, ename, sal
    2. FROM emp
    3. WHERE rownum> 3;

    如果利用ROWNUM截取结果集中的部分数据,需要用到行内视图:

    
        
        
        
    1. SELECT * FROM
    2. (SELECT ROWNUMrn , e.* FROM emp e
    • 8
      点赞
    • 33
      收藏
      觉得还不错? 一键收藏
    • 0
      评论
    Oracle2: 1. 《Oracle8 优化技术》摘录 (第一章 安装) 2. 《Oracle8 优化技术》摘录 (第二章 内存-CPU) 3. 《Oracle8 优化技术》摘录 (第三章 输入-输出) 4. EXP、IMP 命令详解 5. Oracle Index 的三个问题 6. Oracle PL-SQL语言基础 7. Oracle的分布式管理 8. ORACLE的数据类型 9. Oracle数据库碎片整理 10.ORACLE性能调整1 11.ORACLE性能调整2 12.Oracle专家调优秘密 13.PL_SQL单行函数和组函数详解 14.PL-SQL 15.PLSQL异常处理初步 16.SQL语句性能调整原则 17.创建和使用分区的表 18.基于成本的优化器一般错误概念和问题 19.Delphi 3_0中连接数据库的三种方式 20.远程数据库的访问 21.监控数据库性能的SQL 22.简单实现数据库表空间的备份或迁移 23.简析REDO LOGFILE 24.理解和使用Oracle 8i分析工具-LogMiner 25.哪些初始化参数最影响Oracle系统性能 26.你的SQL语句在什么情况下使用全表扫描? 27.如何对CLOB行字段执行全文检索 28.如何让你的SQL运行得更快 29.如何使‘CREATE TABLE AS SELECT’能支持ORDER BY 30.删除表内重复记录的方法 31.数据库安全性策略 32.数据库查询优化技术. 33.提高C-S系统性能的一些方法 34.提高ORACLE数据库系统import性能 35.外部联接的用法 36.性能调试的一般问题 37.优化 38.优化调整Oracle 8i数据库(从操作系统) 39.在Internet上运作公司是一项艰苦的任务--关键任务 40.在oracle中限制返回结果集的大小 41.在远端如何建立standby数据库 42.怎样分析你的SQL语句的效率 43.自动备份Oracle数据库 44.总结SQL语句中的优化提示 45.使用Database Configuration Assistant安装第二个数据库 46.Oracle 数据库向 MS SQL Server 7.0 的迁移 Oracle1: 1. Decode()函数使用技巧(NT+IIS+ASP+ORACLE) 2. Dual伪列 3. EXP、IMP 命令详解 4. Exp-Imp大量数据 5. Export-Import 使用技巧与常见错误 6. NULL 使用详解 7. Oracle for NT系统实用工具介绍 8. Oracle 和 mysql 的一些简单命令对比参照 9. Oracle8i和Microsoft SQL Server7_0比较 10. Oracle8的不安全因素及几点说明 11. Oracle常见错误代码 12. Oracle常用Script 13. Oracle常用数据字典 14. ORACLE回滚段管理(上) 15. ORACLE回滚段管理(下) 16. Oracle基于Client-Server的性能调整 17. Oracle数据库的安全策略 18. ORACLE数据库简介 19. Oracle数据库密码文件的使用和维护 20. Oracle数据库碎片整理 21. Oracle特殊包 22. Oradim工具的用法 23. PB如何连接Oracle数据库 24. ROLLBACK不能回滚的命令 25. 安装Oracle后,经常使用的修改表空间的SQL代码 26. 比较SQL Server与Oracle、DB2 27. 多个数据库时,如何设置默认数据库 28. 各种数据类型的比较 29. 漫谈oracle中的空值 30. 没有备份、只有归档日志,如何恢复数据文件 31. 哪些初始化参数最影响Oracle系统性能 32. 如何查看数据库的字符集 33. 如何启动ARCHIVELOG模式 34. 如何使‘CREATE TABLE AS SELECT’能支持ORDER BY ? 35. 如何使用归

    “相关推荐”对你有帮助么?

    • 非常没帮助
    • 没帮助
    • 一般
    • 有帮助
    • 非常有帮助
    提交
    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值