学习Oracle的历程(四)

database

     前面,我们学习了在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了,

    最主要的是学精,学透彻哦!

    (^_^)~喵~!!

 

    

以上是 学习Oracle的历程(四) 的全部内容, 来源链接: utcz.com/z/533856.html

回到顶部