SQL Cookbook 笔记(Oracle) (1)条件选择 case when (2)随机排序 order by dbms_random.value() (3)空值替换 coalesce、nvl (6)null值排序处理 select * from emp t order by t.comm desc 【nulls last | nulls first】 (7)条件排序 select * from emp t order by t.job, case when t.job = 'SALESMAN' then comm else sal end desc, t.empno (8)集合操作 intersect、minus (9)标量子查询:放置在 select列表中的子查询 (10)in、update 均可多行 (11)update可使用内联视图 //=============使用字符串=============================== (1)cast 类型转换 select cast(e.sal as char(9)) sal from emp e; (2)lower、upper 大小写 select lower('AbcD') from dual; --abcd select upper('AbcD') from dual; --ABCD (4)translate 转码 select translate('abc', 'ab', '12') from dual; -- '12c' (5)replace 串替换 (6)rpad,lpad 字符截取、用特定字符填充 select rpad('abc', 2, 'X') from dual; --ab select rpad('abc', 4, 'X') from dual; --abcX select lpad('abc', 2, 'X') from dual; --ab select lpad('abc', 4, 'X') from dual; --Xabc (7)substr 截子串 (8)递归查询,汇总 select deptno, ltrim(sys_connect_by_path(ename, ','), ',') emps from ( select deptno, ename, row_number() over (partition by deptno order by ename) rn, count(*) over (partition by deptno) cnt from emp where deptno is not null ) where level = cnt start with rn = 1 connect by prior deptno = deptno and prior rn = rn - 1 --output DEPTNO EMPS 10 CLARK,KING,MILLER 20 ADAMS,FORD,JONES,SCOTT,SMITH 30 ALLEN,BLAKE,JAMES,MARTIN,TURNER,WARD (9) --列出每个部门最高/最低工资 --1 select deptno, min_sal, max_sal from ( select deptno, ename, sal, row_number() over (partition by deptno order by sal) rn, count(*) over (partition by deptno) cnt, min(sal) over (partition by deptno) min_sal, max(sal) over (partition by deptno) max_sal from emp ) where rn = cnt --2 select deptno, min_sal, max_sal from ( select deptno, min(sal) over (partition by deptno) min_sal, max(sal) over (partition by deptno) max_sal, row_number() over (partition by deptno order by empno) rn from emp ) where rn = 1