一.分页查询: 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多表的复杂查询相关推荐

  1. oracle 丁勇 从零开始学_8.3.1 多表查询分类

    8.3  多表查询 多表查询是指使用SELECT语句从多个表中查询数据,多个表之间通过主外键关系进行关联.在Oracle中,多表查询有两种写法,一种是由ANSI制定的标准的连接语法:另一种是由Orac ...

  2. oracle主从关系表查询,Oracle 主从表联合查询解决方法

    Oracle 主从表联合查询 表A id   type   name 1    E      AA 2    F 表B id   Aid    name 1    2      BB 2    2   ...

  3. oracle 查询天,Oracle查询_ 单表查询

    前面我们详解了关于Oracle的增删改,今天让我们接着来学习Oracle的查询吧, Oracle中查询可是重头戏噢!!!跟着煌sir的步伐,走位,走位~~~ 小知识锦囊 在此前,先讲解一个小知识点 O ...

  4. oracle遍历表做查询,oracle 语句之对数据库的表名就行模糊查询,对查询结果进行遍历,依次获取每个表名结果中的每个字段(存储过程)...

    语句的执行环境是plsql的sql窗口, 语句的目的是从整个数据库中的所有表判断 不等于某个字段的记录数 . 代码如下: declare s_sql clob:=''; -- 声明一个变量,该变量用于 ...

  5. Oracl数据库管理方面的资料(查询sga,查看oracle数据库名称sid,查看oracle数据库名称,查看表空间,修改表空间名称,数据库管理,sqlPlus数据显示)

    显示Oracle sga相关信息: SQL> show sga Total System Global Area 105978600 bytes Fixed Size 453352 bytes ...

  6. oracle怎么查询表空间信息,查询Oracle表空间信息

    查询Oracle表空间信息,查看当前用户每个表占用空间的大小:查询出系统表空间的大小,并按大小进行降序排列(需要SYSDBA的权限): 1.查看当前用户每个表占用空间的大小: Select Segme ...

  7. oracle查表文件大小,Oracle表空间使用大小查询

    1.查询一个表的物理空间数量:select segment_name,sum(bytes)/1024/1024 from user_extents where segment_type = 'TABL ...

  8. sql语句查询Oracle|sql server|access 数据库里的所有表名,字段名

    Oracle select * from user_tables where table_name = '用户名' 如果是用该用户登录使用以下语句: SELECT * FROM USER_TABLES ...

  9. oracle 物理表,【查询Oracle表实际物理使用大小】

    Oracle中有两种含义的表大小 一种是分配给一个表的物理空间数量,而不管空间是否被使用.可以这样查询获得字节数: select segment_name, bytes from user_segme ...

  10. 查询oracle表上重复的数据库,如何确定Oracle数据库表重复的记录

    正在看的ORACLE教程是:如何确定Oracle数据库表重复的记录. 作为一个Oracle数据库开发者或者DBA,在实际工作中经常会遇到这样的问题:试图对库表中的某一列或几列创建唯一索引时,系统提示O ...

最新文章

  1. html post 图片,如何发送图片作为多部分POST请求的一部分 - Java HtmlUnit
  2. java json开发包 fastjson 简介
  3. java kettle log_kettle使用log4j管理输出日志
  4. 网站开发技巧参考大全转
  5. Nginx的rewrite之if指令(二)
  6. 并行开发 —— 第三篇 plinq的使用
  7. MongoDB分析工具之三:db.currentOp()
  8. centos用php上传文件,WBB - Centos下PHP无法Curl模拟Post上传文件的问题
  9. 将一个输入流(InputStream)写入到一个文件中
  10. 【补】day3 table标签
  11. 系统学习机器学习之弱监督学习(三)--Adversarial Autoencoders
  12. [转] 2018年最新桌面CPU性能排行天梯图(含至强处理器)
  13. Java 转换成ObjectC代码
  14. win7获取计算机管理员权限,Win7获取管理员权限的方法
  15. 核心网upf作用_5G核心网SMF和UPF拓扑增强技术研究
  16. 计算机软件产品类退税,软件产品增值税退税政策详解.doc
  17. Android APK反编译得到Java源代码和资源文件
  18. ros理论与实践—bilibili视频学习笔记
  19. 网站建设应该怎样建?建站流程说明
  20. 2019数学建模国赛C题

热门文章

  1. 文件复制 详解(C++)
  2. C++数据范围及字节对照表
  3. python爬取豆瓣书籍_python爬取豆瓣书籍排行
  4. mysql innodb远程备份_详细说明MySQL备份、还原、innoDB打开
  5. python中如何将列表按列打印_如果列表只包含0,我如何在python中打印?
  6. 【课堂教学/课堂复习/课堂竞赛手段探析】给广大教师推荐一个期末课堂复习的最好办法
  7. 阿里 虚拟主机和弹性web托管的具体区别是什么
  8. redis 的线程模型
  9. ArrayList源码剖析
  10. 性能测试学习线路图(建议)