Oracle坑点大全

去重distinct

多列去重

select ename,sal from emp; – 每一列都相同才能算重复

dual与字符串拼接

dual虚拟表

– 要计算1+1的值:
select 1+1; --结果为2,mysql的写法
select 1+1 from dual; – oracle中必须加入dual,否则报错

字符串拼接

1、oracle中,使用字符串拼接符 || ,实现拼接效果;
2、拼接只能使用单引号,单引号引起来的是字符串,双引号引起来的是别名;
3、mysql中使用 concat(str1,str2) ,oracle也可以;

select ‘姓名’ || ename from emp;
select concat(‘姓名’,ename) from emp; – 两条语句实现效果一致

SQL语句解析

需求1,查询员工表姓名列包含%的员工

select * from emo where ename like ‘%%%’ escape '\ ';

  • escape '\ ‘是告知语句’\ '为转义字符,字符可自定义,何为自定义呢?

select * from emo where ename like ‘%%%’ escape ‘#’;

  • 此时‘#’为转义字符;

需求2,根据员工奖金从高到低排序,空值排到后面

select * from emp order by comm desc nulls last;

  • 排序值注意,若desc后面没跟任何条件,那么查询的结果,若某员工的奖金为空,那么该员工的记录会排在前面,若加上nulls last,那么员工奖金为空的记录会排在后面,若desc后面没跟任何的语句,默认为nulls first,nulls只能有两个值,即nulls first | last;

需求3,查询部门编号,工资,根据部门升序排序,工资降序排序;

select deptno,sal from emp order by deptno asc,sal desc;

  • 同时给多列排序,用逗号分隔;

需求4,统计员工平均奖金

select sum(comm) / count(1) from emp;

select ceil(sum(comm) / count(1) from emp;

  • 此时,两条语句只是多了一个ceil方法,那么这个是干什么的呢?下面我们来学习下单行函数;

单行函数(single row fx)

数值函数

  • 向上取整ceil

select ceil(45.926) from dual; – 46

  • 向下取整

select floor(45.926) from dual;-- 45

  • round取余

select round(45.926,2) from dual; – 45.93

select round(45.926,1) from dual; – 45.9

select round(45.926,0) from dual; – 46

select round(45.926.-1) from dual;-- 50

select round(45.926,-2) from dual;-- 0

select round(65.926,-2) from dual;-- 100

截断函数

select trunc(45.926,2) from dual;-- 45.92

  • 此时有小伙伴会问了,为啥结果是45.96,而不是46呢,是这样子的,截取是以小数点为基准,截取小数点后的数据,是多少就是多少,如果参数2是2,就截取的是两位小数,是3就是截取三位小数,不会四舍五入;

取余

select mod(9,4) from dual;-- 1

  • mod()是取余,有两个参数,param1为被除数,param2位除数,相除后于下的数就是余数;

字符函数

  • substr(str1,起始索引,长度)

select substr(‘abcdefg’,0,3) from dual; – abc

select substr(‘abcdefg’,1,3) from dual;-- abc

  • 此时,程序员们可能会觉得语句1的结果是abc,语句2的结果是bcd,,这不是java的substring(),在oracle中,无论起始索引是0还是1,都是从第一个字符开始截取;

获取字符串的长度

  • 获取字符串长度length()

select length(‘abcdefg’) from dual;-- 7

替换字符串

  • replace(param1,param2,param3),参数接收,param1是原字符串,param2是要被替换的字符串,param3是要替换的字符串,只要一执行改SQL,所有param2的字符都将替换为param3

select replace(‘hello’,‘l’,‘a’); – heaao

日期函数

需求1,查询今天的日期

  • 使用sysdate关键字

select sysdate from dual;

查询三个月后今天的日期

  • 采用add_months(时间,月份,执行此函数月份会累加三个月

select add_months(sysdate,3) from dual;

查询3天后的日期

  • 采用sysdate+3,sysdate先获取系统当前日期,然后加3天即可

select sysdate + 3 from dual;

查询员工入职天数

  • 先获取当前日期,减去员工入职日期即可

select ceil(sysdate - hiredate) from dual;

查询员工入职天数

  • 采用months_betweeen(当前日期,入职日期) 即可

select months_between(sysdate,hiredate) from emp;

转换函数

字符转数值,是一个鸡肋

  • 何为鸡肋,就是转不转都一致
  • 字符转数值,to_number(str)

select 100+10 from dual;–110

select 100 + to_number(‘10’) from dual;-- 110

  • 结果一致

数值转字符

  • 采用to_char(‘原字符’,‘格式化字符’)

select to_char(sal,’$9,999.99’) from emp;

select to_char(sal,‘L9,999.99’) from emp;

  • 只要员工薪资大于1000时,千分位自动逗号分隔,$代表的是薪资前面符号表示位,L代表的是薪资前用¥表示,.是小数分隔位,后面的两位数是保留几位小数;

日期转字符

  • 使用 to_date(日期,‘格式化日期’) 即可;

select to_char(sysdate,‘yyyy-mm-dd hh:mi:ss’) from dual; – 年月日时分秒

  • 格式化日期描述:
  • 1,d,代表一个星期中的第几天,从星期天开始计算;
  • 2,dd,代表月中的第几天;
  • 3,ddd,代表一年中的第几天;
  • 4,day,星期几,英文,比如今天是星期一,那么展示出来是monday;
  • 5,dy,星期几,英文缩写,星期一,展示出来是mon;
    -6,yyyy-mm-dd hh24:mm:dd,24小时展示;

字符转日期,to_date(日期,‘格式化日期’)

通用函数

  • nvl(参数1,参数2),如果参数1位null,返回参数2
  • nvl2(参数1,参数2,参数3),参数1为null,返回参数3,反之返回参数2;
  • nullif(参数1,参数2),参数1=参数2,返回null,反之返回参数1;
  • coalesce(…),不定参数,返回第一个不为null的值;

条件表达式

mysql,oracle通用版,case…when…

  • 语法:
  • case
  • when 值1 then 值
  • when 值2 then 值
  • else 默认值
  • end

select case ename
when ‘SMITH’ then ‘刘备小二’
when ‘ALLEN’ then ‘诸葛村夫’
when ‘SCOTT’ then ‘曹贼’
else ‘路人甲’
end ‘姓名’
from emp;

oracle可用decode,可变参数

  • 语法:
  • decode(字段,if1,then1,if2,then2,else)

select decode(ename,‘SMITH’,‘刘备小二’,‘ALLEN’,‘诸葛村夫’,‘SCOTT’,‘曹贼’,‘路人甲’) from emp;

Oracle坑点大全相关推荐

  1. oracle中DBWR全称,Oracle基本术语大全

    Oracle基本术语大全 §2.4.2 重做日志工作模式Oracle可以在两种模式之一来工作: 1)ARCHIVELOG模式(可恢复) Oracle 一般至少有两个日志文件.它们轮流交替地被写入所作的 ...

  2. oracle的操作大全,Oracle数据库操作大全(六)Oracle中操作数据

    Java连接数据库方法2,(方法1见:Oracle数据库操作大全(五)) 使用jdbc连接Oracle( 可远程连接 ) ***1.加载驱动 Class.forName("oracle.jd ...

  3. ozf oracle,ORACLE EBS 简称大全

    Oracle EBS 缩写术语,搜集中...(from Itpub)2009-09-28 16:46收集一些Oralce EBS常见的缩写术语,持续搜集中-- ORACLE EBS 简称大全 ,i K ...

  4. Oracle查询所有序列;[oracle中如何创建表的自增ID(通过序列);oracle sql语句大全

    Oracle查询所有序列 oracle sql语句大全 oracle中如何创建表的自增ID(通过序列)

  5. 连载四:Oracle升级文章大全(完结篇)

    (共46篇干货文章,建议收藏并在PC端打开) 9.2.0.8 aix 升级11.2.0.4 aix升级后需要检查什么 https://www.modb.pro/db/231 背景:倒计时炸弹11.2. ...

  6. oracle查询语句大全

    oracle查询语句大全 oracle 基本命令大全一 1.create user username identified by password;//建用户名和密码oracle ,oracle 2. ...

  7. Oracle数据库错误代码大全总结

    ORACLE数据库错误代码大全总结 ORA-00001: 违反唯一约束条件 (.) ORA-00017: 请求会话以设置跟踪事件 ORA-00018: 超出最大会话数 ORA-00019: 超出最大会 ...

  8. 连载二:Oracle迁移文章大全

    (共45篇干货文章,建议收藏并在PC端打开) 1. ASM新加DG,数据文件如何迁移 https://www.modb.pro/db/307 2. AIX环境dd迁移控制文件出现ORA-202和ORA ...

  9. oracle 00350,Oracle错误编码大全

    ORACLE错误大全2(2009-11-20 18:14:13) 标签:电脑线程日志文件recoveroracle错误大全ora-it 分类:数据库ORA-00201: 控制文件版本与ORACLE 版 ...

最新文章

  1. html表格鼠标高亮行列,JS实现的表格行鼠标点击高亮效果代码
  2. HiSDP —— 高效的C++软件开发平台
  3. 关于子对话框的创建与销毁
  4. 哈夫曼编码c语言论文,哈夫曼编码的实现及应用论文.doc
  5. 基于OOS批量修改资源标签值
  6. java实现磁盘分配显示_Java实现窗体动态加载磁盘文件
  7. Hadoop的Python框架指南
  8. 【转】 UML各种线的含义
  9. Mysql中慢查询Sql的记录查看
  10. mysql配置文件my.cnf的事例并附解释
  11. windows 开始命令集
  12. 外部接口需求怎么写_怎么写财务工作报告?送你16套高逼格财务工作报告范文PPT模板,满足不同行业会计需求!...
  13. C语言写PCAP文件
  14. wifi和wlan有什么区别
  15. 如何有效的屏蔽百度蜘蛛
  16. 名人博客VS 博客名人
  17. kubectl rollout restart 命令“unkonw command“
  18. vivo手机可以适配鸿蒙系统吗,originos系统适配机型 vivo全新手机系统支持哪些机型...
  19. Git之深入解析如何借助Git的配置方法和钩子机制来自定义Git需求
  20. C# 提取Word中插入的多媒体文件(视频、音频)

热门文章

  1. AS的APP接收HC-06蓝牙模块数据
  2. 朴素贝叶斯情感分析评分python_详解基于朴素贝叶斯的情感分析及Python实现
  3. Python Flask MongoDB Web开发:前 言
  4. 实战-Fluxion与wifi热点伪造、钓鱼、中间人攻击、wifi破解
  5. JAVA SOCKET实现全双工通信
  6. R语言使用dplyr包的group_by函数和summarise函数基于分组变量计算目标变量的均值、标准差
  7. 三维视觉精度关键参数及测量方法
  8. 飞猫盘,一个可以赚钱的网盘副业
  9. dumpsys cpuinfo结果说明
  10. Error running docker container: starting container process caused “exec: \“python\“: executable file