Oracle:子查询、排序

    科技2024-12-26  22

    CMD命令行连接Oracle数据库

    1、使用CMD命令行连接Oracle数据库应该跟连接MySQL数据库差不多,因此这里简单介绍下

    2、命令:conn 用户名/密码@数据库所在IP:端口号/实例名     ⑴因为在Oracle中用户对应数据库,因此用不同的用户名来连接到不同的数据库

    例0:

    C:\Users\Administrator>sqlplus/nolog SQL*Plus: Release 11.2.0.1.0 Production on 星期一 9月 14 20:10:51 2020 Copyright (c) 1982, 2010, Oracle.  All rights reserved. SQL> conn zh/123456@127.0.0.1:1521/orcl 已连接。 SQL>

     

     

    排序

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

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

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

    例1:

    例1_1:默认排序(升序)

    例1_2:降序

    例1_3:多个排序

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

     

     

    限制查询返回条数

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

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

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

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

    例2:只返回第一条数据

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

     

    子查询

    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查询值返回一行数据

    例4:

    例4_1:

    例4_2:

    例4_3:

     

    多行子查询

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

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

    例4_4:错误示例

    例4_5:

     

    多表子查询

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

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

    例5:单行子查询

    例5_1:多行子查询  

     

     

    Oracle函数介绍

    NVL函数

    1、格式:NVL(expr1,expr2)

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

    例6_1:

     

    NVL2函数

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

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

    例7_1:

     

     

    Processed: 0.012, SQL: 8