




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Oracle PL/SQL编程手册 (SQL 大全 )一、 SQLPLUS1 引言SQL命令以下 17 个是作为语句开头的关键字:alterdroprevokeauditgrantrollback*commit*insertselectcommentlockupdatecreatenoauditvalidatedeleterename这些命令必须以“ ; ”结尾带* 命令句尾不必加分号,并且不存入SQL缓存区。SQL中没有的 SQL*PLUS命令这些命令不存入SQL缓存区definepause#delquit$describeremark/disconnectrunacceptdocument
2、saveappendeditsetbreakexitshowbtitlegetspoolchangehelpsqlplusclearhoststartcolumninputtimingcomputelistttitleconnectnewpageundefinecopy-2 数据库查询数据字典TAB用户创建的所有基表、视图和同义词清单DTAB构成数据字典的所有表COL用户创建的基表的所有列定义的清单CATALOG 用户可存取的所有基表清单select*fromtab;describe命令描述基表的结构信息describedeptselect*fromemp;selectempno,ename,
3、jobfromemp;select*fromdeptorderbydeptnodesc;逻辑运算符=!=或<>>>=<<=inbetweenvalue1andvalue2like%_innullnotnoin,isnotnull谓词 in和 notin有哪些职员和分析员selectename,jobfromempwherejobin('clerk','analyst');selectename,jobfromempwherejobnotin('clerk','analyst');谓词 betwe
4、en 和 notbetween哪些雇员的工资在 2000 和 3000 之间selectename,job,salfromempwheresalbetween2000and3000;selectename,job,salfromempwheresalnotbetween2000and 3000;谓词 like,notlikeselectename,deptnofromempwhereenamelike'S%'( 以字母 S开头 )selectename,deptnofromempwhereenamelike'%K'(以 K结尾)selectename,deptn
5、ofromempwhereenamelike'W_'( 以 W开头,后面仅有三个字母)selectename,jobfromempwherejobnotlike'sales%'( 哪些雇员的工种名不以sales 开头 )谓词 isnull,isnotnull没有奖金的雇员(即commision为 null)selectename,jobfromempwherecommisnull;selectename,jobfromempwherecommisnotnull;多条件查询selectename,jobfromempwheredeptno=20andjob!=
6、39;clerk'表达式+-*/算术表达式选择奖金高于其工资的5%的雇员selectename,sal,comm,comm/salfromempwherecomm>.05*salorderbycomm/saldesc;日期型数据的运算addtwodaysto6-Mar-876-Mar-87+2 = 8-Mar-87addtwohoursto6-Mar-876-Mar-87+2/24=6-Mar-87and2hrsadd15secondsto6-Mar-876-Mar-87+15/(24*60*60)=6-Mar-87and15secs列名的别名selectenameemploye
7、efromempwheredeptno=10;(别名: employee )selectename,sal,comm,comm/sal"C/SRATIO"fromempwherecomm>.05*salorderbycomm/saldesc;SQL命令的编辑listorl显示缓冲区的内容list4显示当前 SQL命令的第 4行,并把第 4 行作为当前行,在该行号后面有个* 。changeorc用新的内容替换原来在一行中第一次出现内容SQL>c/(.)/('analyst')/inputori增加一行或多行appendora在一行后追加内容del删
8、除当前行删除 SQL缓冲区中的当前行run显示并运行SQL缓冲区中的命令/ 运行 SQL缓冲区中的命令edit把 SQL缓冲区中的命令写到操作系统下的文本文件,并调用操作系统提供的编辑器执行修改。-3 数据操纵数据的插入insertvaluesinto dept (10,'accounting','newyork');insertvaluesinto dept ('accounting',10);(dname,deptno)从其它表中选择插入数据insertintoemp(empno,ename,deptno)selectid,name,depa
9、rtmentfromold_empwheredepartmentin(10,20,30,40);使用参数insertintodeptvalues(&deptno,&dname,&loc);执行时, SQL/PLUS对每个参数将有提示用户输入参数对应日期型或字符型数据时,可在参数上加引号,输入时就可不用引号insertintodeptvalues(&deptno,'&dname','&loc');插入空值( NULL)insertintodeptvalues(50,'education',null);
10、插入日期型数据日期型数据缺省格式:DD-MON-YYinsertintoemp(empno,ename,hiredate)values(7963,'stone','07-APR-87');系统时间: SYSDATEinsertintoemp(empno,ename,hiredate)values(7600,'kohn',SYSDATE);数据更新updateempsetjob='manager'whereename='martin'updateempsetjob='marketrep'whereen
11、ame='salesman'updateempsetdeptno=40,job='marketrep'wherejob='salesman'数据删除deleteempwhereempno=765;更新的提交commit自动提交方式setautocommiton如果状态设为开,则使用inesrt,update,delete会立即提交。更新取消rollback两次连续成功的commit 之间的操作,称为一个事务-4 创建基表、视图创建基表createtabledept(deptnonumber(2),dnamechar(14),locchar(13)
12、;数据字典会自动更新。一个基表最多254 列。表名列名命名规则:限制第一个字符必须是字母,后面可任意(包括名字不得超过30 个字符。$#_但不能是逗号) 。唯一某一用户的基表名必须唯一,不能是ORACLE的保留字,同一基表的列名互不相同。使用双引号如果表名用双引号括起来,则可不满足上述规则;只有使用双引号,才能区别大、小写;命名时使用了双引号,在以后的操作也必须使用双引号。数据类型:char(n)(不得超过240 字符)number(n,d)datelong(最多 65536 字符)raw(二进制原始数据)空值处理有时要求列值不能为空createtabledept(deptnonumber(2
13、)notnull,dnamechar(14),locchar(13);在基表中增加一列altertabledeptadd(headcntnumber(3);修改已有列属性altertabledeptmodifydnamechar(20);注:只有当某列所有值都为空时,才能减小其列值宽度。只有当某列所有值都为空时,才能改变其列值类型。只有当某列所有值都为不空时,才能定义该列为notnull 。例:altertabledeptmodify(locchar(12);altertabledeptmodifylocchar(12);altertabledeptmodify(dnamechar(13),l
14、occhar(12);创建视图createviewmanagersasselectename,job,salfromempwherejob='manager'为视图列名取别名createviewmydept(person,title,salary)asselectename,job,salfromempwheredeptno=10;withcheckoption选项使用 withcheckoption,保证当对视图插入或更新数据时,该数据必须满足视图定义中select命令所指定的条件。createviewdept20asselectename,job,sal,deptnofro
15、mempwheredeptno=20withcheckoption;在做下述操作时,会发生错误updatedept20setdeptno=30whereename='ward'基表、视图的拷贝createtableemp2asselect*fromemp;基表、视图的删除droptable表名dropview视图名-5SQL*PLUS报表功能SQL*PLUS的一些基本格式命令columndeptnoheadingdepartmentcolumnenameheadingnamecolumnsalheadingsalarycolumnsalformat$99,999.00ttitl
16、esamplereportfor hitechcorpbtitlestrictlyconfidentialbreakondeptnocomputesumofsalon deptnorun表头和表尾ttitlesamplereportfor hitechcorpbtitlerightstrictlyconfidential“”表示换行,结尾不必加分号选项有三种: leftrightcenter使用 TTITLE,系统将自动地在每页的顶部显示日期和页号。TTITLET 和 BTITLE 命令有效,直至重新设置表头或表尾,或退出SQL*PLUS。下面命令使标题语句失效TTITLEOFFBTITLEO
17、FF列名column 命令定义用于显示列名若名字为一个单词,不必加引号columnenameheadingemployeecolumnenameheading 'employee name'(为换行)取消栏定义columnenameclear列的格式columnenameformatA15columnsalformat$9,999.99columncommlikesallike子句,使得某一列的格式参照另一列格式,它拷贝列名及其格式控制记录显示分组顺序breakondeptno(不显示重复值)selectdeptno,enamefromemporderbydeptno;(ORD
18、ERBY子句用于控制BREAK)显示为10 clarkniller20 smithscott30 allenblake每次只有一个BREAK命令起作用,但一次可以在多个列上使用BREAK命令breakon列名 1on列名 2记录分组breakondeptnoskip2selectdeptno,enamefromemporderbydeptno;每个 deptno之间空两行clearbreak (取消 BREAK命令)breakonpage(每次从一新页开始)breakonreport(每次从一新报表开始)breakonpageon report(联合使用)分组计算breakondeptnosk
19、ip2computesum ofsalondeptno计算每个部门的工资总和skip 子句使部门之间的信息分隔开其他计算命令computeavgofsalondeptno (平均值)count非空值的总数MAX最大值MIN最小值STD标准偏差VAR协方差NUMBER 行数使 compute 命令失效一旦定义了COMPUTE,则一直有效,直到关闭 COMPUTE(clearcompute)SQL/PLUS环境命令show选项(显示当前参数设置情况)showall (显示全部参数)设置参数set选项值或开关setautocommitonSET命令包括setautocommitoff on imme
20、diate(自动提交, OFF缺省)setechooff on(命令文件执行,是否在终端上显示命令本身,OFF缺省)setfeedbackoff on(ON:查询结束时,给出结果,记录数的信息,缺省;OFF:无查询结果,记录数的信息)setheadingoff on(ON:列的头标在报表上显示,缺省;OFF:不在报表上显示)setlinesizen一行显示的最大字符数,缺省为80setpagesizen每页的行数,缺省是14setpauseoff on text(ON:当报表超过一页时,每显示一屏就暂停显示,等待用户打回车键,再接着显示;OFF:页与页不停顿,缺省; text :页与页停顿,并
21、向用户提示信息)SETBUFFERbuffer设置当头的命令缓冲区,通常情况下,SQL命令缓冲区已为当前缓冲区。由于 SQL命令缓冲区只能存放一条SQL命令,所以可用其它缓冲区来存放SQL命令和 SQL*PLUS命令。经常用到的设置可放在login.sql文件中。SETNULLsetnull'nodata'selectename,commfromempwheredeptno=30;把部门 30 中无佣金雇员的佣金显示为“NODATA”。setnull是 SQL*PLUS命令,用它来标识空值(NULL),可以设置为任意字符串。存盘命令SAVEsave文件名input1select
22、empno,ename,job2fromemp3wherejob='analyst'saveresearch目录中会增加一个research.sql文件。编辑命令EDITeditEDIT 编辑当前缓冲区中的内容。编辑一个文件editresearch调入命令GETgetresearch把磁盘上的文件内容调入缓冲区,并显示在屏幕上,文件名尾不必加.sql 。START命令运行指定的文件startresearch输出命令SPOOLspooltryfile不仅可以使查询结果在屏幕上显示,还可以使结果存入文件停止向文件输出spooloff把查询结果在打印机上输出,先把它们存入一个文件中,
23、然后不必使用SPOOLOFF,而用:spooloutSPOOLOUT关闭该文件并在系统缺省的打印机上输出制作报表举例edittryfilesetechooffsetautocommitonsetpagesize25insertintoemp(empno,ename,hiredate)values(9999,'geiger',sysdate);insertintoemp(empno,ename,deptno)values(3333,'samson',20);spoolnew_empselect*fromempwheredeptno=20ordeptnoisnull
24、/spooloffsetautocommitoff用 start命令执行这个文件-6 函数字符型函数initcap(ename);将 ename 中每个词的第一个字母改为大写。如: jacksmith-JackSmithlength(ename);计算字符串的长度。substr(job,1,4);其它lowerupperleastgreatest取出字符串列表中按字母排序排在最前面的一个串取出字符串列表中按字母排序排在最后的一个串日期函数add_month(hiredate,5)在雇佣时间上加5 个月month_between(sysdate,hiredate)计算雇佣时间与系统时间之间相差的
25、月数next_day(hiredate,'FRIDAY')计算受雇日期之后的第一个星期五的日期例selectfromwhereename,sal,next_day(sysdate,'FRIDAY')empdeptno=20;as_of( as_of 是别名)如果不用to_char函数,日期在ORACLE中的缺省格式是'DD_MON_YY'to_char(date,datepicture)selectename,to_char(hiredate,'DyMondd,yyyy')hiredfromempwheredeptno=10;to
26、_date(字符串 , 格式 )insert into emp(empno,ename,hiredate) values(7999,'asms',to_date('070387083000','MMDDYYHHMISS');日期型数据的格式dd 12 dy fridayfridayddspthtwelfthmm 03mon mar month marchyy 87yyyy1987例Mar12,1987'Mondd,yyyy'MAR12,1987'MONdd,yyyy'ThursdayMARCH12'DayM
27、ONTH dd'Mar1211:00am'Monddhh:miam'Thu,thetwelfth'Dy,"the"ddspth'算术函数least(v1,v2)selectfromwhereename,empno,mgr,least(empno,mgr)empempno0lownumtrunc(sal,0)取 sal 的近似值(截断)空值函数nvl(v1,v2)v1 为列名,如果v1 不是空值, nvl 返回其列值。v1 为空值,返回v2 的值。聚组函数selectsum(comm)fromemp;(返回一个汇总信息)不能把 sum用
28、在 select语句里除非用groupby字符型、日期型、数字型的聚组函数minmaxcount 可用于任何数据类型selectmin(ename)fromemp;selectmin(hiredate)fromemp;selectmin(sal)fromemp;有多少人有工作?selectcount(job)fromemp;有多少种不同的工种?selectcount(distinctjob)fromemp;countdistinct计算某一字段中不同的值的个数其它聚组函数(只用于数字型数据)avg计算平均工资selectavg(sal)fromemp;stddev计算工资的平均差selects
29、tddev(sal)fromemp;sum计算总工资selectsum(sal)fromemp;groupselectby 子句deptno,sum(sal),avg(sal)fromempgroupbydeptno;按多个条件分组每个部门的雇员数selectdeptno,count(*)fromempgroupbydeptno;每个部门的每个工种的雇员数selectdeptno,job,count(*)fromempgroupbydeptno,job;满足条件的分组(where 是针对 select的, having 是针对 groupby 的)哪些部门的工资总和超过了9000selectf
30、romgrouphavingdeptno,sum(sal)empbydeptnosum(sal)>9000;select小结除去职员,哪些部门的工资总和超过了8000selectdeptno,sum(sal)fromempwherejob!='clerk'groupbydeptnohavingsum(sal)>8000orderbysum(sal);-7 高级查询等值联接selectfromwhereempno,ename,job,emp.deptno,dnameemp,deptemp.deptno=dept.deptno;外联接selectfromwhereena
31、me,dept.deptno,locemp,deptemp.deptno(+)=dept.deptno;如果在 dept.deptno中有的数值,在emp.deptno中没有(如deptno=40 ),则作外联接时,结果中会产生一个空值自联接:同一基表的不同行要做联接,可使用自联接指出每个雇员的经理名字selectworker.ename,manager.enamemanagerfromempworker,empmanagerwhereworker.mgr=manager.empno;非等值联接哪些雇员的工资属于第三级别selectename,salfromemp,salgradewhereg
32、rade=3andsalbetweenlosalandhisal;(基表salgrade: gradelosalhisal)集合运算行的连接集合运算把2 个或多个查询结果合并为一个union-setunionRowsoffirstqueryplusofsecondquery,lessduplicaterowsintersect-setintersectionRowsbothquerieshaveincommonminus-setdifferencerowsuniquetothefirstquery介绍几个视图accountviewenamesaljobsalesviewenamesaljobr
33、esearchviewenamesaljobunion 运算返回一个查询结果中有但又不重要的行,它将基表或视图中的记录合并在一起所有部门中有哪些雇员工资超过2000对应列的数据类型必须相同selectename,salfromaccountwheresal>2000unionselectename,salfromresearchwheresal>2000unionselectename,salfromsaleswheresal>2000;intersect运算返回查询结果中相同的部分各个部门中有哪些相同的工种selectjobfromaccountintersectselec
34、tjobfromresearchintersectselectjobfromsales;minus 运算返回在第一个查询结果中与第二个查询结果不相同的那部分行记录。有哪些工种在财会部中有,而在销售部中没有?selectjobfromaccountminusselectjobfromsales;子查询slectename,deptnofromempwheredeptno=(selectdeptnofromempwhereename='smith');多级子查询selectename,job,salfromempwherejob=(selectjobfromempwhereenam
35、e='clark')orsal>(selectsalfromempwhereename='clark');多个基表与子查询selectename,job,salfromemp,deptwhereloc='newyork'andemp.deptno=dept.deptnoandsal>(selectsalfromempwhereename='scott');子查询中使用聚组函数selectfromwhere(selectfromename,hiredateemphiredate=min(hiredate)emp);-8
36、授权系统权限DBA所有权限RESOURCE 注册,创建新的基表CONNECT,注册,查询只有 DBA才有权创建新的用户grantconnecttoscottidentifiedbytiger;DBA或用户自己可以改变用户口令grantconnecttoscottidentifiedbyleopard;基表权限1有两种方法获得对基表操作的权限创建自己的基表获得基表创建用户的许可grantselect,insertonemptoscott;这些权限有selectinsertupdatedeletealterindex把所有权限授于他人grantallonemptoscott;同义词select*f
37、romscott.emp创建同义词为用户 allen的 EMP基表创建同义词employeecreatesynonymemployeeforallen.emp基表权限2你可以使其他用户有这样的权力,即其他用户可以把你的基表权限授予他人grantallonemptoscottwithgrantoption;收回权限系统权限只有被 DBA收回基表权限随时都可以收回revokeinsertonempfromscott;-9 索引建立索引createindexemp_enameonemp(ename);删除索引dropindexemp_ename;关于索引只对较大的基表建立索引(至少50 条记录)建立
38、索引之前插入数据对一个基表可建立任意多个索引一般是在作为主键的列上建立索引建立索引之后,不影响SQL命令的执行建立索引之后,ORACLE自动维护和使用索引保证数据唯一性提高执行速度的同时,索引还可以保证每个记录中的每个列值是不重复的。createuniqueindexemp_empnoonemp(empno);-练习和答案有没有工资比奖金多的雇员?如果有,按工资的降序排列。如果有两个以上的雇员工资相同,按他们的名字排序。selectenameemployee,salsalary,commcommisionfromempwheresal>commorderbysaldesc,ename;列
39、出有关雇员姓名、奖金占收百分比的信息。要求显示时列名意义明确,按雇员姓名排序,不包括奖金未知的雇员。selectenameemployee,(comm/(comm+sal)*100incentivefromempwherecommisnotnullorderbyename;在 chicago (部门 30)工作的所有雇员的工资上涨10%。updateempsetsal=1.1*salwheredeptno=30;updateempsetsal=1.1*salwheredeptno=(selectdeptnofromdeptwhereloc='chicago');为 hitech
40、 公司新建一个部门,编号为50,其它信息均不可知。insertintodept(dname,deptno)values('faclities',50);创建视图,三个列名,其中不包括职员信息createviewemployee("employeename","employeenumber","employeejob")asselectename,empno,jobfromempwherejob!='clerk'制作工资报表,包括雇员姓名、受雇时间(按星期计算) ,工资和部门编号,一页显示一个部门的信息,每页尾,显示该页的工资之和以及受雇时间之和,报表结尾处,显示所有雇员的工资总和以及受雇时间总和,工资按美元计算,受雇时间按星期计算,每页的上方应有标题。ttitle'service'breakondeptnoonpageonreportcomputesumofsalondeptnocomputesumofsalonreportcomputesumofservice_lengthondeptnocomputesumofservice_lengthonreportcolumnsalformat$99,999.00columns
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 快手小店转让协议书
- 双方约定雇佣协议书
- 酒吧位置转让协议书
- 同城开店协议书范本
- 双人股份转让协议书
- 企业归属协议书范本
- 企业食堂供货协议书
- 酒席帐篷租赁协议书
- 立项协议书范本模板
- 就业协议书盖章规定
- 急性缺血性卒中再灌注治疗指南2024解读
- 初中生心理健康课件
- 2025届河北省衡水市衡水中学高考仿真模拟英语试卷含解析
- 医疗机构医疗废物管理规范考试试题及答案
- 2024年山东省公务员录用考试《行测》真题及答案解析
- 4.1 时代的主题 课件-2024-2025学年高中政治统编版选择性必修一当代国际政治与经济
- 2024年中国高低压电器开关柜市场调查研究报告
- 班级管理-形考任务2-国开-参考资料
- 黑龙江省哈尔滨市香坊区风华中学2024-2025学年九年级(五四学制)上学期10月月考语文试题
- 2024年公开招聘工作人员报名表
- 隐私保护与数据安全合规性测试考核试卷
评论
0/150
提交评论