Oracle学习笔记

发布 2021-05-11 23:02:28 阅读 9704

order by asc 表示升序排列 desc表示降序排列。

distinct表示过滤重复数据。

distinct 去除重复的。

表示获得系统当前时间。

select sysdate from dual

对当前月进行运算。

select add_months(sysdate,-3) from dual后面的数代表加减多少月。

如果日期是最后一天那么得到的就是最后一天。比如30是当前月的最后一天。得到日期所在的月份有31天那么将会得到的是31号而不是30号。

计算两个日期之间的月份差。

select months_between((add_months(sysdate,-3)),sysdate) from dual

表示求第一天select trunc(sysdate,'month') from dual;后面的参数若是月就表示月的第一天。若是year就表示这一年的第一天。

5.月份可以进行减法运算,运算的结果为天数小数部分是这一天过去的时间占整天的百分比。

round(to_number(sysdate-hiredate))from emp

求两个日期之间的天数。

字符串函数。

1.大小写转换lower,upper

eg:select lower(ename) from emp;查询结果是全是小写的。

select * from emp where lower(ename)='smith';名字本来是大写的这样就可以用小写的查询。

字符串的长度。

select length('asfasdfasd') from dual;

lengthb代表有多少个字节。

select lengthb('asfasd哦时刻能够fasd') from dual;

3.截取字符串substr(放字符串,放开始截取的字符串的索引,放的截取几个)这里的索引是从1开始的。

select substr('asfasd哦时刻能够fasd',1,5) from dual;

补位运算。括号里的三个参数第一个是字符串,如果是字符一定要引起来如果全是数字就可以不引起来,第二个是这个字符串一共多少为,如果超出就不补,第三个是补位的字符这个与第一个参数一样数字可以不引起来。

查找制定的字符出现在什么位置效率比like高。

instrb代表字节貌似没用。

select instr('adasda','a') from dual;返回a所在的索引。

select ename,instr(ename,'a') from emp返回名字中第一次出现a所在的索引。

去掉字符串两端的空格。

替换括号的三个参数,第一个是字符串,第二个是要替换的字符,第三个是替换成什么字符。

数学函数。求余。

截断小数位。

select trunc(3.123123,3) from dual;如果不写后面那个参数就直接从小数点那截断。

四舍五入小数与上一个一样如果不指定小数是多少为就只有整数了。

4.求随机数dbms_

判断数字的正负正数返回1负数返回-1 0返回0

select sign(1) from dual;

显示转换。to_char 可以把日期或者数字转换成字符串。

1.格式化日期。

1991-04-22','yyyy-mm-dd')

select * from emp where to_char(hiredate,'mm')=05'

这个查询5月份来的人。

当使用to_char来转化日期时后面的参数yyyy就表示年mm就表示月dd就表示天。

select to_char(sysdate,'yyyy-mm-dd') from dual;打印输出当前的日期。

select to_char(sysdate,'yyyy-mm-dd hh24') from dual;hh表示小时hh后面是12的话就是12小时制,如果是24的话就是24小时制打印输出

mi表示分钟ss表示秒。

select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;

关于这个的yyyy-mm-dd中间的分隔符是可以不写的一个空格也可以。如果要显示汉字可以把汉字加上双引号写进去就可以了。

select to_char(sysdate,'yyyy "年" mm "月" dd "日" hh24"时"mi"分"ss"秒"')from dual;

select to_char(sysdate,'yyyy "年" mm "月" dd "日" hh24"时"mi"分"ss"秒"am') from dual;am和pm表示上午和下午只要写一个就行了会显示上午和下午。

2.格式化数字。经常用的就一个叫做千位分割,条件是格式串必须够长比给的数字长。

select to_char(9999,'00,000.00') from dual;

这个会显示09,999.00

这里面如果是9就不是这样而是9,999.00

表示0是强制占位符而9是。

to_date把字符串转换成日期。

select months_between(sysdate,to_date('2000-01-01','yyyy-mm-dd'))from dual;

其他函数。greatest返回括号里面的数字或者表达式的最大值。

select greatest(123,234,3,34,69-2,123,234+123) from dual;

nvl(1,2)类型必须匹配。如果表达式1的值为null

select ename ,sal,comm,sal+comm from emp;

这样返回的结果就是有些没有拿提成的人会显示没有挣钱。

select ename ,sal,comm,sal+nvl(comm,0) from emp;

这样返回的结果就是对的。

decode只能进行等值判断。

select job,decode(job,'clerk','办事员','manager','经理','salesman','销售员','单词不认识') from emp;

select job,decode(sign(sal-2500),1,'高',0,'中',-1,'低') from emp;

注意只能进行等值运算。

case 的用法。

select sal,case

when sal>2400 then '高'

when sal=2400 then '中'

else '低'

endfrom emp;

跟vb老像了。

排名函数。密集排名dense_rank()over()

select sal,dense_rank() over(order by sal desc) 名次。

from emp;

密集排名表示如果两个数的大小是一样的那么他们的名次将会是一样的而会有两个一样的名次。

非密集排名rank()over()和密集排名一样就是不会有相同的排名。

聚合函数。列名)当为*时就表示这一行不为*null的有多少个。

工作中都是conut的主键名。

select count(sal) from emp where sal>2000;

列名)求和。

列名)求平均。

列名)求最大。

列名)求最小。

聚合函数会忽略null值。

当select子句**现了聚合列和非聚合列时非聚合列必须放在group by子句中。

select deptno,count(sal) from emp group by deptno

group by 默认进行分组条件降序排列。

select deptno,**g(sal),max(sal),min(sal) from emp

group by deptno这个的结果会按照deptno进行降序排列。

select deptno,job,count(empno) from emp

group by deptno,job

order by deptno此为多分组查询。

查询人数大于3人的部门是什么。

select deptno,count(empno) from emp

group by deptno

h**ing count(*)3

order by deptno

分组函数不能出现在where子句中只能靠h**ing来实现。

h**ing是对分组之后的数据进行过滤。当条件的要求是聚合函数的时候就要用h**ing

查询平均工资最高的部分编号。

select deptno from

select deptno,**g(sal) pjgz from emp group by deptno) a inner join

select max(pjgz) maxpjgz from (select deptno,**g(sal) pjgz from emp group by deptno)) b

on 一个查询中有2个嵌套的查询,后面那个查询中又嵌套了一个查询。

a表表示从emp中查询的部门编号和各个部门的平均工资。

b表是从a表的结果中查出最高平均工资。

总的查询是从a和b表中a中pjgz=b表中的maxpjgz然后显示出这个的编号。

不等值连接不能随便用除非只有一条结果时才可以。

select * from emp a join

select deptno,**g(sal) pjgz from emp group by deptno) b

on and >

查询公司中每个部门都比自己部门平均工资高的人都是谁。

自连接的查询。

select '为', from emp a join emp b on

查询谁为谁工作。

双引号里面区分大小写,但是单引号里面不区分。

子查询。in和not in

在使用not in的时候如果结果有null值结果会不正确。

select nvl(mgr,0) from emp

表示如果mgr结果为null值则返回0

多行子查询。

当子查询的结果返回多个值的时候要使用any任何一个all所有的。

ORACLE学习笔记

rac real application clusters 真实应用集群。ohs oracle http server sga system global area 系统全局区,是系统为实例分配的一组共享缓冲存储区,用于存放数据库数据和控制信息,以实现对数据库数据的管理和操作。实例 存取和控制数据数...

Oracle学习笔记

参数文件 记录了控制文件的位置,控制文件是一个非常小的二进制文件,最大。可以增长到 64mb,控制文件包括如下主要信息 数据库的名字,检查点信息,数据库创建的时间戳 所有的数据文件,联机日志文件,归档日志文件信息 备份信息等 有了这些信息,oracle 就知道那些文件是数据文件,现在的重做日志文件是...

ORACLE学习笔记

目录。oracla管理 1 1.登录sqlplus 1 1.1.sysdba 身份登陆 1 1.2.普通用户登陆sqlplus 1 2.常用命令 1 3.格式化提示符 2 4.查看系统状态 2 4.1.查看实例状态 2 4.2.查看表 2 5.关闭 启动 2 6.创建表空间 3 7.用户和权限 3 ...