oracle最难的多表查询,Oracle多表的复杂查询
一.分页查询: 1. 根据rowid来分 select * from t_xiaoxi where rowid in (select rid from (select rownum rn, rid fr
一.分页查询:
1. 根据rowid来分
select * from t_xiaoxi where rowid in (select rid from (select rownum rn, rid from(select rowid rid, cid from t_xiaoxi order by cid desc) where rownum<10000) where rn>9980) order by cid desc;
执行时间0.03秒
2. 按分析函数来分
select * from (select t.*, row_number() over(order by cid desc) rk from t_xiaoxi t) where rk<10000 and rk>9980;
执行时间1.01秒
3. 按rownum来分
select * from (select t.*,rownum rn from(select * from t_xiaoxi order by cid desc)t where rownum<10000) where rn>9980;
执行时间0.1秒
按rownum来分
a. rownum 分页
SELECT * FROM emp;
b. 显示rownum[Oracle分配的]
SELECT e.*, ROWNUM rn FROM (SELECT * FROM emp) e;
rn相当于Oracle分配的行的ID号
c.挑选出6—10条记录
先查出1-10条记录
SELECT e.*, ROWNUM rn FROM (SELECT * FROM emp) e WHERE ROWNUM <= 10;
如果后面加上rownum>=6是不行的,
然后查出6-10条记录
SELECT * FROM (SELECT e.*, ROWNUM rn FROM (SELECT * FROM emp) e WHERE ROWNUM <= 10) WHERE rn >= 6;
*指定查询列,只需要修改最里层的子查询
SELECT * FROM (SELECT e.*, ROWNUM rn FROM (SELECT ename, sal FROM emp) e WHERE ROWNUM <= 10) WHERE rn >= 6;
*排序查询,,只需要修改最里层的子查询
工资排序后查询6-10条数据
SELECT * FROM (SELECT e.*, ROWNUM rn FROM (SELECT ename, sal FROM emp ORDER by sal) e WHERE ROWNUM <= 10) WHERE rn >= 6;
二.用查询结果创建新表
CREATE TABLE mytable (id, name, sal, job, deptno) as SELECT empno, ename, sal, job, deptno FROM emp;
三.合并查询
实际应用中,有时为了合并多个select语句的结果,可以使用集合操作符号union,union all,intersect,minus
多用于数据量比较大的数据局库,运行速度快。
1). union
该操作符用于取得两个结果集的并集。当使用该操作符时,会自动去掉结果集中重复行。
SELECT ename, sal, job FROM emp WHERE sal >2500
UNION
SELECT ename, sal, job FROM emp WHERE job = 'MANAGER';
2).union all
该操作符与union相似,但是它不会取消重复行,而且不会排序。
SELECT ename, sal, job FROM emp WHERE sal >2500
UNION ALL
SELECT ename, sal, job FROM emp WHERE job = 'MANAGER';
该操作符用于取得两个结果集的并集。当使用该操作符时,会自动去掉结果集中重复行。
3). intersect
使用该操作符用于取得两个结果集的交集。
SELECT ename, sal, job FROM emp WHERE sal >2500
INTERSECT
SELECT ename, sal, job FROM emp WHERE job = 'MANAGER';
4). minus
使用改操作符用于取得两个结果集的差集,他只会显示存在第一个集合中,而不存在第二个集合中的数据。
SELECT ename, sal, job FROM emp WHERE sal >2500
MINUS
SELECT ename, sal, job FROM emp WHERE job = 'MANAGER';
(MINUS就是减法的意思)
四.左右连接
1、内连接(自然连接): 只有两个表相匹配的行才能在结果集中出现
2、外连接: 包括
(1)左外连接 (左边的表不加限制) select a.studentno, a.studentname, b.classname
from students a, classes b where a.classid = b.classid(+);
(2)右外连接(右边的表不加限制) select a.studentno, a.studentname, b.classname
from students a, classes b where a.classid(+) = b.classid
(3)全外连接(左右两表都不加限制)
总之,
左连接显示左边全部的和右边与左边相同的
右连接显示右边全部的和左边与右边相同的
内连接是只显示满足条件的!
补充:
使用(+)的注意事项:
1.(+)操作符只能出现在where子句中,并且不能与outer join语法同时使用。
2.当使用(+)操作符执行外连接时,如果在where子句中包含有多个条件,则必须在所有条件中都包含(+)操作符。
3.(+)操作符不能与or和in操作符一起使用。
4.(+)操作符只能用于实现左外连接和右外连接,而不能用于实现完全外连接。
相关阅读:
Oracle 并行查询
Oracle用户信息查询操作语句
Oracle单表查询某列最大最小值的性能问题
回收站引发Oracle查询表空间使用缓慢
本条技术文章来源于互联网,如果无意侵犯您的权益请点击此处反馈版权投诉
本文系统来源:php中文网
oracle最难的多表查询,Oracle多表的复杂查询相关推荐
- oracle 丁勇 从零开始学_8.3.1 多表查询分类
8.3 多表查询 多表查询是指使用SELECT语句从多个表中查询数据,多个表之间通过主外键关系进行关联.在Oracle中,多表查询有两种写法,一种是由ANSI制定的标准的连接语法:另一种是由Orac ...
- oracle主从关系表查询,Oracle 主从表联合查询解决方法
Oracle 主从表联合查询 表A id type name 1 E AA 2 F 表B id Aid name 1 2 BB 2 2 ...
- oracle 查询天,Oracle查询_ 单表查询
前面我们详解了关于Oracle的增删改,今天让我们接着来学习Oracle的查询吧, Oracle中查询可是重头戏噢!!!跟着煌sir的步伐,走位,走位~~~ 小知识锦囊 在此前,先讲解一个小知识点 O ...
- oracle遍历表做查询,oracle 语句之对数据库的表名就行模糊查询,对查询结果进行遍历,依次获取每个表名结果中的每个字段(存储过程)...
语句的执行环境是plsql的sql窗口, 语句的目的是从整个数据库中的所有表判断 不等于某个字段的记录数 . 代码如下: declare s_sql clob:=''; -- 声明一个变量,该变量用于 ...
- Oracl数据库管理方面的资料(查询sga,查看oracle数据库名称sid,查看oracle数据库名称,查看表空间,修改表空间名称,数据库管理,sqlPlus数据显示)
显示Oracle sga相关信息: SQL> show sga Total System Global Area 105978600 bytes Fixed Size 453352 bytes ...
- oracle怎么查询表空间信息,查询Oracle表空间信息
查询Oracle表空间信息,查看当前用户每个表占用空间的大小:查询出系统表空间的大小,并按大小进行降序排列(需要SYSDBA的权限): 1.查看当前用户每个表占用空间的大小: Select Segme ...
- oracle查表文件大小,Oracle表空间使用大小查询
1.查询一个表的物理空间数量:select segment_name,sum(bytes)/1024/1024 from user_extents where segment_type = 'TABL ...
- sql语句查询Oracle|sql server|access 数据库里的所有表名,字段名
Oracle select * from user_tables where table_name = '用户名' 如果是用该用户登录使用以下语句: SELECT * FROM USER_TABLES ...
- oracle 物理表,【查询Oracle表实际物理使用大小】
Oracle中有两种含义的表大小 一种是分配给一个表的物理空间数量,而不管空间是否被使用.可以这样查询获得字节数: select segment_name, bytes from user_segme ...
- 查询oracle表上重复的数据库,如何确定Oracle数据库表重复的记录
正在看的ORACLE教程是:如何确定Oracle数据库表重复的记录. 作为一个Oracle数据库开发者或者DBA,在实际工作中经常会遇到这样的问题:试图对库表中的某一列或几列创建唯一索引时,系统提示O ...
最新文章
- html post 图片,如何发送图片作为多部分POST请求的一部分 - Java HtmlUnit
- java json开发包 fastjson 简介
- java kettle log_kettle使用log4j管理输出日志
- 网站开发技巧参考大全转
- Nginx的rewrite之if指令(二)
- 并行开发 —— 第三篇 plinq的使用
- MongoDB分析工具之三:db.currentOp()
- centos用php上传文件,WBB - Centos下PHP无法Curl模拟Post上传文件的问题
- 将一个输入流(InputStream)写入到一个文件中
- 【补】day3 table标签
- 系统学习机器学习之弱监督学习(三)--Adversarial Autoencoders
- [转] 2018年最新桌面CPU性能排行天梯图(含至强处理器)
- Java 转换成ObjectC代码
- win7获取计算机管理员权限,Win7获取管理员权限的方法
- 核心网upf作用_5G核心网SMF和UPF拓扑增强技术研究
- 计算机软件产品类退税,软件产品增值税退税政策详解.doc
- Android APK反编译得到Java源代码和资源文件
- ros理论与实践—bilibili视频学习笔记
- 网站建设应该怎样建?建站流程说明
- 2019数学建模国赛C题
热门文章
- 文件复制 详解(C++)
- C++数据范围及字节对照表
- python爬取豆瓣书籍_python爬取豆瓣书籍排行
- mysql innodb远程备份_详细说明MySQL备份、还原、innoDB打开
- python中如何将列表按列打印_如果列表只包含0,我如何在python中打印?
- 【课堂教学/课堂复习/课堂竞赛手段探析】给广大教师推荐一个期末课堂复习的最好办法
- 阿里 虚拟主机和弹性web托管的具体区别是什么
- redis 的线程模型
- ArrayList源码剖析
- 性能测试学习线路图(建议)