很久以前看某本书整理的,忘了哪本了,现在贡献出来。

1)在select语句中使用条件逻辑

1

select ename,sal,2casewhen sal<=2000then 'UNDERPAID'3            when sal>=4000then 'OVERPAID'4else'OK'5       end as status6from emp

ENAME SAL STATUS

---------- ---------- ---------

SMITH 800 UNDERPAID

ALLEN 1600 UNDERPAID

WARD 1250 UNDERPAID

JONES 2975 OK

MARTIN 1250 UNDERPAID

BLAKE 2850 OK

CLARK 2450 OK

SCOTT 3000 OK

KING 5000 OVERPAID

TURNER 1500 UNDERPAID

ADAMS 1100 UNDERPAID

JAMES 950 UNDERPAID

FORD 3000 OK

MILLER 1300 UNDERPAID

2)从表中随机返回n条记录

1

select*2  from (3    select ename, job4    from emp5    order by dbms_random.value()6  )7  where rownum<=5

3)按照子串排序

比如要从EMP表中返回员工名字和职位,并且按照职位字段最后2个字符排序

1

select ename,job2  from emp3order by substr(job,length(job)-2)

ENAME JOB

---------- ---------

KING PRESIDENT

SMITH CLERK

ADAMS CLERK

JAMES CLERK

MILLER CLERK

JONES MANAGER

CLARK MANAGER

BLAKE MANAGER

ALLEN SALESMAN

MARTIN SALESMAN

WARD SALESMAN

TURNER SALESMAN

SCOTT ANALYST

FORD ANALYST

4)处理空值排序

当被排序的列存在空值,如果希望空值不影响现有排序

1

select ename,sal,comm2   from emp3order by comm nulls last

ENAME SAL COMM

------ ----- ---------

TURNER 1500 0

ALLEN 1600 300

WARD 1250 500

MARTIN 1250 1400

SMITH 800

JONES 2975

JAMES 950

MILLER 1300

FORD 3000

ADAMS 1100

BLAKE 2850

CLARK 2450

SCOTT 3000

KING 5000

1

select ename,sal,comm2  from emp3order by comm desc nulls first

ENAME SAL COMM

------ ----- ----------

SMITH 800

JONES 2975

CLARK 2450

BLAKE 2850

SCOTT 3000

KING 5000

JAMES 950

MILLER 1300

FORD 3000

ADAMS 1100

MARTIN 1250 1400

WARD 1250 500

ALLEN 1600 300

TURNER 1500 0

5)根据数据项的键排序

比如如果job是“SALESMAN”,根据COMM排序,否则根据SAL排序

1

select ename,sal,job,comm2  from emp3 order bycasewhen job='SALESMAN' then commelsesal end

ENAME SAL JOB COMM

---------- ---------- --------- ----------

TURNER 1500 SALESMAN 0

ALLEN 1600 SALESMAN 300

WARD 1250 SALESMAN 500

SMITH 800 CLERK

JAMES 950 CLERK

ADAMS 1100 CLERK

MARTIN 1250 SALESMAN 1300

MILLER 1300 CLERK

CLARK 2450 MANAGER

BLAKE 2850 MANAGER

JONES 2975 MANAGER

SCOTT 3000 ANALYST

FORD 3000 ANALYST

6)从一个表中查找另一个表中没有的值

比如要从DEPT中查找在表EMP中不存在数据的所有部门(数据中,DEPTNO值为40的记录在表EMP中不存在)

1

select deptno from dept2minus3select deptno from emp

7)在运算和比较时使用null值

null不会等于和不等于任何值,null和自己都不等于。以下例子是当comm有null的情况下列出比“WARD”提成低的员工。 (coalesce函数将null转换为其他值)

1

select ename,comm,coalesce(comm,0)2  from emp3where coalesce(comm,0)                                     from emp5                                    where ename='WARD' )

ENAME COMM COALESCE(COMM,0)

---------- ---------- ----------------

SMITH 0

ALLEN 300 300

JONES 0

BLAKE 0

CLARK 0

SCOTT 0

KING 0

TURNER 0 0

ADAMS 0

JAMES 0

FORD 0

MILLER 0

8)删除重复记录

对于名字重复的记录,保留一个

1

deletefrom dupes2 where id notin( select min(id)3                      from dupes4                     group by name )

9)合并记录

比如如下需求:

如果表EMP_COMMISSION中的某员工也存在于EMP表,那么更新comm为1000

如果以上员工已经更新到1000的员工,如果他们SAL少于2000,删除他们

否则,从表中提取该员工插入表EMP_COMMISSION

1

merge into emp_commission ec2using (select*from emp) emp3    on (ec.empno=emp.empno)4 when matched then5       update set ec.comm=10006deletewhere (sal<2000)7 when not matched then8        insert (ec.empno,ec.ename,ec.deptno,ec.comm)9       values (emp.empno,emp.ename,emp.deptno,emp.comm)

10)用sql生成sql

1

select 'select count(*) from '||table_name||';' cnts2  from user_tables;

(user_tables是oracle的元数据表之一)

CNTS

----------------------------------------

select count(*) from ANT;

select count(*) from BONUS;

select count(*) from DEMO1;

select count(*) from DEMO2;

select count(*) from DEPT;

select count(*) from DUMMY;

select count(*) from EMP;

select count(*) from EMP_SALES;

select count(*) from EMP_SCORE;

select count(*) from PROFESSOR;

select count(*) from T;

select count(*) from T1;

select count(*) from T2;

select count(*) from T3;

select count(*) from TEACH;

select count(*) from TEST;

select count(*) from TRX_LOG;

select count(*) from X;

11)计算字符在字符串里的出现次数

判断字符串里有多少个‘ , ’

1

select (length('10,CLARK,MANAGER')-2  length(replace('10,CLARK,MANAGER',',','')))/length(',')3  as cnt4from t1

先计算原字符串长度,再减去去掉逗号的长度,这个差再除以‘,’的长度

12)将数字和字母分离

原数据是:

DATA

---------------

SMITH800

ALLEN1600

WARD1250

JONES2975

MARTIN1250

BLAKE2850

CLARK2450

SCOTT3000

KING5000

TURNER1500

ADAMS1100

JAMES950

FORD3000

MILLER1300

1

select replace(2  translate(data,'0123456789','0000000000'),'0') ename,3  to_number(4    replace(5    translate(lower(data),6      'abcdefghijklmnopqrstuvwxyz',7      rpad('z',26,'z')),'z')) sal8  from (9    select ename||sal data from emp10 )

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.

13)根据表中的行创建分割列表

表中数据:

DEPTNO EMPS

------ ----------

10 CLARK

10 KING

10 MILLER

20 SMITH

20 ADAMS

20 FORD

20 SCOTT

20 JONES

30 ALLEN

30 BLAKE

30 MARTIN

30 JAMES

30 TURNER

30 WARD

1

select deptno,2    ltrim(sys_connect_by_path(ename,','),',') emps3  from (4  select deptno,5    ename,6    row_number() over7       (partition by deptno order by empno) rn,8    count(*) over9      (partition by deptno) cnt10  from emp11  )12  where level=cnt13  startwithrn=114    connect by prior deptno=deptno and prior rn=rn-1

查询结果

DEPTNO EMPS

------- ------------------------------------

10 CLARK,KING,MILLER

20 SMITH,JONES,SCOTT,ADAMS,FORD

30 ALLEN,WARD,MARTIN,BLAKE,TURNER,JAMES

14)按字母顺序排序

1

select old_name, new_name2  from (select old_name, replace(sys_connect_by_path(c, ' '), ' ') new_name3          from (select e.ename old_name,4                       row_number() over(partition by e.ename order by substr(e.ename, iter.pos,1)) rn,5                       substr(e.ename, iter.pos,1) c6                  from emp e, (select rownum pos from emp) iter7                 where iter.pos<=length(e.ename)8                 order by1) x9         startwithrn=110        connect by prior rn=rn-111               and prior old_name=old_name)12 where length(old_name)=length(new_name)

You would like the result to be:

OLD_NAME NEW_NAME

---------- --------

ADAMS AADMS

ALLEN AELLN

BLAKE ABEKL

CLARK ACKLR

FORD DFOR

JAMES AEJMS

JONES EJNOS

KING GIKN

MARTIN AIMNRT

MILLER EILLMR

SCOTT COSTT

SMITH HIMST

TURNER ENRRTU

WARD ADRW

jor oracle,[整理]sql语句一些实用技巧for oracle相关推荐

  1. oracle sql 符号,Oracle的SQL语句中如何处理‘’符号

    Oracle的SQL语句中如何处理'&'符号 在Oracle中,如果在sql中出现'&'符号,会被自动转义: 而被要求输入在&符号后跟随的字符串的值,例如: update ta ...

  2. Oracle 动态SQL语句

    Oracle 动态SQL语句     EXECUTE IMMEDIATE代替了以前Oracle8i中DBMS_SQLpackage包.  它解析并马上执行动态的SQL语句或非运行时创建的PL/SQL块 ...

  3. oracle12测试骤,Oracle中SQL语句解析的步骤

    我们都知道在Oracle中每条SQL语句在执行之前都需要经过解析,这里面又分为软解析和硬解析.那么这两种解析有何不同之处呢?它们又分别是如何进行解析呢?Oracle内部解析的步骤又是如何进行的呢?下面 ...

  4. oracle数据库----SQL语句的实践(应用实例)

    oracle数据库----SQL语句的实践(应用实例) 创建表工资表salary,包括员工号emp_id,员工名emp_name,员工月基本工资monthsal,员工月总发工资totalsal. cr ...

  5. oracle大于条件,oracle中sql语句中的in的条件数量大于1000有问题

    oracle中sql语句中的in的条件数量大于1000有问题 oracle中sql语句中select * from t_Test t where  t.Id in(1,2,3......)/*数量不能 ...

  6. oracle的sql语句,where后面的部分,执行顺序是从左往右,还是从右往左?

    转载自:https://blog.csdn.net/Ideality_hunter/article/details/80689938 oracle的sql语句,where后面的部分,执行顺序是从左往右 ...

  7. oracle 生成 sql语句,Oracle使用SQL语句生成日历的实现方法

    Oracle使用SQL语句可以实现日历的功能,下面就为您详细介绍Oracle使用SQL语句生成日历的实现方法,希望对您能有所帮助. 1 要构造某年某月的日历,必须先知道这个月的开始时间,结束时间及天数 ...

  8. 查询oracle 表达小,oracle中sql语句小练习(使用连接查询)

    假设A(m,n,p),B(m,n,p) --1.A表中有某一项m而B表中没有 使用左连接查询: select a.* from A a left join B b on a.m=b.m where b ...

  9. oracle命中率sql语句

    1 BUFFER命中率 也就是通常所说高速缓存的命中率,这个指标是指通过内存得到访问的数据和所有访问的数据之间的一个比例. 正常指标范围:     Buffer命中率正常的指标为:90%-100%,但 ...

最新文章

  1. PHP判断变量内容是什么编码(gbk?utf-8) mb_detect_encoding
  2. FPGA初学者入门相关概念知识点
  3. Java Swing框架实战
  4. infinitescroll php,WordPress: 增加无限分页(Infinite Scroll)功能
  5. 字节跳动九周年张一鸣演讲:反对all-in、抽象概念和方法论
  6. 如何让路由器摆脱安全困扰
  7. Win10如何配置数据源ODBC数据源
  8. 志远电脑公司网站系统
  9. php的一些编码问题
  10. MySQL高可用之PXC详解
  11. 华大MCU的IAP升级
  12. 无缝拼接屏是怎样实现的?有什么特点!
  13. sdn交换机与普通交换机区别—Vecloud
  14. 爬虫实战之爬取电影天堂全部电影信息
  15. 如何快速定位页面(江湖故人就是个铁憨憨)即时相关性?
  16. 【华为OD机试真题 Python】判断字符串子序列
  17. Qt官方示例-QLineEdit编辑器
  18. python环境搭建及应用
  19. 蓝桥杯少儿编程2020年8月份C++比赛每日一练
  20. 使用Objective C建立UUID

热门文章

  1. 相对活力指数指标(RVI)指标模拟量化交易(第二版)
  2. win10关机不断电,电源灯亮,无法重启,一会不用就蓝屏
  3. 城市售票网验证码图片的获取
  4. 编写代码,实现信用卡诈检测。数据creditcard.csv。要求:使用多种机器学习算法训练模型,并对比结果。根据代和代码果,撰写作业。作业文件格式pdf,把源代码和输出结果拷贝到word文件中,根据
  5. 基于Darknet中的YOLO-v3训练自己的数据
  6. 视频教程-深度学习原理详解及Python代码实现-深度学习
  7. Excel清除隐藏的引号或空格
  8. 拯救者可以学c语言吗,联想陈劲爆料:即将发布 5G 拯救者手机,目标要重回 C 位...
  9. 专业监理工程师的职责
  10. vue-print-nb打印功能