Oracle:子查询、排序

排序

1、在SQL中可以使用ORDER BY 对查询结果进行排序:这里跟MYSQL中的语法是一样的

2、完整语法:SELECT 列名 FROM 表名 where 过滤条件 ORDER BY 排序列名1|排序列名2  ASC|DESC

3、参数:
    ⑴排序列名1|排序列名2:表示根据哪些列来进行排序,可以根据一个或多个
    ⑵ASC:表示按照ASCII升序排列(这个是默认的排序方式,可以不指定)
    ⑶DESC:按照降序排列

例1:


例2:默认排序(升序)

例3:降序

例4:多个排序

注:
当存在多个排序列名时:如果第一个参数多个行具有相同的值时才会按第二个参数排序,如果第一个参数的值都是唯一的,则就不会按第二个参数排序了

限制查询返回条数

1、前面在学习MySQL时,介绍过一个LIMIT子句:这个子句在MYSQL中用于限制查询结果的返回条数
    ⑴如:满足查询条件的数据有很多条,那么可以使用LIMIT子句来限制实际返回结果的条数

2、但是:在Oracle没有LIMIT子句
    ⑴Oracle:从12c版本开始,才可以使用FETCH子句限制返回行数

3、那么在12c之前该怎样来限制查询结果的条数呢?可以使用ROWNUM!!

4、对于rownum来说它是oracle系统顺序分配为从查询返回的行的编号,返回的第一行分配的是1,第二行是2,依此类推
    ⑴这个伪字段可以用于限制查询返回的总行数,且rownum不能以任何表的名称作为前缀
    ⑵这个rownum子句还是有点特殊的,感觉不是很好理解,涉及到的有点多,具体的可以自己百度下

例5:只返回第一条数据

 例6:升序排序后返回前3条数据

 例7:升序排序后返回第2至8条数据

注:

1、关于限制查询结果条数,可以看:https://blog.csdn.net/mitedu/article/details/3584399

2、rownum不支持以下方式的查询
    ⑴select * from area where rownum > 2;
    ⑵select * from area where rownum = n; 

3、rownum只支持select * from area where rownum = 1的查询

子查询

1、SELECT查询的结果作为另外一个SELECT、UPDATE或DELETE语句的条件,它的本质就是在WHERE条件中嵌套的一个条件表达式

2、子查询是嵌套在SQL SELECT语句中的另一个SELECT语句
    ⑴子查询(内查询)在主查询执行之前执行(子查询必须在圆括号中)
    ⑵主查询(外查询)使用子查询的结果

3、Oracle子查询分为两种:一种是单行子查询,一种是多行子查询(还有种为空)
    ⑴单行子查询:单行子查询的内层SELECT语句只返回一行数据,也就是说嵌入在其他Sql语句中的那个select查询值返回一行数据
    ⑵多行子查询:多行子查询就是嵌入在其他Sql语句中的SELECT查询返回多行数据

4、注意子查询返回多行:外层SELECT的过滤条件只能使用IN关键字,不能使用'='
    ⑴'='号表示一对一,in表示处于一个范围(用来处理子查询返回多行记录)

5、子查询一般用于多表查询:多个表之间有关联字段,通过一个表的关联字段来查询另一个表的数据


单表子查询

单表子查询:即所有查询都是在一个表中进行的
注:以下查询基于以下数据

单行子查询

单行子查询:单行子查询的内层SELECT语句只返回一行数据,也就是说嵌入在其他Sql语句中的那个select查询值返回一行数据

例8:

例9:

例10:

例11:

多行子查询

1、多行子查询:多行子查询就是嵌入在其他Sql语句中的SELECT查询返回多行数据

2、如果子查询返回的是多行,那么主查询的过滤条件就只能使用in了,不能使用等于、大于、小于等

例12:错误示例

例13:

多表子查询

1、多表子查询:就是两个表之间有一定的字段联系,通过一个表来查询另一个表的数据

2、多表子查询中,子查询返回的数据也可以是单行,也可以是多行

例14:单行子查询

例15:多行子查询
 

Oracle函数介绍

NVL函数

1、格式:NVL(expr1,expr2)

2、作用:可以用在判断查询结果是否为空(指的是查询列值为null,而不是说无查询结果)
    ⑴如果第一个参数(expr1:表达式)的值为空,那么返回第二个参数(expr2:表达式)的值(第一个参数始终是表查询字段)
    ⑵如果第一个参数(表达式)的值不为空,那么返回第一个参数(表达式)本来的值
    ⑶两个参数类型可以为任意类型,或NULL
    
例16:

例17:

NVL2函数

1、格式:NVL2(expr1,expr2, expr3)

2、作用:与NVL函数类似,只是有三个参数
    ⑴如果该函数的第一个参数不为空,那么返回第二个参数的值
    ⑵如果该函数的第一个参数的值为空,那么返回第三个参数的值
    
例18:

例19:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不怕猫的耗子A

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值