文档章节

oracle数据库的一些语法

Romanceling
 Romanceling
发布于 2016/04/27 23:13
字数 2445
阅读 36
收藏 0

字符串操作【CONCAT】,【||】,【LENGTH】,【UPPER,LOWER,INITCAP】,【TRIM,LTRIM,RTRIM】 ,【LPAD,RPAD】,【SUBSTR】,【INSTR】;数值操作【ROUND】,【TRUNC】,【MOD】,【CEIL】,【FLOOR】;日期操作;空值操作;查询语句的一些查询条件;聚合函数;EXISTS关键字;伪列ROWNUM;DECODE函数;CASE ;排序函数;并、交、差集;高级分组函数

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

oracle的字符串操作:
1.字符串连接:【CONCAT】
SELECT CONCAT(ename,sal) FROM emp

2.连接字符串操作符:【||】
SELECT ename||','||sal FROM emp

3.获取字符串长度:【LENGTH】
SELECT ename,LENGTH(ename) FROM emp

4.大小写字母转换:【UPPER,LOWER,INITCAP】
SELECT UPPER('helloworld'),LOWER('HELLOWORLD'),INITCAP('hello world') FROM dual

5.去重函数:【TRIM,LTRIM,RTRIM】  
SELECT LTRIM('eeeeeliteeeee','e') FROM dual      --liteeeee
SELECT LTRIM('esesesliteee','es') FROM dual      --liteee

6.补位函数:【LPAD,RPAD】
SELECT LPAD(sal,6,'$') FROM emp

7.截取字符串:【SUBSTR】
参数:从指定字符串的指定位置开始连续取若干字符。第三个字符可以不传入,不传入则是取到末尾,若第三个参数的值大于实际可以获取的字符长度时也默认取到字符串末尾
SELECT SUBSTR('thinking in java',10,2) FROM dual   -- in

8.【INSTR】函数:查找给定字符串在当前字符串中位置
参数3:从第几个字符开始查找。  参数4:查找第几次出现。若没有符合要求则返回值为0.
参数3,4都可以不指定,不指定则默认为1
SELECT INSTR('thinking in java','in',4,2) FROM dual  -- 10
-------------------------------------------------------------------------------------
oracle数值操作:
1.四舍五入:【ROUND】
参数2表示保留到小数点后多少位,0则是保留到整数位,负数则是10位以上的单位。
SELECT ROUND(45.678,2) FROM dual    -- 45.68
SELECT ROUND(45.678,-1) FROM dual   -- 50
SELECT ROUND(45.678,-2) FROM dual   --0

2.截取数值函数:【TRUNC】
SELECT TRUNC(45.789,2) FROM dual    -- 45.78
SELECT TRUNC(45.789,-1) FROM dual   -- 40
SELECT TRUNC(45.789,-2) FROM dual   -- 0

3.求余:【MOD】
SELECT MOD(11.1,3) FROM dual    -- 2.1

4.向上取整:【CEIL】   向下取整:【FLOOR】
SELECT CEIL(45.678) FROM dual    -- 46
SELECT FLOOR(45.678) FROM dual     -- 45
------------------------------------------------------------------------------------
oracle日期操作
1.DATE与TIMESTAMP
DATE:表示日期,精度到秒,七个字节分别表示世纪年月日时分秒
TIMESTAMP时间戳:表示日期,精度到纳秒,前七个字节与DATE一致,后四个字节记录秒以下的精度。
SELECT SYSDATE FROM dual
SELECT SYSTIMESTAMP FROM dual

2.日期计算:
    【1】对一个日期类型的值加上一个指定的数字,等于加上了指定的天数。返回的日期是计算                   后的日期,减去同理。
    【2】两个日期类型额值相减,差是相差的天数,日期越晚的越大。
**RR是2位数字表示年的日期格式中的关键字,RR与YY的区别在于RR会根据当前系统时间自动判断世纪.

3.TO_DATE函数:将指定的字符串按照指定的日期格式转换为日期
SELECT TO_DATE('2008-08-08 20:08:08','YYYY-MM-DD HH24:MI:SS') FROM dual
**在日期格式字符串中,除英文与符号外的其他字符,都应当使用双引号括起来。
SELECT TO_DATE('2008年08月08日 20:08:08','YYYY"年"MM"月"DD"日" HH24:MI:SS') FROM dual

4.TO_CHAR函数:将指定的日期按照指定的日期格式转换为字符串
SELECT TO_CHAR(SYSDATE,'YYYY-MM-DD') FROM dual

**一些常用的日期函数:
1.LAST_DAY(date):返回日期所在月的最后一天。
SELECT LAST_DAY(SYSDATE) FROM dual
SELECT LAST_DAY('20-2月-09') FROM dual  --  28-2月- 09

2.ADD_MONTHS()对指定的日期加上指定的月
SELECT ADD_MONTHS('20-2月-09',2) FROM emp  -- 20-4月- 09

3.MONTHS_BETWEEN(date1,date2)
计算两个日期之间相差的天数,计算是用date1-date2的结果换算的。

4.NEXT_DAY(date,i)从给定的date第二天开始算,返回下周的周几。1表示周日,2表示周一。
SELECT NEXT_DAY('20-2月-09',2) FROM dual  -- 23-4月- 09

5.GREATEST(expr1[,expr2[,expe3]]...)
  LEAST(expr1[,expr2[,expr3]]...)返回参数列表中最大或最小的值

6.EXTRACT函数:可以提取给定日期中指定时间分量的值
  DATE可以提取年月日,TIMESTAMP可以提取时分秒
SELECT EXTRACT(YERA FROM SYSDATE) FROM dual
-----------------------------------------------------------------------------------
空值操作
一.NULL的操作
1.更新NULL值
UPDATE student SET gender=NULL

2.判断NULL的条件
要用IS NULL或IS NOT NULL判断,不要使用“=”判断空
UPDATE student SET gender='M' WHERE gender is NULL

3.NULL的计算:
NULL与字符串拼接等于什么都没拼接
NULL与任何数字计算结果还是NULL
SELECT '你好'||NULL FROM dual   -- 你好
SELECT NULL+2 FROM dual     -- NULL

二.空值函数:
1.NVL(p1,p2)
若p1的值是null则函数返回p2,否则返回p1
SELECT ename,sal,comm,sal+NVL(comm,0) FROM emp

2.NVL2(P1,P2,P3)
若p1的值不为NULL时函数返回p2,若为NULL则返回p3.p2与p3类型要相同。
SELECT ename,comm,NVL2(comm,'有奖金','没奖金') FROM emp
-------------------------------------------------------------------------------------------
查询语句的一些查询条件:
1.> , < , >= , <= , != , <> , =
2.AND和OR
  AND的优先级高于OR,可以通过括号来提高OR的优先级。

3.LIKE用于模糊查询字符串,支持两个通配符:
_ :表示任意一个字符
% :表示任意多个字符(0到多个)
SELECT ename,job FROM emp WHERE ename LIKE '_A%'

4.IN与NOT IN
IN:用于判断等于列表之一,IN常用于子查询。
NOT IN 用于判断不在列表中。
SELECT ename,job FROM emp WHERE job IN('MANAGER','CLERK')

5.BETWEEN...AND...用来判断在一个范围内:
SELECT ename,sal FROM emp WHERE sal BETWEEN 1500 AND 3000

6.ANY与ALL
不能单独使用,需要配合单行比较操作符(>,>=,<,<=)一起使用。
>ALL:大于所有列表中的值(大于最大)
>ANY:大于列表中的任意值(大于最小)
<ALL:小于所有列表中的值(小于最小)
<ANY:小于列表中的任意值(小于最大)
**列表中的内容通常是一个查询的结构集,而不是给定的具体值。否则实际没意义。
SELECT ename,job,sal FROM emp WHERE sal>ANY(2500,3000,3500)  --  列表中通常为查询结果集
--------------------------------------------------------------------------------------
聚合函数:会将指定字段查询出的每一条记录对应的值全部进行统计,然后得出一个结果。
1.最大值与最小值:【MAX,MIN】
SELECT MAX(sal),MIN(sal) FROM emp

2.求平均值与求和:【AVG,SUM】
SELECT AVG(NVL(comm,0)),SUM(comm) FROM emp
SELECT ROUND(AVG(NVL(comm,0))),SUM(comm) FROM emp

3.统计给定字段的记录条数(不为NULL的记录):【COUNT】
SELECT COUNT(*) FROM emp
SELECT COUNT(ename) FROM emp
---------------------------------------------------------------------------------------
EXISTS关键字:用于WHERE中作为判断条件使用的,其后需要紧跟一个子查询,
只要该子查询能查询至少一条记录,那么EXISTS表达式就返回真。也可以用NOT EXISTS表示反效果。
查看有员工的部门信息?
SELECT dname,deptno FROM dept d WHERE EXISTS
(SELECT *FROM emp e WHERE e.depton=d.deptno)
------------------------------------------------------------------------------------------
伪列:RACLE支持一个关键字ROWNUM
ROWNUM是一个伪列,该列不存在于任何一张表,但每张表都可以查询该列,该列在结果集中的值是结果集中每条记录的行号,ROWNUM给结果集编号是在查询的过程中进行的,只要可以从表中查询出一条记录,该记录的行号就会作为这条记录ROWNUM字段的值,ROWNUM从1开始递增。

**由于ROWNUM从一开始,所以在第一次查询表中数据进行编号时,不要使用ROWNUM做大于1以上的数字判断,否则查询不到数据。
-------------------------------------------------------------------------------------------
DECODE函数,可以实现类似if-else的操作

SELECT ename,job,sal,
      DECODE(job,
            'MANAGER',sal*1.2,
            'ANALYST',sal*1.1,
            'SALESMAN',sal*1.05,
            sal
      ) decode
FROM emp

CASE 字段 WHEN ...THEN....也可以实现类似fi-else的操作

SELECT ename,job,sal,
      CASE job WHEN 'MANAGER' THEN sal*12
               WHEN 'ANALYST' THEN sal*1.1
               WHEN 'SALESMAN' THEN sal*1.05
               ELSE sal END
      bonus
FROM emp               

在GROUP BY中使用DECODE可以做到将字段值不同的记录看做一组,只要将需要看做一组的记录的该字段的

值替换为相同的值即可。例如:
SELECT COUNT(*),DECODE(job,
                      'MANNAGE','VIP',
                      'ANALYST','VIP',
                      'OTHER')
FROM emp
GROUP BY DECODE(job,
                'MANNAGE','VIP',
                'ANALYST','VIP',
                'OTHER')

也可以在ORDER BY中使用DECODE来帮助排序               
SELECT deptno,dname,loc
FROM dept
ORDER BY
  DECODE(dname,
        'OPERRATIONS',1,
        'ACCOUNTING',2,
        'SALES',3)
------------------------------------------------------------------------------------------
排序函数:可以按照指定的字段分组,然后再按照指定的字段排序,最后位记录生成组内的编号。
1.【ROW_NUMBER()】函数:生成组内连续且唯一的数字。
查看每个部门中的工资排名:
SELECT ename,sal,depton,
ROW_NUMBER() OVER(
  PARTITION BY depton
  ORDER BY sal DESC
) RANK
FROM emp

2.【RANK()】:生成组内不连续不唯一的数字
3.【DENSE_RANK()】生成组内连续但不唯一的数字
-----------------------------------------------------------------------------------------
UNION并集:去重
SELECT ename,job,sal FROM emp
WHERE job='MANAGER'
UNION
SELECT ename,job,sal FROM emp
WHERE sal>2500

UNION ALL并集:不去重
INTERSECT;交集
MINUS:差集   ** 集合A 差集 集合B  =  A-A交B
------------------------------------------------------------------------------------------
高级分组函数:
1.GROUP BY ROLLUP(a,b,c)等价于:abc,ab,a,全表
GROUP BY a,b,c
UNION ALL
GROUP BY a,b
UNION ALL
GROUP BY a
UNION ALL
全表

2.CUBE函数:
会将每个参数的不同组合进行分组,然后将所有分组统计结果并在一起分组次数是2的参数 个数次方
GROUP BY(a,b,c)
abc  ab  ac  bc  a  b  c  全部

3.GROUPING SETS:
该函数可以按照指定的分组方式进行分组,然后将结果集并在一起,其中每一个参数就是一种组合方式。
查看每天及每月的营业额?
SELECT year_id,month_id,day_id,SUM(sales_value)
FROM sales
GROUP BY
      GROUPING SETS(
      (year_id,month_id,day_id),
      (year_id,month_id)
      )
ORDER BY year_id,month_id,day_id

© 著作权归作者所有

Romanceling
粉丝 14
博文 166
码字总数 91809
作品 0
无锡
程序员
私信 提问
​Oracle 10g的新特性:闪回技术

在Oracle 10g之后,为了预防用户的误删除表操作,专门提供了回收站的功能,用户所删除的表默认情况下会在一个回收站之中保存,而用户也可以通过回收站,进行表的恢复,所以此技术称为闪回(F...

我的小确幸日记
2016/03/04
39
0
Oracle培训的建议收集

近期要组织一次新员工培训,交代了两节课的任务,主要介绍Oracle数据库,一个是针对纯小白,一个是经过一段时间的学习,针对有一定基础的,内容不限,时间不限。 介绍数据库,介绍Oracle,其...

bisal
2017/09/08
0
0
兼容多种数据库类型的

经理想让我们的项目可以支持多种数据库切换以mysql oracle sql service为主 持久层mybatis plus 然后我发现了兼容的一些问题 因为支持多种数据库所以视图也不敢写了 写xml的时候例如: mysq...

爱吃蛋挞的kk
2018/11/05
60
2
oracle 体系结构及内存管理 03_oracle官方文档索引

Concept 包含了 oracle 数据库里面的一些基本概念和原理, 比如 数据库逻辑结构, 物理结构, 实例结构, 优化器, 事务等. PDF 460页 Reference 包含了动态性能视图, 数据字典, 初始化参数等, 如...

PeakFang-BOK
2018/10/12
0
0
带您了解Oracle查询工作原理

假如,我们现在利用Select语句从数据库查询数据,Oracle数据库是如何运作的呢?下面就让我们来了解一下Oracle查询工作原理。 结合一条简单的select语句,看看Oracle数据库后台的运作机制。这对...

0o清风徐来o0
2012/10/26
0
1

没有更多内容

加载失败,请刷新页面

加载更多

计算机网络

计算机网络体系结构 OSI 其中表示层和会话层用途如下: 表示层 :数据压缩、加密以及数据描述,这使得应用程序不必关心在各台主机中数据内部格式不同的问题。 会话层 :建立及管理会话。 五层...

一只小青蛙
今天
2
0
0.01-Win10安装linux子系统

一、安装Debian子系统 -1、控制面板设置: -1.1、打开“控制面板” —— “程序” —— “启用或关闭Windows功能” —— 勾选 “适用于Linux的Windows子系统” -2、设置: -2.1、打开“设置”...

静以修身2025
昨天
2
0
init 0-6 (启动级别:init 0,1,2,3,4,5,6)

启动级别: init 0,1,2,3,4,5,6 这是个很久的知识点了,只是自己一直都迷迷糊糊的,今天在翻出来好好理解下。。 0: 停机 1:单用户形式,只root进行维护 2:多用户,不能使用net file system...

圣洁之子
昨天
2
0
Android Camera HAL浅析

1、Camera成像原理介绍 Camera工作流程图 Camera的成像原理可以简单概括如下: 景物(SCENE)通过镜头(LENS)生成的光学图像投射到图像传感器(Sensor)表面上,然后转为电信号,经过A/D(模数转...

天王盖地虎626
昨天
2
0
聊聊Elasticsearch的ProcessProbe

序 本文主要研究一下Elasticsearch的ProcessProbe ProcessProbe elasticsearch-7.0.1/server/src/main/java/org/elasticsearch/monitor/process/ProcessProbe.java public class ProcessProb......

go4it
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部