博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Oracle基础
阅读量:4472 次
发布时间:2019-06-08

本文共 4267 字,大约阅读时间需要 14 分钟。

 

Oracle 基础操作

#用户创建

1 sqlplus /nolog2 sys/password as sysdba--进系统管理员3 create user user_name identified by password--创建用户4 grant dba to user_name--授予权限 5 revoke 权限 from user_name --撤销权限6 alter user user_name account (un)lock--解锁或锁定7 alter user user_name identified by password --修改用户密码8 drop user user_name --删除用户

#表创建

user_name/password --进用户create table table_name (column1 modify 约束,column2 modify 约束,...)--创建表及结构create table table_name as select * from 另一个表 (where 条件) --把另一个表的全部数据及表结构复制/某些数据insert into table_name (column1,column2,...) values (值1,值2,...)---给表插入数据

#增删改

1 alter table table_name add (column modify 约束)--增加列2 alter table table_name modify (column modify)--修改列类型3 alter table table_name rename column (old_column to new_column)--更改列名4 alter table table_name drop column column_name --删除列6 update table_name set column_name=新值 (where 条件) --更新表的某行7 delete from table_name (where 条件)--删除表里的数据

#函数

1、trunc(截段函数)round(四舍五入)round(a,b):a:要进行操作(四舍五入)的对象b:保留几位小数select sal/30,round(sal/30) from emp select sal/30,round(sal/30,2) from emp select sal/30,round(sal/30,-2) from emp trunc(截段)trunc(a,b):a:要进行截段的对象b:截取几位select sal/30,trunc(sal/30) from emp select sal/30,trunc(sal/30,2) from emp select sal/30,trunc(sal/30,-1) from empselect trunc(sysdate,'mm') from dual2,substr 截取函数instr(满足字符串返回值函数)substr(a,b,c)select substr('abcde',2,3) from duala:截取的对象b:从第几位开始截c:截取几位长度select substr('abcde',2) from emp;特例:c c为0,则不截取字符串长度,c没有内容,从起始位截取全部字符串select substr('abcde',2,-3) from dualb: b为0 也为从第一位开始截取select substr('abcde',0) from emp;b<0 select substr('abcdeefdghjbcdvs',-7,4) from dual;instr 判断需求字符串在已知字符串中的位置instr(a,b)select instr('abcde','bd')from dualselect instr(ename,'S') FROM EMPa:已知字符串b:需求字符串select instr ('abcdcba','b',1) from dualc;从第几位开始找select instr('abcdcba','b',1,2) from duald;第几次找到需求字符串(只能取正整数)select instr('abcdcba','b',1,-1) from dualC:---2(表示从右往左找位置,并且从后往前找需求字符串)select instr('abeccdcba','c',-4,2) from dual;着重强调:1,在substr中,若b为负数,从后往前数b的位置,从前往后截c的长度select substr('aabbcc',-3,2) from dual2,在instr中,若c为负数,从后往前数c的位置,在向前找bselect instr('aabbcc','b','-3') from dual3,在instr中,无论什么情况,位置数总是从前向后数。

函数练习:

1 以首字母大写的方式显示所有员工的姓名SELECT  INITCAP(ename) FROM emp2 将员工的职位用小写显示SELECT LOWER(job) FROM emp3 将员工的名字分别用大写和小写显示 SELECT UPPER(ename),LOWER(ename) FROM emp4 将员工名字,首字母小写,其他字母大写的方式显示SELECT LOWER(SUBSTR(ename,1,1))||UPPER(SUBSTR(ename,2)) FROM emp5 显示员工姓名为5个字符的员工SELECT * FROM emp WHERE LENGTH(ename)=56 显示所有员工姓名的前三个字符SELECT substr(ename,1,3) FROM emp7 显示所有员工姓名的后三个字符SELECT SUBSTR(ename ,-3) FROM emp8 以字符长度为10的方式显示员工职位,多余的位数在右边以*来填充SELECT RPAD(job,10,'*') job FROM emp9 找出字符串"oracle training"中第二个ra出现的位置SELECT INSTR('oracle training','ra',1,2) FROM dual10 去除字符串‘ aadde gf ’两边的空格SELECT TRIM(' aadde gf') FROM dual11 以指定格式显示员工的工资(格式:SMITH 的工资是 800)SELECT ename||'的工资是:'||sal FROM  emp12 显示所有员工的姓名,用a替换所有"A"SELECT REPLACE(ename,'A','a') FROM emp13 显示员工姓名中包含‘H’的员工SELECT ename FROM emp WHERE ename LIKE '%H%'14 显示员工姓名中第二个字符是‘L’的员工SELECT ENAME FROM EMP WHERE SUBSTR(ENAME,2,1)='L'15 显示员工姓名中最后一个字符是‘T’的员工SELECT ENAME FROM EMP WHERE SUBSTR(ENAME,-1,1)='T'16 查询一个月前入职的员工SELECT * FROM EMP WHERE hiredate = add_months(hiredate,-1)17 显示在一个月为30天的情况所有员工的日薪,忽略余数SELECT FLOOR(SAL/30) FROM EMP 18 显示员工在此公司工作了几个月(要求结果是整数)SELECT FLOOR(MONTHS_BETWEEN(SYSDATE,HIREDATE)/12) FROM EMP19 显示所有12月份入职的员工SELECT ENAME FROM EMP WHERE TO_CHAR(HIREDATE,'MM')=1220 显示员工的年薪(12个月的工资+补贴)SELECT (SAL+NVL(COMM,0))*12 FROM EMP21 显示所有员工的姓名、加入公司的年份和月份,并且按照年份排序SELECT ENAME,TO_CHAR(HIREDATE,'YYYY') Y ,TO_CHAR(HIREDATE,'MM') M FROM EMP ORDER BY Y,M22 显示每月倒数第3天入职的所有员工SELECT ENAME FROM EMP WHERE HIREDATE = LAST_DAY(HIREDATE)-223 显示入职满10年的员工的姓名和受雇日期。 SELECT ENAME,HIREDATE FROM EMP WHERE MONTHS_BETWEEN(SYSDATE,HIREDATE)/12 >=10
练习和答案

 

#简单查询(列名表名不过多赘述,以学习账户scott为例)

select  (column1,column2...)查询的列名   from  查询的表名  where 条件; --一般条件查询

#order by 、group by

select * from emp order by sal desc (降序) asc(升序) --以工资降序或者升序排列select deptno,max(sal)  from emp group by deptno  --以部门分组查询部门最高工资

注意:用group by 分组的时候,查询的必须是分组的列,或者用组函数(max、min、count、avg 、sum)组合使用

#子查询

将一般查询作为一张表,用另一个查询查这张表,再用上一张表继续查询(多表查询)

例:求出工资排名6-10的员工

1 SELECT *2   FROM (SELECT E.*, ROWNUM R3           FROM (SELECT * FROM EMP ORDER BY SAL DESC) E4          WHERE ROWNUM <= 10)5  WHERE R >= 6

 

 

 

 

 

 

 

 

 

 

 

 

  

转载于:https://www.cnblogs.com/zsf-note/p/10918667.html

你可能感兴趣的文章
vue 小记
查看>>
CURRICULUM VITAE
查看>>
Groovy 程序结构
查看>>
SpringAOP用到了什么代理,以及动态代理与静态代理的区别
查看>>
数据预处理:独热编码(One-Hot Encoding)
查看>>
【NLP新闻-2013.06.03】New Book Where Humans Meet Machines
查看>>
mongodb安装4.0(rpm)
查看>>
备忘pwnable.kr 之passcode
查看>>
好久没敲代码了,手有点生——一个小小的时钟
查看>>
运算符 AS和IS 的区别
查看>>
(转)详解C中volatile关键字
查看>>
easyui时的时间格式yyyy-MM-dd与yyyy-MM-ddd HH:mm:ss
查看>>
专题:动态内存分配----基础概念篇
查看>>
Codeforces Round #426 (Div. 2) (A B C)
查看>>
The Most Simple Introduction to Hypothesis Testing
查看>>
UVA10791
查看>>
P2664 树上游戏
查看>>
jQuery 停止动画
查看>>
Sharepoint Solution Gallery Active Solution时激活按钮灰色不可用的解决方法
查看>>
教你50招提升ASP.NET性能(二十二):利用.NET 4.5异步结构
查看>>