1、sql语句的编程手册sql语句的编程手册SQL命令 以下17个是作为语句开头的关键字: alterdroprevoke auditgrantrollback* commit*insertselect commentlockupdate createnoauditvalidate deleterename 这些命令必须以“;”结尾 带*命令句尾不必加分号,并且不存入SQL缓存区。 SQL中没有的SQL*PLUS命令 这些命令不存入SQL缓存区 definepause #delquit $describeremark /disconnectrun acceptdocumentsave append
2、editset breakexitshow btitlegetspool changehelpsqlplus clearhoststart columninputtiming computelistttitle connectnewpageundefine copy - 2数据库查询 数据字典 TAB用户创建的所有基表、视图和同义词清单 DTAB构成数据字典的所有表 COL用户创建的基表的所有列定义的清单 CATALOG用户可存取的所有基表清单 select*fromtab; describe命令描述基表的结构信息 describedept select* fromemp; selectemp
3、no,ename,job fromemp; select*fromdept orderbydeptnodesc; 逻辑运算符 =!=或=.05*sal orderbycomm/saldesc; 日期型数据的运算 addtwodaysto6-Mar-87 6-Mar-87+2=8-Mar-87 addtwohoursto6-Mar-87 6-Mar-87+2/24=6-Mar-87and2hrs add15secondsto6-Mar-87 6-Mar-87+15/(24*60*60)=6-Mar-87and15secs 列名的别名 selectenameemployeefromemp wher
4、edeptno=10; (别名:employee) selectename,sal,comm,comm/salC/SRATIOfromemp wherecomm.05*sal orderbycomm/saldesc; SQL命令的编辑 listorl显示缓冲区的内容 list4显示当前SQL命令的第4行,并把第4行作为当前行,在该行号后面有个*。 changeorc用新的内容替换原来在一行中第一次出现内容 SQLc/(.)/(analyst)/ inputori增加一行或多行 appendora在一行后追加内容 del删除当前行删除SQL缓冲区中的当前行 run显示并运行SQL缓冲区中的命令
5、/运行SQL缓冲区中的命令 edit把SQL缓冲区中的命令写到操作系统下的文本文件, 并调用操作系统提供的编辑器执行修改。 - 3数据操纵 数据的插入 insertintodept values(10,accounting,newyork); insertintodept(dname,deptno) values(accounting,10); 从其它表中选择插入数据 insertintoemp(empno,ename,deptno) selectid,name,department fromold_emp wheredepartmentin(10,20,30,40); 使用参数 insert
6、intodept values(&deptno,&dname,&loc); 执行时,SQL/PLUS对每个参数将有提示用户输入 参数对应日期型或字符型数据时,可在参数上加引号,输入时就可不用引号 insertintodept values(&deptno,&dname,&loc); 插入空值(NULL) insertintodept values(50,education,null); 插入日期型数据 日期型数据缺省格式:DD-MON-YY insertintoemp (empno,ename,hiredate) values(7963,stone,07-APR-87); 系统时间:SYSDA
7、TE insertintoemp (empno,ename,hiredate) values(7600,kohn,SYSDATE); 数据更新 updateemp setjob=manager whereename=martin; updateemp setjob=marketrep whereename=salesman; updateemp setdeptno=40,job=marketrep wherejob=salesman; 数据删除 deleteemp whereempno=765; 更新的提交 commit 自动提交方式 setautocommiton 如果状态设为开,则使用in
8、esrt,update,delete会立即提交。 更新取消 rollback 两次连续成功的commit之间的操作,称为一个事务 - 4创建基表、视图 创建基表 createtabledept (deptnonumber(2), dnamechar(14), locchar(13); 数据字典会自动更新。 一个基表最多254列。 表名列名命名规则: 限制 第一个字符必须是字母,后面可任意(包括$#_但不能是逗号)。 名字不得超过30个字符。 唯一 某一用户的基表名必须唯一,不能是ORACLE的保留字,同一基表的列名互不相同。 使用双引号 如果表名用双引号括起来,则可不满足上述规则; 只有使用双
9、引号,才能区别大、小写; 命名时使用了双引号,在以后的操作也必须使用双引号。 数据类型: char(n)(不得超过240字符) number(n,d) date long(最多65536字符) raw(二进制原始数据) 空值处理 有时要求列值不能为空 createtabledept (deptnonumber(2)notnull, dnamechar(14), locchar(13); 在基表中增加一列 altertabledept add(headcntnumber(3); 修改已有列属性 altertabledept modifydnamechar(20); 注:只有当某列所有值都为空时,
10、才能减小其列值宽度。 只有当某列所有值都为空时,才能改变其列值类型。 只有当某列所有值都为不空时,才能定义该列为notnull。 例: altertabledeptmodify(locchar(12); altertabledeptmodifylocchar(12); altertabledeptmodify(dnamechar(13),locchar(12); 创建视图 createviewmanagersas selectename,job,sal fromemp wherejob=manager; 为视图列名取别名 createviewmydept (person,title,salar
11、y) asselectename,job,sal fromemp wheredeptno=10; withcheckoption选项 使用withcheckoption,保证当对视图插入或更新数据时, 该数据必须满足视图定义中select命令所指定的条件。 createviewdept20as selectename,job,sal,deptno fromemp wheredeptno=20 withcheckoption; 在做下述操作时,会发生错误 updatedept20 setdeptno=30 whereename=ward; 基表、视图的拷贝 createtableemp2 ass
12、elect*fromemp; 基表、视图的删除 droptable表名 dropview视图名 - 5SQL*PLUS报表功能 SQL*PLUS的一些基本格式命令 columndeptnoheadingdepartment columnenameheadingname columnsalheadingsalary columnsalformat$99,999.00 ttitlesamplereportfor|hitechcorp btitlestrictlyconfidential breakondeptno computesumofsalondeptno run 表头和表尾 ttitlesa
13、mplereportfor|hitechcorp btitlerightstrictlyconfidential “|”表示换行,结尾不必加分号 选项有三种:leftrightcenter 使用TTITLE,系统将自动地在每页的顶部显示日期和页号。 TTITLET和BTITLE命令有效,直至重新设置表头或表尾,或退出SQL*PLUS。 下面命令使标题语句失效 TTITLEOFF BTITLEOFF 列名 column命令定义用于显示列名 若名字为一个单词,不必加引号 columnenameheadingemployee columnenameheadingemployee|name (|为换行
14、) 取消栏定义 columnenameclear 列的格式 columnenameformatA15 columnsalformat$9,999.99 columncommlikesal like子句,使得某一列的格式参照另一列格式,它拷贝列名及其格式 控制记录显示分组顺序 breakondeptno (不显示重复值) selectdeptno,ename fromemp orderbydeptno; (ORDERBY子句用于控制BREAK) 显示为 10clark niller 20smith scott 30allen blake 每次只有一个BREAK命令起作用,但一次可以在多个列上使用
15、BREAK命令 breakon列名1on列名2 记录分组 breakondeptnoskip2 selectdeptno,ename fromemp orderbydeptno; 每个deptno之间空两行 clearbreak(取消BREAK命令) breakonpage(每次从一新页开始) breakonreport(每次从一新报表开始) breakonpageonreport(联合使用) 分组计算 breakondeptnoskip2 computesumofsalondeptno 计算每个部门的工资总和 skip子句使部门之间的信息分隔开 其他计算命令 computeavgofsalo
16、ndeptno(平均值) count非空值的总数 MAX最大值 MIN最小值 STD标准偏差 VAR协方差 NUMBER行数 使compute命令失效 一旦定义了COMPUTE,则一直有效,直到 关闭COMPUTE(clearcompute) SQL/PLUS环境命令 show选项 (显示当前参数设置情况) showall(显示全部参数) 设置参数 set选项值或开关 setautocommiton SET命令包括 setautocommitoff|on|immediate (自动提交,OFF缺省) setechooff|on (命令文件执行,是否在终端上显示命令本身,OFF缺省) setfe
17、edbackoff|on (ON:查询结束时,给出结果,记录数的信息,缺省; OFF:无查询结果,记录数的信息) setheadingoff|on (ON:列的头标在报表上显示,缺省;OFF:不在报表上显示) setlinesizen 一行显示的最大字符数,缺省为80 setpagesizen 每页的行数,缺省是14 setpauseoff|on|text (ON:当报表超过一页时,每显示一屏就暂停显示,等待用户打回车键,再接着显示; OFF:页与页不停顿,缺省;text:页与页停顿,并向用户提示信息) SETBUFFERbuffer 设置当头的命令缓冲区,通常情况下,SQL命令缓冲区已为当前
18、缓冲区。 由于SQL命令缓冲区只能存放一条SQL命令, 所以可用其它缓冲区来存放SQL命令和SQL*PLUS命令。 经常用到的设置可放在login.sql文件中。 SETNULL setnullnodata selectename,comm fromemp wheredeptno=30; 把部门30中无佣金雇员的佣金显示为“NODATA”。 setnull是SQL*PLUS命令,用它来标识空值(NULL),可以设置为任意字符串。 存盘命令SAVE save文件名 input 1selectempno,ename,job 2fromemp 3wherejob=analyst saveresear
19、ch 目录中会增加一个research.sql文件。 编辑命令EDIT edit EDIT编辑当前缓冲区中的内容。 编辑一个文件 editresearch 调入命令GET getresearch 把磁盘上的文件内容调入缓冲区,并显示在屏幕上,文件名尾不必加.sql。 START命令 运行指定的文件 startresearch 输出命令SPOOL spooltryfile 不仅可以使查询结果在屏幕上显示,还可以使结果存入文件 停止向文件输出 spooloff 把查询结果在打印机上输出,先把它们存入一个文件中, 然后不必使用SPOOLOFF,而用: spoolout SPOOLOUT关闭该文件并在
20、系统缺省的打印机上输出 制作报表举例 edittryfile setechooff setautocommiton setpagesize25 insertintoemp(empno,ename,hiredate) values(9999,geiger,sysdate); insertintoemp(empno,ename,deptno) values(3333,samson,20); spoolnew_emp select*fromemp wheredeptno=20 ordeptnoisnull / spooloff setautocommitoff 用start命令执行这个文件 - 6函
21、数 字符型函数 initcap(ename);将ename中每个词的第一个字母改为大写。 如:jacksmith-JackSmith length(ename);计算字符串的长度。 substr(job,1,4); 其它 lower upper least取出字符串列表中按字母排序排在最前面的一个串 greatest取出字符串列表中按字母排序排在最后的一个串 日期函数 add_month(hiredate,5)在雇佣时间上加5个月 month_between(sysdate,hiredate)计算雇佣时间与系统时间之间相差的月数 next_day(hiredate,FRIDAY)计算受雇日期之
22、后的第一个星期五的日期 例 selectename,sal,next_day(sysdate,FRIDAY)as_of fromemp wheredeptno=20; (as_of是别名) 如果不用to_char函数,日期在ORACLE中的缺省格式是DD_MON_YY to_char(date,datepicture) selectename,to_char(hiredate,DyMondd,yyyy)hired fromemp wheredeptno=10; to_date(字符串,格式) insertintoemp(empno,ename,hiredate) values(7999,asms,to_date(070387083000,MMDDYYHHMISS); 日期型数据的格式 dd12 dyfri dayfriday ddspthtwelfth mm03 monmar monthmarch yy87 yyyy1987 例 Mar12,1987Mondd,yyyy
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1