Oracle数据库的应用,DQL简单查询-2

135 阅读2分钟

「这是我参与2022首次更文挑战的第9天,活动详情查看:2022首次更文挑战」。

接上篇文章继续说说oracle的DQL简单查询

5. 转义

如果要查询实际的下划线或百分号就需要使用ESCAPE选项区分通配符

ESCAPE选项告知数据库如何区分通配符和要匹配的字符,例如:

SELECT ename  FROM  emp  WHERE ename  LIKE  '%\%%'  ESCAPE  '\'

6. 处理NULL值

NULL值表示未知的值。它是一个特殊的值,但并不是空字符串,NULL值表示该列是未知的。

NVL(列名, 0),当时列为NULL时,返回0

7. as 可以给列名起一个别名,并且在返回记录时使用别名返回。默认oracle将别名转为大写。如果想自定义别名可以在用""将别名括起来。as可以省略。

8. DISTINCT 删除重复的行记录,union ,union all

9. ORDER BY,排序(基本语句: ORDER BY 表达式1 ASC/DESC,表达式2 ASC/DESC......),多个表达式之间用逗号隔开

  • ASC 升序,可省略
  • DESC 降序

10. 使用用户输入的参数

语法:&参数名

11. case 列名

            when1 then 显示结果1

            when2 then 显示结果2

            ……

           else 结果

           end 

1.3 分页查询

设:page_no为当前页号,count每页记录数

select s2.* from

(

    select s1.*,rownum rn from (

          select s.* from student s  order by s.id

    ) s1

) s2  where rn between 1 + (&page_no - 1) * &count  and  + &page_no * &count

为什么要做分页查询?

  1. 数据量太大,一次取出没有实际业务意义

  2. 数据量太大,一次取出不够安全

怎样实现分页查询?

操纵行来实现

select t2.* from (

  select t1.*,rownum rn from (

      select * from t_student order by id asc

  ) t1

)t2

where t2.rn between 起始行号 and 结束行号

起始行号公式:

每页5条起始行号结束行号
第1页15 
第2页610
第3页11 15
第4页16 20
每页10条起始行号结束行号
第1页110 
第2页1120
第3页21 30
第4页31 40

等差数列:an = a1 + (n - 1)d

起始行号的公式: 1 + (当前页号 - 1)每页记录数

结束行号: an = 每页记录数 + (当前页号 - 1)每页记录数

         = 当前页号 * 每页记录数