第一章 单表查询
1、将空值转换为实际值
SELECT coalesce(comm,0) FROM emp;
说明coalesce与nvl、decode的区别
①coalesce(comm,0),若comm为空,则取0,否则返回comm;
适合多个参数,coalesce(EXPR1,EXPR2,EXPR3,…,EXPRn),所有参数类型必须保持一致;
coalesce可返回第一个不为空的值。
②nvl(comm,0)只适合2个参数;将空值转换为0;
③decode(comm,’apple’,0),若comm=apple,返回0,否则返回NULL
2、拼接列
用字符串“||”把各列连在一起
SELECT ename ||'的工作是'||job AS msg FROM emp WHERE deptno = 10;
——————————————————
CLARK的工作是MANAGER
3、限制返回的行数
SELECT *
FROM (SELECT rownum AS an,emp.* FROM emp WHERE rownum <=2)
WHERE sn = 2;
本语句返回的是第二行的数据,但是为什么先要写子查询呢?
因为rownum是依次对数据做标识的,需要先把所有的数据取出来,才能确认第二行。
4、随机返回n条记录
SELECT empno,ename
FROM (SELECT empno,ename FROM emp ORDER BY dbmsandom.value())
WHERE rownum <= 3;
为什么要写一层嵌套?
对于随机返回n行数据,正确的写法应该是 先随机排序,再取数据 。否则每次随机返回的值会是一样的。
第二章 给查询结果排序
1、将返回结果排序
ORDER BY 1,2;
表示按照SELECT后的字段进行排序,1表示第一栏,2表示第二栏;
此处的意思是,先按照第一栏升序排列,在第一栏相同的情况下,按第二栏升序排列。
2、TRANSLATE
#语法格式
TRANSLATE(expr,from_string,to_string)
from_string 与 to_string 一一对应,如果在from_string中没有的,就不变。
如果to_string 为空,则返回空值;
如果to_string 对应的没有字符,删除from_string中列出的字符将会被消掉。