ORACLE单表查询
1,查看表结构
SQL> desc temp
2, 查找空值
SQL> SELECT * FROM TEMP WHERE COMM = NULL;
表TEMP 中有列COMM 为空的,但是通过该语句查询却没有查到,问题在哪里?
实际上,NULL是不能用 “=” 运算符,要用IS NULL判断
正确写法:
SQL> SELECT * FROM TEMP WHERE COMM IS NULL;
NULL不支持加,减,乘,除,大小比较,相等比较,否则只能结果为空。
至于其他函数遇到NULL最好测试一下结果会受什么影响,而不是仅凭经验或者臆测。
3,将空值转换为实际值
SELECT COALESCE(列1,列2,列3,列4) as val_end FROM TEMP;
返回多个值中第一个不为空的值,相对于nvl ,coalesce支持多个参数,可以很方便返回第一个不为空的值,如果上面语句改为nvl,就要嵌套很多层
SELECT nvl(nvl(nvl(列1,列2),列3),列4) as val_end FROM TEMP;
4,LIKE _替代一个或多个字符
SQL> SELECT * FROM A WHERE NAME LIKE '_B%';
NAME
AB
BC
在这里""被当做通配符了,可以转义字符
SQL> SELECT * FROM A WHERE NAME LIKE '_B%' ESCAPE '';
_BC
5,转义字符作为like里的需要匹配的内容
SQL> SELECT * FROM A WHERE NAME LIKE '_\B%' ESCAPE '';
_\BC
4,5,6点不知道是不是因为数据库版本的问题,在oracle 11g 11.2.0.4.0测试中,“_”,,"","\"并没有作为通配符二十作为一个简单的字符。以上仅供在作为通配符的情况下使用。