Oracle SQL 查询优化.Part1
2016-04-03 20:56
459 查看
一、空值处理:
1. 查找空值 null:
2. 空值 null 不能做“加、减、乘、除、比较”等运算:
3. nvl、coalesce 将空值转换为实际值:
nvl 只能接受两个参数,而 coalesce 可以接受多个参数,返回第一个不是 null 的值。例如下边的两个 SQL 是等价的:
下边两句等价,coalesce 函数从第一个参数开始从左到右,依次判断是否为 null, 返回第一不为 null 的值,直至最后一个参数的值。
二、rownum 限制返回的行数:
1. rownum 是返回数据一个排序标识:
rownum 会依次对返回的每一条数据做一个标识,经常在分页的时候会见到。这里红色着重标注“返回”两字,是指 rownum 不是记录的固有标识(比如 rowId 是记录的物理标志),这个下边会举例。先说 rownum 的用法:
2. rownum 不是记录的固有标志:
只有数据返回以后才能用 rownum,只是返回数据的一个标识,例如下边的查询结果就为空:
而如果想要返回结果集的第二条数据,需要嵌套一层,这也是分页的做法:
三、模糊查询的通配符与转义字符:
1. 模糊查询的两个通配符 ‘%’、‘_’:
‘%’ 是替代一个或多个字符,而 ‘_’ 是替代一个字符。‘%’ 都清楚,只举例 ‘_’:
select * from emp where emp.empno like '_mp%';
模糊查询条件改为 ‘_p’ 就查不出结果,‘_’ 只能匹配一个字符:
select * from emp where emp.empno like '_p%';
2. sql 中查询类似 ‘_’、‘%’ 特殊字符的,用 ‘/’ escape ‘/’ 实现:
select * from emp where emp.empdesc like '/_%' escape '/';
1. 查找空值 null:
select * from emp where emp.empdesc = null;
select * from emp where emp.empdesc is null;
2. 空值 null 不能做“加、减、乘、除、比较”等运算:
select * from emp where emp.empsalary >= null; select * from emp where emp.empsalary <= null;
select * from emp where emp.empsalary is not null;
3. nvl、coalesce 将空值转换为实际值:
nvl 只能接受两个参数,而 coalesce 可以接受多个参数,返回第一个不是 null 的值。例如下边的两个 SQL 是等价的:
/* 数据准备 */ create table coal( c1 number(6, 2), c2 number(6, 2), c3 number(6, 2), c4 number(6, 2), c5 number(6, 2), c6 number(6, 2) ); insert into coal values(null, null, 1, null, 2, null); insert into coal values(null, null, null, 3, null, 2); /* coal 表数据 */ select * from coal;
下边两句等价,coalesce 函数从第一个参数开始从左到右,依次判断是否为 null, 返回第一不为 null 的值,直至最后一个参数的值。
/* nvl、coalesce 下边两句等价 */ select coalesce(c1, c2, c3, c4, c5, c6) c from coal; select nvl(nvl(nvl(nvl(nvl(c1, c2), c3), c4), c5), c6) c from coal;
二、rownum 限制返回的行数:
1. rownum 是返回数据一个排序标识:
rownum 会依次对返回的每一条数据做一个标识,经常在分页的时候会见到。这里红色着重标注“返回”两字,是指 rownum 不是记录的固有标识(比如 rowId 是记录的物理标志),这个下边会举例。先说 rownum 的用法:
select * from emp where rownum <= 2;
2. rownum 不是记录的固有标志:
只有数据返回以后才能用 rownum,只是返回数据的一个标识,例如下边的查询结果就为空:
select * from emp where rownum = 2
而如果想要返回结果集的第二条数据,需要嵌套一层,这也是分页的做法:
select * from (select emp.*, rownum rown from emp) where rown = 2
三、模糊查询的通配符与转义字符:
1. 模糊查询的两个通配符 ‘%’、‘_’:
‘%’ 是替代一个或多个字符,而 ‘_’ 是替代一个字符。‘%’ 都清楚,只举例 ‘_’:
select * from emp where emp.empno like '_mp%';
模糊查询条件改为 ‘_p’ 就查不出结果,‘_’ 只能匹配一个字符:
select * from emp where emp.empno like '_p%';
2. sql 中查询类似 ‘_’、‘%’ 特殊字符的,用 ‘/’ escape ‘/’ 实现:
select * from emp where emp.empdesc like '/_%' escape '/';
相关文章推荐
- Oracle学习笔记五 --- 表查询
- Oracle学习笔记四 --- 变量及表管理
- Oracle学习笔记三 --- 用户管理
- Oracle dataguard之备库切换(failover)
- Oracle-05-SQL语句概述、分类&SQL*PLUS概述(初识insert,desc,list,r,del,a,c,n等命令)
- Oracle dataguard之主备库切换(switchover)
- oracle ocp 学习day6总结(oracle 启动过程与参数文件)
- oracle ocp 学习day5总结(oracle 体系结构基础)
- oracle ocp 学习day4总结(对象的基本操作)
- oracle ocp 学习day3总结(sql基础)
- oracle ocp 学习day2总结(sql基础)
- oracle job
- UDEV SCSI Rules Configuration for ASM in Oracle Linux 5, 6 and 7
- Oracle Outline总结
- ORACLE导出存储过程SQL至文件
- 使用Oracle11g自带的SQL Developer报错:Unable to find a Java Virtual Machine
- Oracle中count()函数 注意点
- Oracle ORA-12541:TNS:no listener错误解决方法
- Oracle基础学习1--Oracle安装
- JDBC造的Mysql To Oracle数据表同步工具