Oracle常用语句练习范文.docx

上传人:b****5 文档编号:8324128 上传时间:2023-01-30 格式:DOCX 页数:18 大小:21.67KB
下载 相关 举报
Oracle常用语句练习范文.docx_第1页
第1页 / 共18页
Oracle常用语句练习范文.docx_第2页
第2页 / 共18页
Oracle常用语句练习范文.docx_第3页
第3页 / 共18页
Oracle常用语句练习范文.docx_第4页
第4页 / 共18页
Oracle常用语句练习范文.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

Oracle常用语句练习范文.docx

《Oracle常用语句练习范文.docx》由会员分享,可在线阅读,更多相关《Oracle常用语句练习范文.docx(18页珍藏版)》请在冰豆网上搜索。

Oracle常用语句练习范文.docx

Oracle常用语句练习范文

/**

创建表空间

DATAFILE指定该表空间创建的位置.文件的后缀为*.DBF

SIZE初始大小

AUTOEXTENDONNEXT指定自动增长大的增量

MAXSIZE最大上限UNLIMITED无限大

LOGGING记录日志

**/

CREATETABLESPACEspaces

DATAFILE'E:

\database\spaces.DBF'

SIZE5M

AUTOEXTENDONNEXT1M

MAXSIZEUNLIMITED

LOGGING;

--删除表空间

DROPTABLESPACEspacesINCLUDINGCONTENTSANDDATAFILES;

--查看当前用户所有的表空间对象

SELECT*FROMuser_tablespaces;

--创建用户

CREATEUSERtestIDENTIFIEDBYtestDEFAULTTABLESPACEspaces;

--删除用户

DROPUSERtestCASCADE;

--给用户赋予权限(角色)

GRANTCONNECT,RESOURCE,CREATEVIEWTOtestWITHADMINOPTION;

GRANTALlONscott.empTOtestWITHGRANTOPTION;

GRANTALlONscott.deptTOtestWITHGRANTOPTION;

GRANTALlONscott.salgradeTOtestWITHGRANTOPTION;

--撤销权限

REVOKECONNECT,RESOURCEFROMtest;

--创建表

CREATETABLEtb

idINTPRIMARYKEYNOTNULL,

nameVARCHAR2(10)UNIQUENOTNULL,

sexNCHAR

(1)CHECK(sex='男'ORsex='女'),

scoreNUMBER(10,2)DEFAULT(100)

CREATETABLEsub_tb

idINTPRIMARYKEYNOTNULL,

fINTREFERENCEStb(id)

DROPTABLEtb;

--序列(自动增长序列)

CREATESEQUENCEmysequ

STARTWITH1000

INCREMENTBY2

NOMAXVALUE

CACHE100;

--插入信息,DEFAULT可以为默认关键字

INSERTINTOtb(id,name,sex,score)VALUES(1,'测试','女',99);

INSERTINTOtb(id,name,sex,score)VALUES(2,'测试2','男',DEFAULT);

INSERTINTOtbVALUES(mysequ.nextval,'测试3','男',DEFAULT);

SELECTmysequ.currval当前序列,mysequ.nextval下一个序列FROMdual;

--添加列

ALTERTABLEtbADDtimesDATEDEFAULT(SYSDATE);

--修改列

ALTERTABLEtbMODIFYsexNCHAR

(1)DEFAULT('男');

--删除列

ALTERTABLEtbDROPCOLUMNscore;

--修改表的名称

RENAMEnew_tbTOtb;

--查询当前用户所有的表信息

SELECT*FROMuser_tables;

--查询并创建

CREATETABLEmyempASSELECT*FROMscott.empWHERE1=2;

CREATETABLEmydeptASSELECT*FROMscott.dept;

CREATETABLEmysalgradeASSELECT*FROMscott.salgrade;

--查询并插入

INSERTINTOmyempSELECT*FROMscott.emp;

/**

事务的处理

ROLLBACK回滚事务

COMMIT提交事务,真正的向数据库提交信息

如果直接COMMIT或者ROLLBACK则中途所有的保存点都会消失

DELETE该删除属于DML数据操作语言,在删除数据的时候会记录日志.

是为了恢复而准备.所以速度慢.

TRUNCATETABLE该删除属于DDL语言.没有记录日志信息.速度快.无法恢复

**/

TRUNCATETABLEmyemp;

--创建保存点

SAVEPOINTa;

--回滚事务

ROLLBACK;

ROLLBACKTOa;

--提交事物

COMMIT;

DELETEFROMmyempWHEREename='SMITH';

--查询SMITH的薪水,工作,所在部门

SELECTsal,job,deptnoFROMmyempWHEREename='SMITH';

--显示每个雇员的年工资

SELECTsal*12+NVL(comm,0)别名FROMmyemp;

--如何显示工资高于3000的员工

SELECT*FROMmyempWHEREsal>3000;

--如何查找1982.1.1后入职的员工

SELECT*FROMmyempWHEREhiredate>'01-1月-1982';

--如何显示工资在2000到2500的员工情况

SELECT*FROMmyempWHEREsalBETWEEN2000AND2500;

SELECT*FROmmyempWHEREsal>=2000ANDsal<=2500;

--如何显示首字符为S的员工姓名和工资

SELECTename,salFROMmyempWHEREenameLIKE'S%';

--如何显示第三个字符为大写O的所有员工的姓名和工资

SELECTename,salFROMmyempWHEREenameLIKE'__O%';

--如何显示empno为123,345,800...的雇员情况

SELECT*FROMmyempWHEREempnoIN(123,345,800,7788);

--如何显示没有上级的雇员的情况

SELECT*FROMmyempWHEREmgrISnull;

SELECT*FROMmyempWHEREmgrISNOTNULL;

--查询工资高于500或是岗位为MANAGER的雇员,同时还要满足他们的姓名首写字母为大写的J

SELECT*FROMmyempWHERE(sal>500ORjob='MANAGER')ANDenameLIKE'J%';

--如何按照工资的从低到高的顺序显示雇员的信息

SELECT*FROMmyempORDERBYsalASC;

--按照部门号升序而雇员的入职时间降序排列

SELECT*FROMmyempORDERBYdeptnoASC,hiredateDESC;

--如何显示所有员工中最高工资和最低工资

SELECTMAX(sal),MIN(sal)FROMmyemp;

--显示所有员工的平均工资和工资总和

SELECTAVG(sal),SUM(sal)FROMmyemp;

--计算共有多少员工

SELECTCOUNT(*)FROMmyemp;

--请显示工资最高的员工的名字,工作岗位

SELECTename,job,salFROMmyempWHEREsal=(SELECTMAX(sal)FROMmyemp);

--请显示工资高于平均工资的员工信息

SELECTename,job,salFROMmyempWHEREsal>(SELECTAVG(sal)FROMmyemp);

--如何显示每个部门的平均工资和最高工资

SELECTdeptno,AVG(sal),MAX(sal)FROMmyempGROUPBYdeptno;

--显示每个部门的每种岗位的平均工资和最低工资

SELECTdeptno,job,AVG(sal),MAX(sal)FROMmyempGROUPBYdeptno,job;

--显示平均工资低于2000的部门号和它的平均工资

SELECTdeptno,AVG(sal)FROMmyempGROUPBYdeptnoHAVINGAVG(sal)<2000;

/***

SQL协议标准有三个版本,SQL89,SQL92,SQL99

其中内连接92标准是SELECT*FROMA,B,CWHERE连接条件AND筛选条件

99标准是SELECT*FROMAINNERJOINBON连接条件WHERE筛选条件

推荐使用新标准,思路更清晰

多表查询一定要起别名,方便些

**/

--显示雇员名,雇员工资及所在部门的名字

SELECTe.ename,e.sal,d.dnameFROMmyempe,mydeptdWHEREe.deptno=d.deptno;

SELECTe.ename,e.sal,d.dnameFROMmyempeINNERJOINmydeptdONe.deptno=d.deptno;

--如何显示部门号为10的部门名、员工名和工资

SELECTe.ename,e.sal,d.dnameFROMmyempe,mydeptdWHEREe.deptno=d.deptnoANDd.deptno=10;

SELECTe.ename,e.sal,d.dnameFROMmyempeJOINmydeptdONe.deptno=d.deptnoWHEREe.deptno=10;

--显示各个员工的姓名,工资,及其工资的级别

SELECTe.ename,e.sal,e.job,g.gradeFROMmyempeJOINmysalgradegONe.salBETWEENg.losalANDg.hisal;

--显示雇员名,雇员工资及所在部门的名字,并按部门排序.

SELECTe.ename,e.sal,d.dname,d.deptnoFROMmyempe,mydeptdWHEREe.deptno=d.deptnoORDERBYe.deptno;

--显示员工的上级领导的姓名

SELECTe1.empno,e1.ename上级,e2.empno,e2.ename下属FROMmyempe1,myempe2WHEREe1.empno=e2.mgr;

--如何显示工资比部门30的所有员工的工资高的员工的姓名、工资和部门号

SELECT*FROMmyempWHEREsal>(SELECTMAX(sal)FROMmyempWHEREdeptno=30);

SELECT*FROMmyempWHEREsal>ALL(SELECTsalFROMmyempWHEREdeptno=30);

--如何显示工资比部门30的任意一个员工的工资高的员工的姓名、工资和部门号

SELECT*FROMmyempWHEREsal>ANY(SELECTsalFROMmyempWHEREdeptno=30);

--查找每个部门工资最高的人的详细资料

SELECT*FROMmyempWHEREsalIN(SELECTMAX(sal)FROMmyempGROUPBYdeptno);

--显示每个部门的信息和人员数量

SELECT*FROMmydeptd,(SELECTdeptno,COUNT(*)FROMmyempGROUPBYdeptno)tWHEREd.deptno=t.deptno;

--分页,伪列都是查询结果集数据的行信息,只是执行先后顺序问题而已

SELECT*FROM(

SELECTROWNUMr,t.*FROM(

SELECTROWNUM,myemp.*FROMmyempORDERBYsal)tWHEREROWNUM<=(2*5)

)t2WHEREt2.r>(2-1)*5;

--UNION联合查询

SELECT*FROMscott.empWHEREsal>2500UNIONALL

SELECT*FROMmyempWHEREjob='MANAGER';

SELECT*FROMscott.empWHEREsal>2500MINUS

SELECT*FROMmyempWHEREjob='MANAGER';

SELECT*FROMscott.empWHEREsal>2500INTERSECT

SELECT*FROMmyempWHEREjob='MANAGER';

--外连接

SELECT*FROMmyempeLEFTOUTERJOINmydeptdONe.deptno=d.deptno;

SELECT*FROMmyempeRIGHTJOINmydeptdONe.deptno=d.deptno;

SELECT*FROMmyempeFULLJOINmydeptdONe.deptno=d.deptno;

SELECT*FROMmyempe,mydeptdWHEREe.deptno=d.deptno(+);

SELECT*FROMmyempe,mydeptdWHEREe.deptno(+)=d.deptno;

--字符替换函数

SELECTename,REPLACE(ename,'TA','ta')FROMmyemp;

--连接字符

SELECT'姓名:

'||enameFROMmyemp;

SELECTCONCAT('姓名:

',ename)FROMmyemp;

--将字符变成小写

SELECTename,LOWER(ename)FROMmyemp;

--将字符变成大写

SELECTename,UPPER(ename)FROMmyemp;

SELECTLOWER('你好')FROMmyemp;

--将首字母大写剩余字母全部小写

SELECTename,INITCAP(ename)FROMmyemp;

--字符截取,Oracle函数设计灵活

SELECTename,SUBSTR(ename,2)FROMmyemp;

SELECTename,SUBSTR(ename,2,5)FROMmyemp;

SELECTename,SUBSTR(ename,-2,1)FROMmyemp;

--判断该字符是否存在,如果存在则返回首次出现的位置数否则为0

SELECTename,INSTR(ename,'A')FROMmyemp;

--去除指定的字符

SELECTename,TRIM('A'FROM'AABBAA')FROMmyemp;

--替换多个字母

SELECTename,TRANSLATE(ename,'SM','<>')FROMmyemp;

--该字母ASCII编码

SELECTASCII('w')FROMmyemp;

SELECTASCII('w')FROMdual;

--四舍五入如果不写精确的位数则默认针对于小数点后一位.如果有位数则针对于该位数.如果该位数为负数

--精确到小数点左边的位数值进行四舍五入.同时如果没有进位则为0.舍弃小数点位.

SELECTsal,ROUND(15.64,-2)FROMmyemp;

--数字截取.如果截取的位数为负数则截取整数部分.截取的值直接归

SELECTTRUNC(15.64,-2)FROMmyemp;

--取模10%3==110/==3

SELECTMOD(10,3)FROMmyemp;

--向下取整

SELECTFLOOR(-11.5)FROMmyemp;

--向上取整

SELECTCEIL(-11)FROMmyemp;

--绝对值

SELECTABS(-1.1)FROMmyemp;

--系统当前时间

SELECTSYSDATEFROMdual;

--添加月份

SELECThiredate,ADD_MONTHS(hiredate,-4)FROMmyemp;

--返回当前时间按月份的最后一天

SELECThiredate,LAST_DAY(hiredate)FROMmyemp;

--返回两个时间差集月份,日期-日期==天数格式

SELECTename,hiredate,MONTHS_BETWEEN(SYSDATE,hiredate)FROMmyemp;

SELECTSYSDATE-hiredateFROMmyemp;

--显示下一个指定的时间

SELECTNEXT_DAY(hiredate,'星期日')FROMmyemp;

--转换字符类型

SELECTsal,hiredate,TO_CHAR(sal,'$000,999,999.99'),TO_CHAR(hiredate,'yyyy/mm/dd/hh24:

mi:

ss')FROMmyemp;

--转换日期类型TO_DATE(转换的数据yymmdd)不要写汉字

SELECTTO_DATE('87-5-2','yyyy/mm/dd')FROMdual;

--显示所有员工的姓名,用”我是A”替换所有"A“

SELECTename,REPLACE(ename,'A','我是A')FROMmyemp;

--显示在一个月为30天的情况所有员工的日薪金,忽略余数.

SELECTsal,TRUNC(sal/30)FROMmyemp;

--查找已经入职8个月多的员工

SELECTmyemp.*,MONTHS_BETWEEN(SYSDATE,hiredate)FROMmyempWHEREMONTHS_BETWEEN(SYSDATE,hiredate)>8;

--显示满10年服务年限的员工的姓名和受雇日期.

SELECTmyemp.*,MONTHS_BETWEEN(SYSDATE,hiredate)/12FROMmyempWHEREMONTHS_BETWEEN(SYSDATE,hiredate)/12>10;

--对于每个员工,显示其加入公司的天数.

SELECTmyemp.*,CEIL(SYSDATE-hiredate)FROMmyemp;

--找出各月倒数第3天受雇的所有员工.

SELECTmyemp.*,LAST_DAY(hiredate)FROMmyempWHEREhiredate=LAST_DAY(hiredate)-2;

--日期是否可以显示时/分/秒

SELECThiredate,TO_CHAR(hiredate,'yyyy-mm-ddhh24:

mi:

ss')FROMmyemp;

--薪水是否可以显示指定的货币符号

SELECTsal,TO_CHAR(sal,'L000,999,999.99')FROMmyemp;

--显示1980年入职的所有员工

SELECTmyemp.*,hiredateFROMmyempWHERE'1980'=TO_CHAR(hiredate,'yyyy');

--显示所有12月份入职的员工

SELECTmyemp.*,hiredateFROMmyempWHERE'12'=TO_CHAR(hiredate,'mm');

--备份其他用户表信息

expuserid=system/systemtables=(scott.emp,scott.dept,scott.salgrade)file=F:

\scott.dmp

--导入其他用户备份信息

impuserid=system/systemfile=F:

\scott.dmpfromuser=scotttouser=test

--导出自身方案

expuserid=scott/scottowner=scottfile=F:

\scott.dmp

impuserid=scott/scottfile=F:

\scott.dmp

--导入导出别人方案

expuserid=system/systemowner=scottfile=F:

\scott.dmp

impuserid=system/systemfile=F:

\scott.dmpfromuser=文件备份方案名touser=需要恢复的对象方案

--创建索引,可以提高检索速度

CREATEINDEXemp_indexONemp(ename);

DROPINDEXemp_index;

--创建视图

CREATEORREPLACEVIEWpaging_viewAS

SELECT*FROM(

SELECTROWNUMr,t.*FROM

(SELECT*FROMempORDERBYsal)t

WHEREROWNUM<=2*5

)t2WHEREt2.r>(2-1)*5

SELECT*FROMpaging_view;

DROPVIEWpaging_view;

--创建同义词

CREATESYNONYMeFORscott.emp;

SELECT*FROMscott.emp;

SELECT*FROMe;

DROPSYNONYMe;

---------------------PL/SQL编程,基于SQL之上的一种SQL编程语言------------------------------------------------------

DECLARE

--声明变量

v_namesVARCHAR2(100):

='默认值,写法比较奇怪.';

v_jobemp.job%TYPE;--job变量的类

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 广告传媒

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1