--单行子查询
select * from emp where sal > (select sal from emp where empno = 7566);
--子查询空值/多值问题
1、如果子查询未返回任何行,则主查询也不会返回任何结果 --(空值)
select * from emp where sal > (select sal from emp where empno = 8888);
2、如果子查询返回单行结果,则为单行子查询,可以在主查询中对其使用相应的单行记录比较运算符 --(正常)
select * from emp where sal > (select sal from emp where empno = 7566);
3、如果子查询返回多行结果,则为多行子查询,此时不允许对其使用单行记录比较运算符 --(多值)--非法
select * from emp where sal > (select avg(sal) from emp group by deptno);
--多行子查询
select * from emp where sal > any(select avg(sal) from emp group by deptno); --any返回子查询中结果的最小值
select * from emp where sal > all(select avg(sal) from emp group by deptno); --all返回子查询中结果的最大值
select * from emp where job in (select job from emp where ename = 'MARTIN' or ename = 'SMITH'); --in先判断子查询即里面的结果,再作为条件进行外面的判断
--对于 in 和 exists
--EXISTS的执行流程
--select * from t1 where exists ( select null from t2 where y = x )
--可以理解为:
--for x in ( select * from t1 )
--loop
--if ( exists ( select null from t2 where y = x.x )
--then
--OUTPUT THE RECORD
--end if
--end loop
select * from emp e where exists (select * from emp m where ename in( 'MARTIN', 'SMITH') and e.job=m.job); --exists是先判断外面的查询,然后查询里面的结果,再通过连接条件将两个结果连接起来进行判断
区别:
1、如果子查询得出的结果集记录较少,主查询中的表较大且又有索引时应该用 in,反之如果外层的主查询记录较少,子查询中的表大,又有索引时使用 exists。
2、如果是 exists,--那么以外层表为驱动表,先被访问,如果是 IN,那么先执行子查询,所以我们会以驱动表的快速返回为目标,那么就会考虑到索引及结果集的关系了
3、IN 是不对NULL进行处理
eg: select 1 from dual where null in (0,1,2,null) 结果为空
--查询某用户下所有表
select table_name from all_tables where owner='SCOTT';
select * from all_tables where owner='SCOTT';
--查询 EMP 表中所有字段(列)
select * from all_tab_columns where table_name='EMP';
--列出表的索引列
select * from sys.all_ind_columns where table_name='EMP';
select * from sys.all_ind_columns where upper(table_name)='CAREUSERHAM';
--列出表中约束
select * from all_constraints where table_name='EMP'
--在 oracle中描述数据字典视图
select table_name ,comments from dictionary where table_name like '%TABLE%';
分享到:
相关推荐
Oracle基础查询关联查询练习题.docx
本文档主要包含oracle的基础查询语句及其含义,适合于人们人员查看
oracle基础教程 课程说明 1 课程介绍 1 课程目标 1 相关资料 1 第1章 ORACLE数据库概述 2 1.1 产品概述 2 1.1.1 产品简介 2 1.1.2 基本概念 3 1.2 ORACLE系统结构 4 1.2.2 ORACLE物理结构 4 1.2.3 系统全局区 6 ...
oracle 函数大全 参考函数 手册 速查 chm格式。。。
Oracle基础练习题及答案(多表查询1)Oracle基础练习题及答案(多表查询1).
《Oracle查询优化改写技巧与案例》不讲具体语法,只是以案例的形式介绍各种查询语句的用法。第1~4章是基础部分,讲述了常用的各种基础语句,以及常见的错误和正确语句的写法。这部分的内容应熟练掌握,因为日常查询...
oracle基础创建表,删除表,修改表,查看表的结构和数据,添加数据语法:删除数据语法,更新数据语法:基础查询语法:
入门的oracle教程,经典,实用.基础的oracle语句,内连接,外连接,多表查询,创建表
《Oracle查询优化改写技巧与案例》不讲具体语法,只是以案例的形式介绍各种查询语句的用法。第1~4章是基础部分,讲述了常用的各种基础语句,以及常见的错误和正确语句的写法。这部分的内容应熟练掌握,因为日常查询...
自学oracle时的笔记,oracle基础入门,常用函数,多表查询范例
ch07SQL高级查询技术.ppt ch08管理安全性.ppt ch09PLSQL基础.ppt ch10管理表.ppt ch11索引.ppt ch12视图.ppt ch13过程、函数和程序包.ppt ch14触发器.ppt ch15事务处理和并发控制.ppt ch16闪回操作.ppt ch17数据传输...
oracle数据库sql基础查询
玩转oracle全套教程 韩顺平 第1讲 oracle基础介绍 4 韩顺平.玩转oracle第2讲.oralce安装 4 韩顺平.玩转oralce第3讲.oracle的基本使用 4 韩顺平.玩转oralce第4讲.oracle用户管理(1) 4 韩顺平.玩转oralce第5讲.oracle...
SQL,结构化查询语言,是用于访问关系型数据库的语言,它提供一系列的表达式用于从关系数据库中存储、更新、删除、取得数据。自从关系型数据库发布以来,它逐步流行了起来。其他的语言也被提出用语关系型数据库,...
《Oracle查询优化改写技巧与案例》不讲具体语法,只是以案例的形式介绍各种查询语句的用法。第1~4章是基础部分,讲述了常用的各种基础语句,以及常见的错误和正确语句的写法。这部分的内容应熟练掌握,因为日常查询...
Oracle基础使用子查询PPT课件.pptx