Oracle 查询优化 : 单表查询

NULL的操作:

NULL 不可用 = 判定,只可通过 IS NULL 去判定。
NULL 不支持 加、减、乘、除、大小比较,相等比较。

将NULL转换为其他值:
coalesce 与 nvl :
coalesce 依次参考各参数表达式,遇到非null值即停止并返回该值。如果所有的表达式都是空值,最终将返回一个空值。
nvl(A,B) 若A为NULL 则返回B,否则返回A,二者都为NULL返回NULL。

查找满足多个条件的行:

对于多个条件的组合,需要使用括号,就不必考虑优先级的问题。

where子句中引用使用别名的列:

错误方式:

SELECT SAL AS 工资 ,COMN AS 提成 FROM DUAL where 工资 > 1000
别名不可作为where子句条件直接使用。

正确方式:

SELECT * FROM 
(SELECT SAL AS 工资 ,COMN AS 提成 FROM DUAL)
	 where 工资 > 1000

列拼接:

|| 进行拼接

SELECT语句中使用逻辑语句 (CASE WHEN):

SELECT sal
	CASE
		WHEN sal >= 1000 过高
		WHEN sal <= 900 过低
		ELSE 'OK'
	END AS STATUS
	FROM DUAL

结果:

sal STATUS
2000 过高
800 过低
950 ok

使用ROWNUM限制返回的行数:

取两条数据
SELECT * FROM DUAL WHERE ROWNUM <= 2

取第二条数据
错误方式 :SELECT * FROM DUAL WHERE ROWNUM = 2
ROWNUM 是依次对数据进行标记,需要先把数据取出来,才能确定具体行数。所有需要先如下生成序号
SELECT * FROM 
(SELECT rownum as rn FROM DUAL)
	 WHERE rn = 2

使用ROWNUM随机返回数据:

SELECT *
	(SELECT ROWNUM FROM DUAL ORDER BY dbms_random.value())
	WHERE ROWNUM <= 3

为什么要嵌套查询:
语句执行顺序为 SELECT 、ROWNUM、ORDER BY
正确写法 先随机排序 再取数据
错误写法 先取数据 再随机排序

LIKE查询:

%:替代一个或多个字符
_:替代一个字符

如果需要将%或 _ 当作字符串进行搜索,需要使用转义符合

SELECT * FROM DUAL WHERE A LIKE '\_' ESCAPE '\'

ESCAPE ‘’ 将\表示为转义字符,将 _ 转义为字符。

你可能感兴趣的:(ORACLE查询优化技巧)