学习Oracle的历程 (四)
前面,我们学习了在Oracle中学习了DML操作,可以我们添加数据、修改数据、删除数据,当我说到这里难免有大部分人觉得有点别扭,感觉缺少了点什么?
没错,作为编程的根本四要素之一,我们怎么只能去修改、添加、删除、而不去查看数据呢? 今天小喵学习了我们的Oracle中的DQL语句/操作.
DQL语句/操作 其体型对小苗来说是有点庞大了,得慢慢啃了!┭┮﹏┭┮
一 . 单表查询
在正式开始之前,我们先来回顾一下我们的DQL操作的标准语法吧!
select distinct * | 列名 as 别名, 列表2 as 别名2... | 聚合函数
from 表名 as 别名, 表名2 as 别名2 ,....
where 查询条件
group by 分组字段 having 分组条件
order by 排序字段 asc | desc,....
1. 简单查询
2. 去重和排序
3.伪列
首先,我们需要知道 伪列是Oracle中独有,伪列也是真实存在的列,也是可以用来进行查询操作的,伪列只能用来查询,不能用来进行增删改操作.
1)rowid : 物理文件上唯一区别这条记录的唯一标识,表中的每一行在数据文件中都有一个物理地址,ROWID伪列返回的就是该行的物理地址。使用ROWID可以快速的定位表中的某一行。ROWID值可以唯一的标识表中的一行。
2)rownum : 在查询的结果集中,ROWNUM为结果集中每一行标识一个行号,第一行返回1,第二行返回2,以此类推。通过ROWNUM伪列可以限制查询结果集中返回的行数。
注 : 当我们学习分页查询的时候需要用到此 列 (rownum)
4.聚合统计
其实,Oralce的聚合统计是通过分组函数来实现的,这和MySQL一致.
1) 聚合函数
求和 : sum
求平均 : avg
求 最大值 : max
求 最小值 : min
求 统计记录个数 : count
2) 分组聚合 Group by
3)分组后条件查询 having
这里解释一下having 和 where 的区别 :
1. having 是在分组后对数据进行过滤,
where 是在分组前对数据进行过滤
2. having 后面可以使用分组函数(统计函数),
where 后面不可以使用分组函数.
3. having 运算的字段,必须在select中出现,
where 运算的字段,无需在select中出现
二 . 连接查询
1) 笛卡尔积/交叉连接查询 : 两个表乘积,所有的数据最大集
-- 基本语法
select * from A,B;
注 : 笛卡尔积会存在错误的数据信息,因此通常我们会采用一下连接方式
2) 内连接查询 : 分为隐式内连接 和 显示内连接
隐式内连接 :
--基础语法
select * from A表 , B表 on 连接条件
--实例
select * from A a,B b where a.id = b.id;
显示内连接 :
--基础语法
select * from A表 inner join B表 on 连接条件
--实例
select * from A a inner join B b on a.id = b.id;
3) 外连接查询 : 分左外连接 和 右外连接
左外连接 :
查询左表 (A表)所有数据,如果条件成立,显示右表(B表)的数据,否则显示null
--基础语法
select * from A表 left outer join B表 on 连接条件
--实例
select * from A a left outer join B b on a.id = b.id;
右外连接 :
查询右表 (B表)所有数据,如果条件成立,显示左表(A表)的数据,否则显示null
--基础语法
select * from A表 right outer join B表 on 连接条件
--实例
select * from A a right outer join B b on a.id = b.id;
三 . 子查询
1)子查询 : 将其他select的查询结果,作为select的查询条件. 子查询可以轻松解决很多疑难需求,但需要注意,子查询中, select 关键字出现得越多,查询效率就越低
2) 单行子查询
3)多行子查询
4) 嵌套子查询
顾名思义,在子查询中再次嵌入子查询
5) 标量子查询
将子查询的结果作为主查询语句的显示结果 ,但 前提是子查询的结构必须返回单个的值.
解谜 :
Oracle 中的dual表
Oracle中独有的最小的工作表,只有一行一列,具有某些特殊功用。
特性
1、Oracle提供的最小的表,不论进行何种操作(不要删除记录),它都只有一条记录——"X"。
例如:执行select * from dual,里面只有一条记录;执行insert into dual values("Y")后,再次查询dual表,仍然显示一条记录。
2、是sys用户下的一张内部表,所有用户都可以使用DUAL名称访问,无论什么时候这个表总是存在。
6)相关子查询
子查询需要依赖外部的主查询语句
四. 分页查询
1) 简单的分页
在Oracle中进行分页查询,我们需要用到 伪列 rownum (伪列上面有说哦!忘记的小伙伴可以拉回上面看看哦!) 和 嵌套查询 .
在Oracle的分页中,因为rownum是在查询语句扫描每条数据是产生的,所以不能使用"大于"符号,只能使用"小于"或"小于等于",同时也不能直接只用"等于".
2)基于排序的分页
在Oracle中因为 伪列 rownum 的产生是在表记录扫描时产生的,而排序是后进行的,排序时R已经生成,所以排序后R是乱的.
那我们该如何写呢?
很简单,我们只要再嵌套一层循环 (一共三层),让结果先排序,然后在对排序后的结果在生产rownum,这样就避免了排序后 R是乱序的问题了.
今天到的分享就到这里了,
知识可能有点量大了,小伙伴们慢慢学就ok了,
最主要的是学精,学透彻哦!
(^_^)~喵~!!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341