排序
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: