魔乐在线Oracle笔记超经典_第1页
魔乐在线Oracle笔记超经典_第2页
魔乐在线Oracle笔记超经典_第3页
魔乐在线Oracle笔记超经典_第4页
魔乐在线Oracle笔记超经典_第5页
已阅读5页,还剩93页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、PAGE PAGE 97图表 SEQ 图表 * ARABIC 1多表查询的基本本语法查一张以上的表表,就叫做多多表查询例子:查询出雇雇员名称,部部门名称和部部门所在地的的(一般多表表查询要用别别名)统计记录数:查询emp有多多少条纪录左右连接(重点点)select e.emppno,e.enamee,d.deeptno,d.dnaame,d.locfromemp e,ddept dd wherre e.ddeptnoo=d.deeptno;部门一共四个,这这里只查询出出三个,因为为在雇员表中中没有指定440部门的雇雇员,所以在在消除笛卡尔尔乘机的时候候没有条件符符合40,如如果喜欢400部门显

2、示出出来,就要用用左右连接了了。select e.emppno,e.enamee,d.deeptno,d.dnaame,d.locfromemp e,ddept dd wherre e.ddeptnoo(+)=d.deptnno;(+)在左边,表表示以右边的的表为准,表表示右链接。40部门出来了了,所以此时时就用到了有有连接,证明明以下规律(+)在左表示示右连接(+)在右表示示左连接.SQL:19999对SQQL的支持(了了解)范例:交叉连接接(crosss jooin)产生生笛卡尔积select * frrom emmpt CRROSS JJOIN ddept;查询结果 产生生笛卡尔积CRE

3、ATE TABLEE EMP110 AS SELECCT * FFROM EEMP WHHERE DDEPTNOO=10;select * froom empp NATUURAL JOOIN deept; 自自动进行匹配配范例:USINNG子句,直直接关联的操操作列select * froom empp e JOOIN deept d USINGG (depptno) wheree depttno=300;把两张表的详细细信息进行打打印输出范例:ON子句句 自己编编写连接条件件select * froom empp e JOOIN deept d ON (e.depttno=d.deptnno

4、) whhere e.depptno=330;范例:左连接(左左外连接)右右连接(右外外连接)LEEFT JOOIN RIGHTT JOINN组函数和分组统统计(重点)组函数在SQL常用组组函数有如下下几个:COUNT()求全部记录录数MAX()求最最大记录数MIN()求最最小记录数AVG()平均均SUM()求和和分组统计Group byselect deptnno,COUUNT(emmpno) from emp GROUPP BY ddeptnoo;算出部门表的平平均工资:select AVG(ssal) ffrom eemp ;算出每个部门的的平均工资:Select deptnno,AVG

5、G(sal) fromm emp ;之所以会出现现这个错误是是因为数据库库不知道怎样样在结果集中中处理depptno列。考考虑一下:这这个查询既试试图使用AVVG聚合函数数对多 行记记录进行操作作,却又试图图从每行中获获得depttno列的值值;这两个操操作是不可能能同时完成的的。此时必须须提供一个GGROUP BY子句告告诉数据库将将deptnno列相同的的行分组在一一起,然后数数据库就可以以将这些组中中的行传递给给AVG函数数。警告:如果查询中包含含聚合函数,而而所选择的列列并不在聚合合函数中,那那么这些列就就必须在GRROUP BBY子句中。按部门分组,并并显示部门名名称,以及部部门员工

6、数select d.dnaame,coount(ee.empnno) from dept d,empp ewhere dd.depttno=e.deptnno GROUP BBY d.ddname;要求查出平均工工资大于20000的部门门编号和平均均工资select deptnno,AVGG(sal) fromm emp WHEREE AVG(sal) 20000 GROUUP BY deptnno;之所以会出现现这个错误是是因为WHEERE子句只只能用来对单单行而不是行行组进行过滤滤。要过滤行行组,可以使使用HAVIING子句。范例:显示非销销售人员工作作名称以及从从事同一工作作雇员的月工工

7、资的总和,并并且要满足从从事同一工作作的雇员的月月工资合计大大于¥50000。输出结结果按月工资资的合计升序序排列1.显示全部的的非销售人员员:jobSALESSMANselect * froom empp wherre jobbsaalesmaan;2.按工作分组组同时求出工工资的总和Select job,SSUM(saal) frrom emmp WHEERE joobSALESSMAN GROUUP BY job; 3.对分组条件件进行限制Select job,SSUM(saal) frrom emmp WHEERE joobSALESSMAN GROUUP BY job HHAVING

8、G SUM(sal)5000; 4.使用排序,按按升序排列Select job,SSUM(saal) suu fromm emp WHEREE jobSALESSMAN GROUUP BY job HHAVINGG SUM(sal)5000 orderr by ssu; 分组的简单原则则:只要一列上存在在重复的内容容才考虑用分分组注意:分组函数数可以嵌套使使用,但是在在组函数嵌套套的时候不能能再出现分组组条件的查询询语句范例:求出平均均工资最高的的部门错误代码:Select deptnno,MAXX(AVG(sal) fromm emp GROUPP BY ddeptnoo;Select MA

9、X(AAVG(saal) ffrom eemp GRROUP BBY depptno;(正确)子查询范例:要求查询询出比76554工资高的的全部雇员信信息首先:要知道77654雇员员的工资是多多少然后:以此查询询结果为查询询依据,只要要其他工资大大于sal,则则表示符合条条件首先:查询出比比7654工工资高的全部部雇员信息select * froom empp wherre sall(sellect ssal frrom emmp wheere emmpno=77654);其次:与77888工作一样样Select job ffrom eemp whhere eempno=7788所以:sele

10、ect * from emp wwhere sal(selecct sall fromm emp wheree empnno=76554) annd jobb= (Selectt job from emp wwhere empnoo=77888); ;数据库更新操作作数据库的主要操操作分为两种种:1.数据库的的查询操作SSELECTT2.数据库的的更新操作 uUPDAATE, DDELETEE, INSSERT 此时为了保存原原始的empp表的信息,在在进行更新 删除 插入入表前先将表表复制一份Create tablee myemmp AS selecct * ffrom eemp;此时数据已

11、经复复制出来添加数据Insert into emp(eempno,enamee,job,hireddate,ssal ,ddeptnoo)Values (78999,张三,清洁工,20-2月月-20000,90000, 40);使用简略写法(并不推荐),因为现在在是要添加所所有字段的内内容,所以可可以不写上任任何字段名称称,只要值的的数量和顺序序和数据库表表中的顺序一一致。Insert into myempp valuues(78899,张三,清洁工,90000, 40);之前插入数据的的时候,日期期的格式是使使用了表中固固定好的格式式,如果现在在有这样一个个日期”2009-10-100”日期

12、格式,那那么现在如何何把这种格式式的日期插入入进去呢?使用TO_DAATE()函函数,将一个个字符串类型型的数据变为为DATE类类型的数据。Insert into myempp(empnno,enaame,joob,hirredatee,sal ,depttno)Values (78999,张三,清洁工,TO_DDATE(2009-07-199,yyyy-mm-ddd),90000, 400);修改数据UPDATE 表名称 sset 要修修改的字段=新值,要修修改的字段=新值.;UPDATE 表名称 sset 要修修改的字段=新值,要修修改的字段=新值WHEREE 修改条件件.;修改数据删除全

13、部: DDELETEE FROMM 表名称 局部删除: DDELETEE FROMM 表名称 WHEREE 删除条件件;事物处理范例:创建一张张只包含100部分雇员的的一张临时表表CREATE TABLEE EMP110 AS SELECCT * FFROM EEMP WHHERE DDEPTNOO=10;打开一个oraacle终端端,进行删除除操作DELETE FROMM EMPP10 WWHERE SAL=22450;显显示已经删除除然后再打开另外外一个oraacle终端端,查询到ssal=24450这条数数据还在,证证明这条数据据并没有被删删除,这就是是oraclle事务的概概念。事务处

14、理: 就就是保证数据据操作的完整整性,所有的的操作要么同同时成功要么么同时失败。在ORACLEE中对每一个个连接到数据据库中的窗口口,都会与数数据库建立一一个Sesssion。一一个Sesssion对数数据库所做得得修改不会马马上反应到数数据库的真实实数据之上。是是允许回滚的的,当一个SSessioon提交所有有操作之后,数数据库才真正正做出修改。进行同样的删除除操作DELETE FROMM EMPP10 WWHERE SAL=22450;结果它停住了,等等待第一个终终端操作结束束再动。这就就是ORACCLE死锁提交事务:COOMMIT 回滚:RoollbackORACLE常常用命令查看所有表

15、select tablle_namme frrom user_tablees;显示表结构describbe nchhar_tsst(nchhar_tsst为表名)查询练习1.列出至少有有一个员工的的所有部门信信息第一步: 列列出所有部门门的员工数量量Select deptnno ,coount(eempno) fromm emp groupp by ddeptnoo;第二步:列出员员工大于1的的部门 Selectt depttno ,ccount(empnoo) froom empp grouup by deptnno HAVVING CCOUNT(empnoo)1;第三步:通过多多表关联查,

16、把把子查询做为为一个查询出出来select d.*,eed.couuFROM deept d,(SELEECT deeptno,COUNTT(empnno) coou FROOM emppGROUP BBY depptno HHAVINGG COUNNT(emppno)11) ed WHERE dd.depnno=ed.deptnno ;2.列出薪金比比SMITHH多的所有员员工第一步:求出ssmith的的工资SELECT salFFROM EEMP WHHERE EENAME=SMITHH;第二步:select enamee fromm emp wheree sal( SELLECT ssa

17、lFRROM EMMP WHEERE ENNAME=SMITHH);3 列出所有员员工姓名及其其直接上级的的姓名此程序属于自身身关联查询SELECT e.enname, d.enaame FRROM emmp e ,emp dd wherre e.mgrr=d.emmpno;4. 列出受雇雇日期早于其其直接上级的的所有员工的的编号,姓名名,部门名称称自身关联,查找找mgr=eempno的的同时还要比比较Hireedate第一步:SELLECT ee.empnno,e.eenameFROM emmp e, emp mm WHERRE e.mmgr=m.empnoo AND e.hirredate

18、em.hiiredatte;查找e表的直属领导编号等于m表的员工,也就是说m表是领导表,m表的雇佣日期晚于e表第二步:查找e表的直属领导编号等于m表的员工,也就是说m表是领导表,m表的雇佣日期晚于e表SELECT e1.emmpno,ee1.enaame,d.dnamee FROM (SELECTT e.emmpno,ee.enammeFROM emmp e, emp mm WHERRE e.mmgr=m.empnoo AND e.hirredateem.hiiredatte) e11,deptt dWHERE ee1.depptno=dd.depttno;ORA-009904 innvali

19、dd idenntifieer 这个错错误是因为 字段名写错错了 检查下下字段名,发发现e1表的的查询结果没没有depttno字段,所以报错了了!SELECT e1.emmpno,ee1.enaame,d.dnamee FROM (SELECTT e.emmpno,ee.enamme,e.ddeptnooFROM emmp e, emp mm WHERRE e.mmgr=m.empnoo AND e.hirredateem.hiiredatte) e11,deptt dWHERE ee1.depptno=dd.depttno;李兴华给出的标标准答案是:SELECT e.emppno,e.ena

20、mee,d.dnname FFROM emp ee, empp m, ddept ddWHERE e.mgrr=m.emmpno AND ee.hireedate15000 GRROUP BY job;结果出来,但是是是错的。李兴华分析一:按工作作分组,分组组条件最低工工资大于15500SELECT job, MIN(ssal) FFROM eemp GRROUP BBY jobb HAVVING MMIN(saal) 11500;分析二:SELECT e.jobb,COUNNT(e.eempno) FROMM emp e WHHERE ee.job IN( SEELECT job FFROM

21、 eemp GRROUP BBY jobb HAVVING MMIN(saal)15500 ) GROUPP BY ee.job;列出在部门”SSALES”(销售部)工作的员工工的姓名,假假定不知道销销售部的部门门编号1.Selecct depptno ffrom ddept wheree dnamme= SALEES; 将第一步骤作为为条件写子查查询2.selecct enaame ffrom eemp whhere ddeptnoo=( Selecct depptno ffrom ddept wheree dnamme=SALESS);9. 列出薪金金高于公司平平均薪金的所所有员工,所所在

22、部门,上上级领导,公公司的工资等等级。1.算出平均均工资: SSelectt AVGG(sal) froom emmp 2. seleect * fromm emp wheree sal( Selectt AVGG(sal) froom emmp);答案:第一步求求出公司的平平均工资-11,第二步:列出薪金高高于平均工资资的所有雇员员的信息-22第三步:要求所所在部门肯定定要与部门表表关联查所在部部门的信息,3. SELEECT e.*,d.ddname,d.locc FROMM emp e,deppt d WWHERE sal(SELECCT AVGG(sal) FROMM emp ) AN

23、DD e.deeptno=d.depptno;第四步要想查询询上级领导肯肯定要与自身身关联4.SELEECT e.empnoo,e.enname,mm.enamme,d.ddname,d.depptno,dd.loc FROM emp ee,deptt d,emmp m WHERE ee.sal(SELEECT AVVG(sall) FROOM empp ) ANND e.ddeptnoo=d.deeptno AND e.mgr=mm.empnnoe.mgr=m.empnoe表的领导编号等于m表的员工编号,emp表自身关联m表的员工=e表的领导,所以m.ename就是:领导”。e.mgr=m.

24、empnoe表的领导编号等于m表的员工编号,emp表自身关联m表的员工=e表的领导,所以m.ename就是:领导”。第五步:求出雇雇员的工资等等级SELECT e.emppno,e.enamee,s.grrade,mm.enamme,d.ddname,d.depptno,dd.loc FROM emmp e,ddept dd,emp m,sallgradee s WHERE ee.sal(SELEECT AVVG(sall) FROOM empp ) ANND e.ddeptnoo=d.deeptno AND ee.mgr=m.emppno(+) ANDD e.saal BETTWEEN s.

25、lossal ANND s.hhisal工资属于这个区间内表示这个等级。;工资属于这个区间内表示这个等级。10 列出与”SCOTTT” 从事相同同工作的所有有员工及部门门的名称。(dims)第一步:SELLECT jjob FRROM emmp e wwhere e.enaame=SCOTTT; 第二步:SELLECT ee.enamme, d.dnamee FROOM empp e ,ddept ddwhere ee.job=( SELLECT jjob FRROM emmp e wwhere e.enaame=SCOTTT)AND e.eenameSCOTTT ANDD e.deeptno

26、=d.depptno;11 列出薪金金等于部门330中员工的的薪金的所有有员工的姓名名和薪金(dims)SELECT e.enaame,e.sal FFROM eemp e wheree sal IN(SELECTT sal FROM emp wwhere deptnno=30) AND deptnno300;合理的情况是没有deptno=30的合理的情况是没有deptno=30的12 列出薪金金高于在部门门30工作的的所有员工的的薪金的员工工姓名和薪金金.,部门名名称Select sal ffrom eemp whhere ssal (MAX(SSELECTT sal FROM emp ww

27、here deptnno=30);答案: 在之前前的程序改,使用ALLL比最大的的还要大SELECT e.enaame,e.sal,dd.dnamme,d.lloc FRROM emmp e ,dept d wheere saal ALLL(SELECTT sal FROM emp wwhere deptnno=30) AND e.depptno30 ANND e.ddeptnoo=d.deeptno;13 列出在每每个部门工作作的员工数量量,平均工资资和平均服务务期限第一步查询出每每个部门的员员工数量:SSELECTT d.dnname,CCOUNT(empnoo) FROOM empp e

28、 ,ddept dd WHERRE e.ddeptnoo=d.deeptno GROUPP BY dd.dnamme;答案:在第一步步的基础上,第二步要读读出平均工资资和服务期限:尝尝试:SELECT d.dnaame,COOUNT(eempno),AVG(e.sall), AVVG(e.hhiredaate) FROM emmp e ,dept d WHEERE e.deptnno=d.ddeptnoo GROUUP BY d.dnaame;SELECT d.dnaame,COOUNT(eempno),AVG(e.ssal), AVG(MMONTHSS_BETWWEEN(ssysdatte,

29、e.hhiredaate)/112) 年FROM emmp e ,dept d WHEERE e.deptnno=d.ddeptnoo GROUUP BY d.dnaame;oracle中中的montths_beetweenn(datee1,datte2)函数数可以实现年年龄的计算,此此函数的返回回值为datte1与daate2之间间的月数, 比如monnths_bbetweeen(20008-8-88,20055-4-8)执行的结果果是40(执执行“sellect mmonthss_betwween(2008-8-8,20055-4-8) froom duaal;”不包包括双引号)。ddat

30、e1和和date22都是DATTE类型的,用用SYSDAATE可以获获得系统时间间,用现在的的时间减去变变量中的时间间再与年龄总总月 数比较较即可实现这这一功能。14 列出所有有员工的姓名名,部门名称称和工资(ddims)Select e.enaame,d.dnamee,e.saal froom empp e,deept d wheree e.deeptno=d.depptno; 15 列出所有有部门的详细细信息和部门门人数第一步: 这种种题型肯定是是多表关联子子查询,首先先列出部门的的人数SELECT deptnno dnoo, COUUNT(emmpno) cou FROM emp GGR

31、OUP BY deeptno第二步:把以上上的结果当成成一张临时表表出现;SELECT d.*,eed.couu FROOM deppt d,(SELECCT depptno ddno,COOUNT(eempno) cou FROM emp CCROUP BY deeptno ) ed WHEREE d.deeptno=ed.dnno;16 列出各种种工作的最低低工资及从事事此工作的雇雇员姓名1查找工资最最低的工作:SELECCT jobb,MIN(sal) FROM emp GGROUP BY joob;2SELECCT e.eename,e.jobb,cou.minsaal FROOM (

32、SELECTT job,MIN(ssal) mminsall, emppno FRROM emmp GROOUP BYY job) cou,emp ee WHERRE e.eempno= cou.empnoo ;ORA-00979: 不是 GROUP BY 表达式.错误答案:ORA-00979: 不是 GROUP BY 表达式.错误SELECT *FROOM emppWHERE ssal INN(SELEECT MIIN(sall) FROOM empp GROUUP BY job);17 列出各个个部门的MAANAGERR(经理)的的最低薪金(dims)Select d.dnaame,MII

33、N(e.ssal)From emmp e ,dept dWhere ee.depttno=d.deptnno ANDD e.joob=MANAGGER grouup by d.dnaame;18 列出所有有员工的年工工资,按年薪薪从低到高排排序在处理年薪的时时候,要处理理奖金,奖金金要使用NVVL函数处理理SELECT enamee,(sall+NVL(comm,0)*112 inccome FFROM eempORDER BBY inncome;19 查出某个个员工的上级级主管,并要要求出这些主主管中的薪水水超过30000SELECT DISTTINCT m.* FFROM eemp e,e

34、mp mmWHERE ee.mgr=m.emppno ANND m.ssal30000;20 求出部门门名称中,带带s字符的部门门员工的工资资合计,部门门人数查询部门表的部部门名称,使使用模糊查询询,以确定部部门的编号SELECT deptnno FROOM deppt WHEERE dnname LLIKE %S%;以上面的结果作作为查询的条条件SELECT deptnno,SUMM(sal),COUNNT(emppno) FFROM eemp WHHERE deptno IN (SSELECTT depttno FRROM deept WHHERE ddname like %S%) GRR

35、OUP BBY depptno;21 给任职日日期超过100年的人加薪薪10%UPDATE emp SSET saal=sall+(sall*0.1)WHERE MMONTHSS_BETWWEEN(ssysdatte,hirredatee)/12 10;创建表和管理表表(重点)ORACLE 复制表的语语法:CREEATE TTABLE 表名称 AAS(子查询询)如果现在子查询询写的是:SSELECTT *FRROM emmp 表示将将表结构和内内容一起复制制如果现在子查询询写的是:SSELECTT * FRROM emmp WHEERE 1=2; 加加入一个永远远不可能成立立的条件,表表示只是

36、复制制表结构不复复制表内容。CREATE TABLEE persson_f(Pid VAARCHARR(18),Name VARRCHAR(200),Age NUUMBER(3),Birthdday DDATE,SEX VARRCHAR(2) DEFAUULT 男);表的删除DELETE TABBLE 表名称范例:删除peerson表表 : DELETTE TABBLE peerson;表的修改范例:为perrson表增增加addrress列ALTER TTABLE persoon ADDD( adddress VARCHHAR(2000) DEEFAULTT 暂无地址);为表重命名在Orac

37、lee中提供了RRENAMEE命名,可以以为表重新命命名,但是此此语法只能在在Oraclle中使用语法格式: RENAMME 旧的表表名称 TTO 新的的表名称范例:将perrson 重重新命名为了了 tperrsonRENAME persoon TO miaoffang;思考题分析:这是一道道面试题,只只能用笛卡尔尔乘机:Select e.couuntry,d.couuntry from counttry d ,counntry ee wheere e.counttrydd.counntry;约约束约束的分类:主键约束(PPRIMARRY KEEY)主键约束一般般都在id上上使用,而且且本身

38、已经默默认了内容不不能为空,主主键约束可以以在建表的时时候指定:范例:建立peerson表表,在pidd上增加主键键约束CREATE TABLEE persson(Pid VAARCHARR(18) PRIMMARY KEY,Name VARRCHAR(200),Age NUUMBER(3),Birthdday DDATE,SEX VARRCHAR(2) DEFAUULT 男);insert into persoon vallues(nnull,柯为权,1123,TOO_DATEE(2009-07-199,yyyy-mm-ddd),男);主键为空或者重重复都会报错错范例:将perrson中的的

39、pid指定定名称CREATE TABLEE persson_a(Pid VAARCHARR(18) ,Name VARRCHAR(200),Age NUUMBER(3),Birthdday DDATE,SEX VARRCHAR(2) DEFAUULT 男,CONSTRRAINT perrson_ppid_pkk PRIIMARY KEY(ppid);Constraaint knnstreent:约束;限制 HYPERLINK /s?wd=constraint person_pid_ppk:表示约约束的名称非空约束(noot nuull)CREATE TABLEE persson_a(Pid V

40、AARCHARR(18) NOT NNULL ,Name VARRCHAR(200) NOT NULL,Age NUUMBER(3),Birthdday DDATE,SEX VARRCHAR(2) DEFAUULT 男,CONSTRRAINT perrson_ppid_pkk PRIIMARY KEY(ppid);表示插入了两个个非空约束的的声明,证明明此时PIDD跟namee是不允许为为空的。唯一约束(UNNIQUE)表示一个字段中中的内容是唯唯一的,其他他列不允许重重复CREATE TABLEE persson_a(Pid VAARCHARR(18) NOT NULL ,Name VARR

41、CHAR(200) UNIQQUE NNOT NUULL,Age NUUMBER(3),Birthdday DDATE,SEX VARRCHAR(2) DEFAUULT 男,CONSTRRAINT perrson_ppid_pkk PRIIMARY KEY(ppid);表示姓名唯一。检查约束 (CCHECK)使用检查约束来来判断一个列列中插入的内内容是否合法法,例如:年年龄,性别的的取值范围。CREATE TABLEE persson_a(Pid VAARCHARR(18) NOT NULL ,Name VARRCHAR(200) NOT NULL,Age NUUMBER(3) CHECKK(

42、 agee BETWWEEN 00 ANDD 1550),Birthdday DDATE,SEX VARRCHAR(2) DEFAUULT 男 CHECCK( seex I NN (男,女,中性),CONSTRRAINT perrson_ppid_pkk PRIIMARY KEY(ppid);修改约束(了解解)一张表建立完成成之后,则可可以为其添加加约束DROP TAABLE ppersonn CASCCADE CCONSTRRAINT;CREATE TABLEE persson(Pid VAARCHARR(18) PRIMMARY KEY,Name VARRCHAR(200),Age NUU

43、MBER(3),Birthdday DDATE,SEX VARRCHAR(2) DEFAUULT 男);此时,需要为为表中添加若若干个约束,添添加约束的语语法如下:ALTER TTABLE 表名称 AADD COONSTRAAINT 约束名称 约束类型型(约束字段段);关于约束类型的的命名一定要要统一:PRIMARYY KEY:主键字段_PKUNIQUE:字段_UKKCHECK:字字段_CKFOREIGNN KEY:父字段_子子字段_FKKALTER TABLEE perrson ADD CONSTTRAINTT perrson_ppid_PKK PRRIMARYY KEY(pid);ALTE

44、R TABLEE perrson ADD CONSTTRAINTT perrson_nname_UUK UNNIQUE(pid);ALTER TTABLE persoon ADDD CONSSTRAINNT perrson_aage_CKK CHECCK(agee BETWWEEN 00 AND 150);ALTER TABLEE perrson ADD CONSTTRAINTT persson_seex_CK CHECKK(sex IN (男,女,中);ROWNUM(重点)ROWNUMM:表示行号号,实际上此此是一个列,但是这个列列是一个伪列列,此列可以以在每张表中中出现。范例:在查询雇雇员

45、表上,加加入ROWNNUMSELECT ROWNUUM, emmpno,eename,job,ssal,hiiredatte FROOM empp;从运行上看,RROWNUMM本身采用自自动编号的形形式出现,有有什么用处呢呢?例如,现在假设设只想显示前前5条记录。条条件中:ROOWNUM=5SELECT ROWNUUM,emppno,enname,jjob,saal,hirredatee FROMM emp WHEREE ROWNNUM 110000000在这里,我我们不能用wwhere来来筛选超过110000000的地区,因因为表中不存存在这样一条条记录。相反反,HAVIING子句可可以让我

46、们筛筛选成组后的的各组数据oracle常常见问题1.在打开PPL/SQLL deveelop的时时候 回弹出出: ORA-121700: TNNS: 连接接超时关闭掉杀毒跟防防火墙都无法法解决:点Net Maanagerr -设置好主机名,也也可以设置IIP 地址,但但是每次都要要重新设置。Ok成功功解决!2查找SQLL/PL生成成下一个序列列号在Oraclee库中查询出出下个自动生生成的id号号3. ORA-009044 invaalid iidentiifier解解决办法,字字段名错误ORA-009904 innvalidd idenntifieer 这个错错误是因为 字段名写错错了 检查

47、下下字段名3. oraccle100g安装成成功之后。sscott用用户被锁定问问题原因:默认Orracle110g的sccott不能能登陆。解决决:(1)cconn ssys/syys as sysdbba;/以以DBA的身身份登录(22)alteer useer scoott acccountt unloock;/ 然后解锁锁(3)coonn sccott/ttiger /弹出一一个修改密码码的对话框,修修改一下密码码就可以了具具体操作步骤骤如下:C: sqllplus请请输入用户名名:sys输输入口令:ssys ass sysddba /注意:在口口令这里输入入的密码后面面必须要跟上上

48、as ssysdbaa 才可以。SQL alter user scott account unlock; 用户已更改.SQL commit; 提交完成.SQL conn scott/tiger更改scott口令新口令:tiger重新键入新口令:tiger口令已更改已连接。/完成。4. oraccle连接其其他地址的库库在oraclee安装目录下下的:C:oraccleprroductt10.22.0dbb_1NEETWORKKADMIIN的tnsnaames.oora 文件件# tnsnaames.oora Neetworkk Conffiguraation File: C:ooracleep

49、rodduct110.2.00db_11netwworkaadmintnsnaames.ooratnsnamees.oraa# Generrated by Orracle confiigurattion ttools.ORCL = (DESCCRIPTIION = (ADDDRESSS = (PPROTOCCOL = TCP)(HOST = loccalhosst)(POORT = 1521) (COONNECTT_DATAA = (SERVEER = DDEDICAATED) (SERVIICE_NAAME = orcl) ) )EXTPROCC_CONNNECTIOON_DATTA = (

50、DESCCRIPTIION = (ADDDRESSS_LISTT = (ADDREESS = (PROTTOCOL = IPCC)(KEYY = EXXTPROCC1) ) (COONNECTT_DATAA = (SID = PLSEExtProoc) (PRESEENTATIION = RO) ) )orcl74= (DESCCRIPTIION = (ADDDRESSS_LISTT = (ADDREESS = (PROTTOCOL = TCPP)(HOSST = 110.2499.254.74)(PPORT = 15211) ) (COONNECTT_DATAA = (SERVIICE_NA

51、AME = orcl) ) ) 这就是对应地址4这就是对应地址4的配置如果要连接jdbc.urrl =jddbc:orracle:thin:10.2249.2554.74:1521:orclpool.urrl=jdbbc:oraacle:tthin:zzhmwc/zhgmccc&$110.2499.254.74:15521:orrcljdbc.ussernamme =zhhmwcjdbc.paassworrd =zhhgmcc&$oracle权权限问题在用SCOTTT用户创建视视图的时候出出现解决办法是:首先在开始运行sqlpplus,然然后输入 ssys/chhange_on_innstal

52、ll as ssysdbaa以sys权限登登陆进去然后可以进行操操作:grant ccreatee any vieww to SCCOTT;/把创建建视图的权限限赋给scoott;在用scottt登入:select * froom useer_syss_privvs;这样就可以知道道当前用户的的权限常用的赋权命令令:1.创建用户 creatte useer tesst inddentiffied bby tesst;这样就创建了一一个用户名密密码都为teest的用户户2.登录权限ggrant creatte sesssion to teest;这样test用用户就能成功功登陆进去3. 建表权限限grantt creaate taable tto tesst;4 .使用表空空间权限grrant uunlimiited ttablesspace to teest;5. 查询当前前用户的系统统权限:seelect * froom useer_syss_privvs;这样就可以知道道当前用户的的权限撤销权限 reevoke creatte tabble frrom teest;-创建用户create user keelttest iidentiified by keeeltesst;分配所

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论