「这是我参与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 列名
when 值1 then 显示结果1
when 值2 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
为什么要做分页查询?
-
数据量太大,一次取出没有实际业务意义
-
数据量太大,一次取出不够安全
怎样实现分页查询?
操纵行来实现
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页 | 1 | 5 | |
| 第2页 | 6 | 10 | |
| 第3页 | 11 | 15 | |
| 第4页 | 16 | 20 |
| 每页10条 | 起始行号 | 结束行号 | |
|---|---|---|---|
| 第1页 | 1 | 10 | |
| 第2页 | 11 | 20 | |
| 第3页 | 21 | 30 | |
| 第4页 | 31 | 40 |
等差数列:an = a1 + (n - 1)d
起始行号的公式: 1 + (当前页号 - 1)每页记录数
结束行号: an = 每页记录数 + (当前页号 - 1)每页记录数
= 当前页号 * 每页记录数