sql语句一些实用技巧for oracle
2016-12-29 00:00
323 查看
1)在select语句中使用条件逻辑
2)从表中随机返回n条记录
3)按照子串排序
4)处理空值排序
5)根据数据项的键排序
6)从一个表中查找另一个表中没有的值
7)在运算和比较时使用null值
8)删除重复记录
9)合并记录
10)用sql生成sql
11)计算字符在字符串里的出现次数
12)将数字和字母分离
原数据是:
DATA
---------------
SMITH800
ALLEN1600
WARD1250
JONES2975
MARTIN1250
BLAKE2850
CLARK2450
SCOTT3000
KING5000
TURNER1500
ADAMS1100
JAMES950
FORD3000
MILLER1300
ENAME SAL
---------- ----------
SMITH 800
ALLEN 1600
WARD 1250
JONES 2975
MARTIN 1250
BLAKE 2850
CLARK 2450
SCOTT 3000
KING 5000
TURNER 1500
ADAMS 1100
JAMES 950
FORD 3000
MILLER 1300
思路是很复杂的,比如先去除数字,是先把所有数字翻译为0,然后用replace去掉0.
select ename,sal, case when sal <= 2000 then 'UNDERPAID' when sal >= 4000 then 'OVERPAID' else 'OK' end as status from emp
2)从表中随机返回n条记录
select * from ( select ename, job from emp order by dbms_random.value() ) where rownum <= 5
3)按照子串排序
--比如要从EMP表中返回员工名字和职位,并且按照职位字段最后2个字符排序 select ename,job from emp order by substr(job,length(job)-2)
4)处理空值排序
--被排序的列存在空值,如果希望空值不影响现有排序 select ename,sal,comm from emp order by comm nulls last
5)根据数据项的键排序
--比如如果job是“SALESMAN”,根据COMM排序,否则根据SAL排序 select ename,sal,job,comm from emp order by case when job = 'SALESMAN' then comm else sal end
6)从一个表中查找另一个表中没有的值
--比如要从DEPT中查找在表EMP中不存在数据的所有部门(数据中,DEPTNO值为40的记录在表EMP中不存在) select deptno from dept minus select deptno from emp
7)在运算和比较时使用null值
--null不会等于和不等于任何值,null和自己都不等于。以下例子是当comm有null的情况下列出比“WARD”提成低的员工。 (coalesce函数将null转换为其他值) select ename,comm,coalesce(comm,0) from emp where coalesce(comm,0) < ( select comm from emp where ename = 'WARD' )
8)删除重复记录
--对于名字重复的记录,保留一个 delete from dupes where id not in ( select min(id) from dupes group by name )
9)合并记录
--如果表EMP_COMMISSION中的某员工也存在于EMP表,那么更新comm为1000 --如果以上员工已经更新到1000的员工,如果他们SAL少于2000,删除他们 --否则,从表中提取该员工插入表EMP_COMMISSION merge into emp_commission ec using (select * from emp) emp on (ec.empno=emp.empno) when matched then update set ec.comm = 1000 delete where (sal < 2000) when not matched then insert (ec.empno,ec.ename,ec.deptno,ec.comm) values (emp.empno,emp.ename,emp.deptno,emp.comm)
10)用sql生成sql
select 'select count(*) from '||table_name||';' cnts from user_tables;
11)计算字符在字符串里的出现次数
--判断字符串里有多少个‘ , ’ --先计算原字符串长度,再减去去掉逗号的长度,这个差再除以‘,’的长度 select (length('10,CLARK,MANAGER')- length(replace('10,CLARK,MANAGER',',','')))/length(',') as cnt from t1
12)将数字和字母分离
原数据是:
DATA
---------------
SMITH800
ALLEN1600
WARD1250
JONES2975
MARTIN1250
BLAKE2850
CLARK2450
SCOTT3000
KING5000
TURNER1500
ADAMS1100
JAMES950
FORD3000
MILLER1300
select replace( translate(data,'0123456789','0000000000'),'0') ename, to_number( replace( translate(lower(data), 'abcdefghijklmnopqrstuvwxyz', rpad('z',26,'z')),'z')) sal from ( select ename||sal data from emp )
ENAME SAL
---------- ----------
SMITH 800
ALLEN 1600
WARD 1250
JONES 2975
MARTIN 1250
BLAKE 2850
CLARK 2450
SCOTT 3000
KING 5000
TURNER 1500
ADAMS 1100
JAMES 950
FORD 3000
MILLER 1300
思路是很复杂的,比如先去除数字,是先把所有数字翻译为0,然后用replace去掉0.
相关文章推荐
- sql语句一些实用技巧for oracle
- sql语句一些实用技巧for oracle
- [整理]sql语句一些实用技巧for oracle
- sql语句一些实用技巧for oracle
- sql的一些实用技巧收集!
- sql server 中的一些实用的sql语句
- 关于Oracle数据库的SQL语句使用时的一些技巧。
- SQL核心语句(非常实用的几个技巧)
- SQL核心语句(非常实用的几个技巧)
- 一些实用的sql语句
- SQL核心语句(非常实用的几个技巧)
- sql语句的一些编写技巧
- SQL核心语句(非常实用的几个技巧)
- 项目中学到SQL语句中的一些常用技巧及函数
- SQL核心语句(非常实用的几个技巧)
- 转自随风飘荡自由飞翔 SQL技巧:快速把握一些异常精妙的"SQL"语句
- sql语句的一些应用和技巧
- sql server 中的一些实用的sql语句
- 一些实用的sql语句
- oracle常用SQL语句和一些技巧