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

下载本文档

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

文档简介

1、PAGE PAGE 68图表 SEQ 图表 * ARABIC 1多表查询的的基本语法法查一张以上上的表,就就叫做多表表查询例子:查询询出雇员名名称,部门门名称和部部门所在地地的(一般般多表查询询要用别名名)统计记录数数:查询empp有多少条条纪录左右连接(重重点)selecct e.empnno,e.enamme,d.depttno,dd.dnaame,dd.loccfromemp ee,deppt d wherre e.depttno=dd.depptno;部门一共四四个,这里里只查询出出三个,因因为在雇员员表中没有有指定400部门的雇雇员,所以以在消除笛笛卡尔乘机机的时候没没有条件符符合4

2、0,如如果喜欢440部门显显示出来,就就要用左右右连接了。selecct e.empnno,e.enamme,d.depttno,dd.dnaame,dd.loccfromemp ee,deppt d wherre e.depttno(+)=d.depttno;(+)在左左边,表示示以右边的的表为准,表表示右链接接。40部门出出来了,所所以此时就就用到了有有连接,证证明以下规规律(+)在左左表示右连连接(+)在右右表示左连连接.SQL:19999对SQLL的支持(了了解)范例:交叉叉连接(ccrosss jooin)产产生笛卡尔尔积selecct * froom emmpt CCROSSS J

3、OIIN deept;查询结果 产生笛卡卡尔积CREATTE TAABLE EMP110 ASS SELLECT * FRROM EEMP WWHEREE DEPPTNO=10;selecct * fromm empp NATTURAL JJOIN deptt; 自动动进行匹配配范例:USSING子子句,直接接关联的操操作列selecct * fromm empp e JJOIN deptt d UUSINGG (deeptnoo) whhere depttno=330;把两张表的的详细信息息进行打印印输出范例:ONN子句 自己编写写连接条件件selecct * fromm empp e JJ

4、OIN deptt d OON (e.depptno=d.deeptnoo) whhere e.deeptnoo=30;范例:左连连接(左外外连接)右右连接(右右外连接)LLEFT JOINN RRIGHTT JOIIN组函数和分分组统计(重重点)组函数在SQL常常用组函数数有如下几几个:COUNTT()求全全部记录数数MAX()求最大记记录数MIN()求最小记记录数AVG()平均SUM()求和分组统计Groupp byyselecct deeptnoo,COUUNT(eempnoo) frrom eemp GROUUP BYY depptno;算出部门表表的平均工工资:selecct AVV

5、G(saal) ffrom emp ;算出每个部部门的平均均工资:Selecct deeptnoo,AVGG(sall) frrom eemp ;之所以会会出现这个个错误是因因为数据库库不知道怎怎样在结果果集中处理理depttno列。考虑一下下:这个查查询既试图图使用AVVG聚合函函数对多 行记录进进行操作,却却又试图从从每行中获获得depptno列列的值;这这两个操作作是不可能能同时完成成的。此时时必须提供供一个GRROUP BY子句句告诉数据据库将deeptnoo列相同的的行分组在在一起,然然后数据库库就可以将将这些组中中的行传递递给AVGG函数。警告:如果查询中中包含聚合合函数,而而所选

6、择的的列并不在在聚合函数数中,那么么这些列就就必须在GGROUPP BY子子句中。按部门分组组,并显示示部门名称称,以及部部门员工数数selecct d.dnamme,coount(e.emmpno) fromm deppt d,emp ewheree d.ddeptnno=e.depttno GROUPP BY d.dnname;要求查出平平均工资大大于20000的部门门编号和平平均工资selecct deeptnoo,AVGG(sall) frrom eemp WWHEREE AVGG(sall) 22000 GROUUP BYY depptno;之所以会会出现这个个错误是因因为WHEER

7、E子句句只能用来来对单行而而不是行组组进行过滤滤。要过滤滤行组,可可以使用HHAVINNG子句。范例:显示示非销售人人员工作名名称以及从从事同一工工作雇员的的月工资的的总和,并并且要满足足从事同一一工作的雇雇员的月工工资合计大大于¥50000。输输出结果按按月工资的的合计升序序排列1.显示全全部的非销销售人员:jobSALEESMANNselecct * fromm empp wheere jjobsallesmaan;2.按工作作分组同时时求出工资资的总和Selecct joob,SUUM(saal) ffrom emp WHERRE joobSALEESMANN GROOUP BBY jo

8、ob; 3.对分组组条件进行行限制Selecct joob,SUUM(saal) ffrom emp WHERRE joobSALEESMANN GROOUP BBY joob HAAVINGG SUMM(sall)50000; 4.使用排排序,按升升序排列Selecct joob,SUUM(saal) ssu frrom eemp WWHEREE jobbSALEESMANN GROOUP BBY joob HAAVINGG SUMM(sall)50000 oorderr by su; 分组的简单单原则:只要一列上上存在重复复的内容才才考虑用分分组注意:分组组函数可以以嵌套使用用,但是在在组

9、函数嵌嵌套的时候候不能再出出现分组条条件的查询询语句范例:求出出平均工资资最高的部部门错误代码:Selecct deeptnoo,MAXX(AVGG(sall) ffrom emp GROUUP BYY depptno;Selecct MAAX(AVVG(saal) fromm empp GROOUP BBY deeptnoo;(正确确)子查询范例:要求求查询出比比76544工资高的的全部雇员员信息首先:要知知道76554雇员的的工资是多多少然后:以此此查询结果果为查询依依据,只要要其他工资资大于saal,则表表示符合条条件首先:查询询出比76654工资资高的全部部雇员信息息selecct *

10、 fromm empp wheere ssal(seleect ssal ffrom emp wherre emmpno=76544);其次:与77788工工作一样Selecct joob frrom eemp wwheree emppno=77788所以:seelectt * ffrom emp wherre saal(sselecct saal frrom eemp wwheree emppno=77654) andd jobb= (Selecct joob frrom eemp wwheree emppno=77788); ;数据库更新新操作数据库的主主要操作分分为两种:1.数据据库的查

11、询询操作SEELECTT2.数据据库的更新新操作 uuUPDAATE, DELEETE, INSEERT 此时为了保保存原始的的emp表表的信息,在在进行更新新 删除 插入表前前先将表复复制一份Creatte taable myemmp ASS sellect * frrom eemp;此时数据已已经复制出出来添加数据Inserrt innto eemp(eempnoo,enaame,jjob,hhireddate,sal ,depptno)Valuees (77899,张三,清洁工,20-22月-20000,90000, 440);使用简略写写法(并不不推荐),因因为现在是是要添加所所有字段

12、的的内容,所所以可以不不写上任何何字段名称称,只要值值的数量和和顺序和数数据库表中中的顺序一一致。Inserrt innto mmyempp vallues(78999,张三,清洁工,90000, 440);之前插入数数据的时候候,日期的的格式是使使用了表中中固定好的的格式,如如果现在有有这样一个个日期”20099-10-10”日期格式式,那么现现在如何把把这种格式式的日期插插入进去呢呢?使用TO_DATEE()函数数,将一个个字符串类类型的数据据变为DAATE类型型的数据。Inserrt innto mmyempp(emppno,eenamee,jobb,hirredatte,saal ,d

13、deptnno)Valuees (77899,张三,清洁工,TO_DATEE(20099-07-19,yyyyy-mm-dd),90000, 40);修改数据UPDATTE 表名名称 seet 要修修改的字段段=新值,要要修改的字字段=新值值.;UPDATTE 表名名称 seet 要修修改的字段段=新值,要要修改的字字段=新值值WHERRE 修改改条件.;修改数据删除全部: DELLETE FROMM 表名称称 局部删除: DELLETE FROMM 表名称称 WHEERE 删删除条件;事物处理范例:创建建一张只包包含10部部分雇员的的一张临时时表CREATTE TAABLE EMP110 A

14、SS SELLECT * FRROM EEMP WWHEREE DEPPTNO=10;打开一个ooraclle终端,进进行删除操操作DELETTE FFROM EMPP10 WHERRE SAAL=24450;显显示已经删删除然后再打开开另外一个个oraccle终端端,查询到到sal=24500这条数据据还在,证证明这条数数据并没有有被删除,这这就是orraclee事务的概概念。事务处理: 就是保保证数据操操作的完整整性,所有有的操作要要么同时成成功要么同同时失败。在ORACCLE中对对每一个连连接到数据据库中的窗窗口,都会会与数据库库建立一个个Sesssion。一个Seessioon对数据据

15、库所做得得修改不会会马上反应应到数据库库的真实数数据之上。是允许回回滚的,当当一个Seessioon提交所所有操作之之后,数据据库才真正正做出修改改。进行同样的的删除操作作DELETTE FFROM EMPP10 WHERRE SAAL=24450;结果它停住住了,等待待第一个终终端操作结结束再动。这就是是ORACCLE死锁锁提交事务:COMMMIT 回滚:RooolbaackORACLLE常用命命令查看所有表表selecct ttablee_namme ffrom userr_tabbles;显示表结构构descrribe nchaar_tsst(ncchar_tst为为表名)查询练习1.列

16、出至至少有一个个员工的所所有部门信信息第一步: 列出所所有部门的的员工数量量Selecct deeptnoo ,coount(empnno) ffrom emp grouup byy depptno;第二步:列列出员工大大于1的部部门 Seleect ddeptnno ,ccountt(emppno) fromm empp grooup bby deeptnoo HAVVING COUNNT(emmpno)1;第三步:通通过多表关关联查,把把子查询做做为一个查查询出来selecct d.*,edd.couuFROM deptt d,(SELEECT ddeptnno,COOUNT(empnno

17、) ccou FFROM empGROUPP BY depttno HHAVINNG COOUNT(empnno)11) edd WHEREE d.ddepnoo=ed.depttno ;2.列出薪薪金比SMMITH多多的所有员员工第一步:求求出smiith的工工资SELECCT saalFRROM EEMP WWHEREE ENAAME=SMITTH;第二步:selecct enname fromm empp wheere ssal( SELLECT salFROMM EMPP WHEERE EENAMEE=SMITTH);3 列出所所有员工姓姓名及其直直接上级的的姓名此程序属于于自身关联联

18、查询SELECCT ee.enaame, d.enname FROMM empp e ,emp d whhere e.mggr=d.empnno;4. 列出出受雇日期期早于其直直接上级的的所有员工工的编号,姓名,部部门名称自身关联,查找mggr=emmpno的的同时还要要比较Hiiredaate第一步:SSELECCT e.empnno,e.enammeFROM emp e, eemp mm WHEERE ee.mgrr=m.eempnoo ANDD e.hhireddatem.hiiredaate;查找e表的直属领导编号等于m表的员工,也就是说m表是领导表,m表的雇佣日期晚于e表第二步:SE

19、LECCT e11.emppno,ee1.enname,d.dnname FROM (SELEECT ee.emppno,ee.enaameFROM emp e, eemp mm WHEERE ee.mgrr=m.eempnoo ANDD e.hhireddatem.hiiredaate) e1,ddept dWHEREE e1.depttno=dd.depptno;ORA-0009044 invvalidd ideentiffier 这个错误误是因为 字段名写写错了 检检查下字段段名,发现现e1表的的查询结果果没有deeptnoo字段,所所以报错了了!SELECCT e11.emppno,e

20、e1.enname,d.dnname FROM (SELEECT ee.emppno,ee.enaame,ee.depptnoFROM emp e, eemp mm WHEERE ee.mgrr=m.eempnoo ANDD e.hhireddatem.hiiredaate) e1,ddept dWHEREE e1.depttno=dd.depptno;李兴华给出出的标准答答案是:SELECCT e.empnno,e.enamme,d.dnamme FRROM emp e, eemp mm, deept ddWHEREE e.mgr=m.emmpno ANDD e.hhireddate1150

21、0 GROOUP BY joob;结果出来,但是是错错的。李兴华分析一:按按工作分组组,分组条条件最低工工资大于11500SELECCT joob, MMIN(ssal) FROMM empp GROOUP BBY joob HHAVINNG MIIN(saal) 15000;分析二:SELECCT e.job,COUNNT(e.empnno) FFROM emp e WWHEREE e.jjob IN( SELEECT jjob FFROM emp GROUUP BYY jobb HAAVINGG MINN(sall)15500 ) GROOUP BBY e.job;列出在部门门”SALEE

22、S”(销售部部)工作的的员工的姓姓名,假定定不知道销销售部的部部门编号1.Sellect depttno ffrom deptt whhere dnamme= SALLES; 将第一步骤骤作为条件件写子查询询2.sellect enamme ffrom emp wherre deeptnoo=( SSelecct deeptnoo froom deept wherre dnname=SALEES);9. 列出出薪金高于于公司平均均薪金的所所有员工,所在部门门,上级领领导,公司司的工资等等级。1.算出出平均工资资: Selecct AAVG(ssal) froom eemp 2. seelect

23、t * fromm empp wheere ssal( Selecct AAVG(ssal) froom eemp);答案:第一一步求出公公司的平均均工资-11,第二步步:列出薪薪金高于平平均工资的的所有雇员员的信息-2第三步:要要求所在部部门肯定要要与部门表表关联查所在在部门的信信息,3. SEELECTT e.*,d.ddnamee,d.lloc FFROM emp e,deept dd WHEERE ssal(SELEECT AAVG(ssal) FROMM empp ) AAND ee.depptno=d.deeptnoo;第四步要想想查询上级级领导肯定定要与自身身关联4.SEELEC

24、TT e.eempnoo,e.eenamee,m.eenamee,d.ddnamee,d.ddeptnno,d.loc FROMM empp e,ddept d,emmp m WHEREE e.ssal(SELEECT AAVG(ssal) FROMM empp ) AAND ee.depptno=d.deeptnoo ANDD e.mmgr=mm.emppnoe.mgr=m.empnoe表的领导编号等于m表的员工编号,emp表自身关联m表的员工=e表的领导,所以m.ename就是:领导”。(+);第五步:求求出雇员的的工资等级级SELECCT e.empnno,e.enamme,s.grad

25、de,m.enamme,d.dnamme,d.depttno,dd.locc FROM emp e,deept dd,empp m,ssalgrrade s WHEREE e.ssal(SELEECT AAVG(ssal) FROMM empp ) AAND ee.depptno=d.deeptnoo ANDD e.mmgr=mm.emppno(+) AAND ee.sall BETTWEENN s.llosall ANDD s.hhisall工资属于这个区间内表示这个等级。;10 列出出与”SCOTTT” 从事相相同工作的的所有员工工及部门的的名称。(dimss)第一步:SSELECCT j

26、oob FRROM eemp ee wheere ee.enaame=SCOTTT; 第二步:SSELECCT e.enamme, dd.dnaame FROMM empp e ,deptt dwheree e.jjob=( SELLECT job FROMM empp e wwheree e.eenamee=SCOTTT)AND ee.enaameSCOTTT ANND e.depttno=dd.depptno;11 列出出薪金等于于部门300中员工的的薪金的所所有员工的的姓名和薪薪金(dimss)SELECCT e.enamme,e.sal FROMM empp e wwheree sal

27、l IN(SELEECT ssal FFROM emp wherre deeptnoo=30) ANDD depptno30;合理的情况是没有deptno=30的12 列出出薪金高于于在部门330工作的的所有员工工的薪金的的员工姓名名和薪金.,部门名名称Selecct saal frrom eemp wwheree sall (MMAX(SSELECCT saal FRROM eemp wwheree depptno=30);答案: 在在之前的程程序改,使使用ALLL比最大大的还要大大SELECCT e.enamme,e.sal,d.dnname,d.looc FRROM eemp ee ,d

28、eept dd wheere ssal ALL(SELEECT ssal FFROM emp wherre deeptnoo=30) ANDD e.ddeptnno330 ANND e.depttno=dd.depptno;13 列出出在每个部部门工作的的员工数量量,平均工工资和平均均服务期限限第一步查询询出每个部部门的员工工数量:SSELECCT d.dnamme,COOUNT(empnno) FFROM emp e ,ddept d WHHERE e.deeptnoo=d.ddeptnno GRROUP BY dd.dnaame;答案:在第第一步的基基础上,第第二步要读读出平均工工资和服务

29、期限限:尝试:SELECCT d.dnamme,COOUNT(empnno),AAVG(ee.sall), AAVG(ee.hirredatte) FROM emp e ,ddept d WHHERE e.deeptnoo=d.ddeptnno GRROUP BY dd.dnaame;SELECCT d.dnamme,COOUNT(empnno),AVG(ee.sall), AAVG(MMONTHHS_BEETWEEEN(syysdatte,e.hireedatee)/122) 年FROM emp e ,ddept d WHHERE e.deeptnoo=d.ddeptnno GRROUP B

30、Y dd.dnaame;oraclle中的mmonthhs_beetweeen(daate1,datee2)函数数可以实现现年龄的计计算,此函函数的返回回值为daate1与与datee2之间的的月数, 比如moonthss_bettweenn(20008-8-8,20005-44-8)执执行的结果果是40(执执行“seelectt monnths_betwween(20008-8-8,20055-4-88) ffrom duall;”不包包括双引号号)。daate1和和datee2都是DDATE类类型的,用用SYSDDATE可可以获得系系统时间,用用现在的时时间减去变变量中的时时间再与年年龄总

31、月 数比较即即可实现这这一功能。14 列出出所有员工工的姓名,部门名称称和工资(dimss)Selecct e.enamme,d.dnamme,e.sal fromm empp e,ddept d whhere e.deeptnoo=d.ddeptnno; 15 列出出所有部门门的详细信信息和部门门人数第一步: 这种题型型肯定是多多表关联子子查询,首首先列出部部门的人数数SELECCT deeptnoo dnoo, COOUNT(empnno) ccou FROMM empp GROOUP BBY deeptnoo第二步:把把以上的结结果当成一一张临时表表出现;SELECCT d.*,edd.

32、couu FRROM ddept d,(SSELECCT deeptnoo dnoo,COUUNT(eempnoo) coou FRROM eemp CCROUPP BY depttno ) ed WHERRE d.depttno=eed.dnno;16 列出出各种工作作的最低工工资及从事事此工作的的雇员姓名名1查找工工资最低的的工作:SSELECCT joob,MIIN(saal) FFROM emp GROUUP BYY jobb;2SELLECT e.enname,e.joob,coou.miinsall FROOM (SELEECT jjob,MMIN(ssal) minssal, e

33、mpnno FRROM eemp GGROUPP BY job) couu,empp e WWHEREE e.eempnoo= coou.emmpno ;ORA-00979: 不是 GROUP BY 表达式.错误答案:SELECCT *FROMM emppWHEREE sall IN(SELEECT MMIN(ssal) FROMM empp GROOUP BBY joob);17 列出出各个部门门的MANNAGERR(经理)的最低薪薪金(diims)Selecct d.dnamme,MIIN(e.sal)From emp e ,ddept dWheree e.ddeptnno=d.deptt

34、no AAND ee.jobb=MANAAGER grooup bby d.dnamme;18 列出出所有员工工的年工资资,按年薪薪从低到高高排序在处理年薪薪的时候,要处理奖奖金,奖金金要使用NNVL函数数处理SELECCT enname,(sall+NVLL(commm,0)*122 inccome FROMM emppORDERR BY inccome;19 查出出某个员工工的上级主主管,并要要求出这些些主管中的的薪水超过过30000SELECCT DDISTIINCT m.* FRROM eemp ee,empp mWHEREE e.mmgr=mm.emppno AAND mm.sall

35、30000;20 求出出部门名称称中,带s字符的部部门员工的的工资合计计,部门人人数查询部门表表的部门名名称,使用用模糊查询询,以确定定部门的编编号SELECCT deeptnoo FROOM deept WWHEREE dnaame LLIKE %S%;以上面的结结果作为查查询的条件件SELECCT deeptnoo,SUMM(sall),COOUNT(empnno) FFROM emp WHERRE deptnno INN (SEELECTT depptno FROMM deppt WHHERE dnamme liike %S%) GGROUPP BY depttno;21 给任任职日期超

36、超过10年年的人加薪薪10%UPDATTE emmp SEET saal=saal+(ssal*00.1)WHEREE MONNTHS_BETWWEEN(sysddate,hireedatee)/122 100;创建表和管管理表(重重点)ORACLLE 复制制表的语法法:CREEATE TABLLE 表名名称 ASS(子查询询)如果现在子子查询写的的是:SEELECTT *FFROM emp 表示将表表结构和内内容一起复复制如果现在子子查询写的的是:SEELECTT * FFROM emp WHERRE 1=2; 加入一个个永远不可可能成立的的条件,表表示只是复复制表结构构不复制表表内容。CR

37、EATTE TAABLE persson_ff(Pid VARRCHARR(18),Namee VARCCHAR(200),Age NUMMBER(3),Birtthdayy DAATE,SEX VARCCHAR(2) DEFFAULTT 男);表的删除DELETTE TABLLE 表名称称范例:删除除persson表 : DELEETE TTABLEE perrson;表的修改范例:为ppersoon表增加加addrress列列ALTERR TABBLE ppersoon ADDD( aaddreess VVARCHHAR(2200) DEFAAULT 暂无地址址);为表重命名名在Oracc

38、le中提提供了REENAMEE命名,可可以为表重重新命名,但是此语语法只能在在Oraccle中使使用语法格式: REENAMEE 旧的表表名称 TO 新的表名名称范例:将ppersoon 重新新命名为了了 tpeersonnRENAMME peersonn TO miaoofangg;思考题分析:这是是一道面试试题,只能能用笛卡尔尔乘机:Selecct e.counntry,d.coountrry frrom ccounttry dd ,coountrry e wheere ee.couuntryyd.counntry;约束约束的分类类:主键约束束(PRIIMARYY KEEY)主键约束束一般

39、都在在id上使使用,而且且本身已经经默认了内内容不能为为空,主键键约束可以以在建表的的时候指定定:范例:建立立persson表,在在pid上上增加主键键约束CREATTE TAABLE persson(Pid VARRCHARR(18) PRRIMARRY KKEY,Namee VARCCHAR(200),Age NUMMBER(3),Birtthdayy DAATE,SEX VARCCHAR(2) DEFFAULTT 男);inserrt innto ppersoon vaaluess(nulll,柯为权,123,TO_DDATE(20099-07-19,yyyyy-mm-dd),男);主键

40、为空或或者重复都都会报错范例:将ppersoon中的ppid指定定名称CREATTE TAABLE persson_aa(Pid VARRCHARR(18) ,Namee VARCCHAR(200),Age NUMMBER(3),Birtthdayy DAATE,SEX VARCCHAR(2) DEFFAULTT 男,CONSSTRAIINT perrson_pid_pk PRIMMARY KEY(pid);Consttrainnt knsttrentt:约束;限制 HYPERLINK /s?wd=constraint persoon_piid_pkk:表示约约束的名称称非空约束(not nu

41、lll)CREATTE TAABLE persson_aa(Pid VARRCHARR(18) NOTT NULLL ,Namee VARCCHAR(200) NOOT NUULL,Age NUMMBER(3),Birtthdayy DAATE,SEX VARCCHAR(2) DEFFAULTT 男,CONSSTRAIINT perrson_pid_pk PRIMMARY KEY(pid);表示插入了了两个非空空约束的声声明,证明明此时PIID跟naame是不不允许为空空的。唯一约束(UNIQQUE)表示一个字字段中的内内容是唯一一的,其他他列不允许许重复CREATTE TAABLE pers

42、son_aa(Pid VARRCHARR(18) NOOT NUULL ,Namee VARCCHAR(200) UNNIQUEE NOOT NUULL,Age NUMMBER(3),Birtthdayy DAATE,SEX VARCCHAR(2) DEFFAULTT 男,CONSSTRAIINT perrson_pid_pk PRIMMARY KEY(pid);表示姓名唯唯一。检查约束 (CHEECK)使用检查约约束来判断断一个列中中插入的内内容是否合合法,例如如:年龄,性性别的取值值范围。CREATTE TAABLE persson_aa(Pid VARRCHARR(18) NOOT NU

43、ULL ,Namee VARCCHAR(200) NOTT NULLL,Age NUMMBER(3) CHEECK( age BETWWEEN 0 AAND 1500),Birtthdayy DAATE,SEX VARCCHAR(2) DEFFAULTT 男 CHEECK( sex I N (男,女,中性),CONSSTRAIINT perrson_pid_pk PRIMMARY KEY(pid);修改约束(了解)一张表建立立完成之后后,则可以以为其添加加约束DROP TABLLE peersonn CASSCADEE CONNSTRAAINT;CREATTE TAABLE persson(P

44、id VARRCHARR(18) PRRIMARRY KKEY,Namee VARCCHAR(200),Age NUMMBER(3),Birtthdayy DAATE,SEX VARCCHAR(2) DEFFAULTT 男);此时,需需要为表中中添加若干干个约束,添添加约束的的语法如下下:ALTERR TABBLE 表表名称 AADD CCONSTTRAINNT 约约束名称 约束类类型(约束束字段);关于约束类类型的命名名一定要统统一:PRIMAARY KKEY:主主键字段_PKUNIQUUE:字段段_UKCHECKK:字段_CKFOREIIGN KKEY:父父字段_子子字段_FFKALTER

45、R TAABLE perrson ADDD COONSTRRAINTT peersonn_pidd_PK PRRIMARRY KEEY(piid);ALTERR TAABLE perrson ADDD COONSTRRAINTT peersonn_namme_UKK UNNIQUEE(pidd);ALTERR TABBLE ppersoon ADDD COONSTRRAINTT perrson_age_CK CCHECKK(agee BETTWEENN 0 AAND 150);ALTERR TAABLE perrson ADDD COONSTRRAINTT perrson_sex_CK CCH

46、ECKK(sexx IN (男,女,中);ROWNUUM(重点点)ROWNNUM:表表示行号,实实际上此是是一个列,但是这个个列是一个个伪列,此此列可以在在每张表中中出现。范例:在查查询雇员表表上,加入入ROWNNUMSELECCT ROOWNUMM, emmpno,enamme,joob,saal,hiiredaate FFROM emp;从运行上看看,ROWWNUM本本身采用自自动编号的的形式出现现,有什么么用处呢?例如,现在在假设只想想显示前55条记录。条件中:ROWNNUM=55SELECCT ROOWNUMM,emppno,eenamee,jobb,sall,hirredatte F

47、RROM eemp WWHEREE ROWWNUM 10000000在这里里,我们不不能用whhere来来筛选超过过10000000的的地区,因因为表中不不存在这样样一条记录录。相反,HHAVINNG子句可可以让我们们筛选成组组后的各组组数据oraclle常见问问题1.在打打开PL/SQL deveelop的的时候 回回弹出: ORA-121770: TNS: 连接超超时关闭掉杀毒毒跟防火墙墙都无法解解决:点Net Manaager -设置好主机机名,也可可以设置IIP 地址址,但是每每次都要重重新设置。Ok成功解决决!2查找SSQL/PPL生成下一个序序列号在Oraccle库中中查询出下下个

48、自动生生成的idd号3. ORRA-000904 invaalid idenntifiier解决决办法,字字段名错误误ORA-0009044 invvalidd ideentiffier 这个错误误是因为 字段名写写错了 检检查下字段段名3. orraclee10gg安装成成功之后。scottt用户被被锁定问题题原因:默认认Oraccle100g的sccott不不能登陆。解决:(11)connn syys/syys ass syssdba;/以DDBA的身身份登录(22)altter uuser scottt acccounnt unnlockk;/ 然后解锁锁(3)cconn scottt/

49、tiiger /弹出出一个修改改密码的对对话框,修修改一下密密码就可以以了具体操操作步骤如如下:C: sqqlpluus请输入入用户名:sys输输入口令:sys as ssysdbba /注意:在在口令这里里输入的密密码后面必必须要跟上上 as sysddba 才才可以。SSQL alteer useer scoott accoount unloock; 用户已更更改.SQQL ccommiit; 提提交完成.SQL connn sccott/tigeer更改sscottt口令新口口令:tiiger重重新键入新新口令:ttigerr口令已更更改已连接接。/完完成。4. orraclee连接其他

50、他地址的库库在oraccle安装装目录下的的:C:orracleeprooductt10.2.0db_11NETTWORKKADMMIN的tnsnnamess.oraa 文件# tnssnamees.orra Neetworrk Coonfiggurattion Filee: C:oraacleprodduct10.22.0ddb_1netwworkadmiintnnsnammes.ooratnsnaames.ora# Genneratted bby Orraclee connfiguuratiion ttoolss.ORCL = (DEESCRIIPTIOON = (ADDRRESS = (

51、PPROTOOCOL = TCCP)(HHOST = loocalhhost)(PORRT = 15211) (CONNNECT_DATAA = (SEERVERR = DDEDICCATEDD) (SEERVICCE_NAAME = orccl) ) )EXTPRROC_CCONNEECTIOON_DAATA = (DEESCRIIPTIOON = (ADDRRESS_LISTT = (ADDDRESSS = (PROOTOCOOL = IPC)(KEYY = EEXTPRROC1) ) (CONNNECT_DATAA = (SIID = PLSEExtPrroc) (PRRESENNTAT

52、IION = RO) ) )orcl774= (DEESCRIIPTIOON = (ADDRRESS_LISTT = (ADDDRESSS = (PROOTOCOOL = TCP)(HOSST = 10.2249.2254.774)(PPORT = 15521) ) (CONNNECT_DATAA = (SEERVICCE_NAAME = orccl) ) ) 这就是对应地址4的配置如果要连接接jdbc.url =jdbbc:orraclee:thiin:110.2449.2554.744:15221:orrclpool.url=jdbcc:oraacle:thinn:zhmmwc/zzhgm

53、ccc&$10.2249.2254.774:15521:oorcljdbc.userrnamee =zhhmwcjdbc.passswordd =zhhgmccc&$oraclle权限问问题在用SCOOTT用户户创建视图图的时候出出现解决办法是是:首先在开始始-运运行sqqlpluus,然后后输入 ssys/cchangge_onn_insstalll as sysddba以sys权权限登陆进进去然后可以进进行操作:grantt creeate any vieew to SSCOTTT;/把创创建视图的的权限赋给给scottt;在用scoott登入入:selecct * fromm useer

54、_syys_prrivs;这样就可以以知道当前前用户的权权限常用的赋权权命令:1.创建用用户 crreatee useer teest iindenntifiied bby teest;这样就创建建了一个用用户名密码码都为teest的用用户2.登录权权限graant ccreatte seessioon too tesst;这样tesst用户就就能成功登登陆进去3. 建表表权限grrant creaate ttablee to testt;4 .使用用表空间权权限graant uunlimmitedd tabblesppace to ttest;5. 查询询当前用户户的系统权权限:seelec

55、tt * ffrom userr_syss_priivs;这样就可以以知道当前前用户的权权限撤销权限 revooke ccreatte taable fromm tesst;-创建用用户creatte usser kkeelttest idenntifiied bby keeelteest;分配所有权权限graant ccreatte seessioon,crreatee tabble,ccreatte viiew ,creaate aany iindexx to scottt;grantt unllimitted ttableespacce too scoott;12. Causeed byy: jaava.ssql.BBatchhUpdaateExxcepttion: ORAA-014461: can bindd a LLONG valuue onnly ffor iinserrt innto aa LONNG coolumnn这个错误折折腾了我好好长一段时时间:后来来发现是驱驱动器的问问题Oraclle有两个个jdbcc的驱动包包把classses112.jaar 换换成ojddbc144.jarr即可!13 .如如何取得表表中第6到到第10条条记录的值值如何取得表表中第6到到第10条条记录的值值51

温馨提示

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

评论

0/150

提交评论