魔樂在線Oracle筆記超經(jīng)典_第1頁
魔樂在線Oracle筆記超經(jīng)典_第2頁
魔樂在線Oracle筆記超經(jīng)典_第3頁
魔樂在線Oracle筆記超經(jīng)典_第4頁
魔樂在線Oracle筆記超經(jīng)典_第5頁
已閱讀5頁,還剩63頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、PAGE PAGE 68圖表 SEQ 圖表 * ARABIC 1多表查詢的的基本語法法查一張以上上的表,就就叫做多表表查詢例子:查詢詢出雇員名名稱,部門門名稱和部部門所在地地的(一般般多表查詢詢要用別名名)統(tǒng)計(jì)記錄數(shù)數(shù):查詢empp有多少條條紀(jì)錄左右連接(重重點(diǎn))selecct e.empnno,e.enamme,d.depttno,dd.dnaame,dd.loccfromemp ee,deppt d wherre e.depttno=dd.depptno;部門一共四四個(gè),這里里只查詢出出三個(gè),因因?yàn)樵诠蛦T員表中沒有有指定400部門的雇雇員,所以以在消除笛笛卡爾乘機(jī)機(jī)的時(shí)候沒沒有條件符符合4

2、0,如如果喜歡440部門顯顯示出來,就就要用左右右連接了。selecct e.empnno,e.enamme,d.depttno,dd.dnaame,dd.loccfromemp ee,deppt d wherre e.depttno(+)=d.depttno;(+)在左左邊,表示示以右邊的的表為準(zhǔn),表表示右鏈接接。40部門出出來了,所所以此時(shí)就就用到了有有連接,證證明以下規(guī)規(guī)律(+)在左左表示右連連接(+)在右右表示左連連接.SQL:19999對(duì)SQLL的支持(了了解)范例:交叉叉連接(ccrosss jooin)產(chǎn)產(chǎn)生笛卡爾爾積selecct * froom emmpt CCROSSS J

3、OIIN deept;查詢結(jié)果 產(chǎn)生笛卡卡爾積CREATTE TAABLE EMP110 ASS SELLECT * FRROM EEMP WWHEREE DEPPTNO=10;selecct * fromm empp NATTURAL JJOIN deptt; 自動(dòng)動(dòng)進(jìn)行匹配配范例:USSING子子句,直接接關(guān)聯(lián)的操操作列selecct * fromm empp e JJOIN deptt d UUSINGG (deeptnoo) whhere depttno=330;把兩張表的的詳細(xì)信息息進(jìn)行打印印輸出范例:ONN子句 自己編寫寫連接條件件selecct * fromm empp e JJ

4、OIN deptt d OON (e.depptno=d.deeptnoo) whhere e.deeptnoo=30;范例:左連連接(左外外連接)右右連接(右右外連接)LLEFT JOINN RRIGHTT JOIIN組函數(shù)和分分組統(tǒng)計(jì)(重重點(diǎn))組函數(shù)在SQL常常用組函數(shù)數(shù)有如下幾幾個(gè):COUNTT()求全全部記錄數(shù)數(shù)MAX()求最大記記錄數(shù)MIN()求最小記記錄數(shù)AVG()平均SUM()求和分組統(tǒng)計(jì)Groupp byyselecct deeptnoo,COUUNT(eempnoo) frrom eemp GROUUP BYY depptno;算出部門表表的平均工工資:selecct AVV

5、G(saal) ffrom emp ;算出每個(gè)部部門的平均均工資:Selecct deeptnoo,AVGG(sall) frrom eemp ;之所以會(huì)會(huì)出現(xiàn)這個(gè)個(gè)錯(cuò)誤是因因?yàn)閿?shù)據(jù)庫庫不知道怎怎樣在結(jié)果果集中處理理depttno列??紤]一下下:這個(gè)查查詢既試圖圖使用AVVG聚合函函數(shù)對(duì)多 行記錄進(jìn)進(jìn)行操作,卻卻又試圖從從每行中獲獲得depptno列列的值;這這兩個(gè)操作作是不可能能同時(shí)完成成的。此時(shí)時(shí)必須提供供一個(gè)GRROUP BY子句句告訴數(shù)據(jù)據(jù)庫將deeptnoo列相同的的行分組在在一起,然然后數(shù)據(jù)庫庫就可以將將這些組中中的行傳遞遞給AVGG函數(shù)。警告:如果查詢中中包含聚合合函數(shù),而而所選

6、擇的的列并不在在聚合函數(shù)數(shù)中,那么么這些列就就必須在GGROUPP BY子子句中。按部門分組組,并顯示示部門名稱稱,以及部部門員工數(shù)數(shù)selecct d.dnamme,coount(e.emmpno) fromm deppt d,emp ewheree d.ddeptnno=e.depttno GROUPP BY d.dnname;要求查出平平均工資大大于20000的部門門編號(hào)和平平均工資selecct deeptnoo,AVGG(sall) frrom eemp WWHEREE AVGG(sall) 22000 GROUUP BYY depptno;之所以會(huì)會(huì)出現(xiàn)這個(gè)個(gè)錯(cuò)誤是因因?yàn)閃HEER

7、E子句句只能用來來對(duì)單行而而不是行組組進(jìn)行過濾濾。要過濾濾行組,可可以使用HHAVINNG子句。范例:顯示示非銷售人人員工作名名稱以及從從事同一工工作雇員的的月工資的的總和,并并且要滿足足從事同一一工作的雇雇員的月工工資合計(jì)大大于¥50000。輸輸出結(jié)果按按月工資的的合計(jì)升序序排列1.顯示全全部的非銷銷售人員:jobSALEESMANNselecct * fromm empp wheere jjobsallesmaan;2.按工作作分組同時(shí)時(shí)求出工資資的總和Selecct joob,SUUM(saal) ffrom emp WHERRE joobSALEESMANN GROOUP BBY jo

8、ob; 3.對(duì)分組組條件進(jìn)行行限制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; 分組的簡單單原則:只要一列上上存在重復(fù)復(fù)的內(nèi)容才才考慮用分分組注意:分組組函數(shù)可以以嵌套使用用,但是在在組

9、函數(shù)嵌嵌套的時(shí)候候不能再出出現(xiàn)分組條條件的查詢詢語句范例:求出出平均工資資最高的部部門錯(cuò)誤代碼:Selecct deeptnoo,MAXX(AVGG(sall) ffrom emp GROUUP BYY depptno;Selecct MAAX(AVVG(saal) fromm empp GROOUP BBY deeptnoo;(正確確)子查詢范例:要求求查詢出比比76544工資高的的全部雇員員信息首先:要知知道76554雇員的的工資是多多少然后:以此此查詢結(jié)果果為查詢依依據(jù),只要要其他工資資大于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); ;數(shù)據(jù)庫更新新操作數(shù)據(jù)庫的主主要操作分分為兩種:1.數(shù)據(jù)據(jù)庫的查

11、詢詢操作SEELECTT2.數(shù)據(jù)據(jù)庫的更新新操作 uuUPDAATE, DELEETE, INSEERT 此時(shí)為了保保存原始的的emp表表的信息,在在進(jìn)行更新新 刪除 插入表前前先將表復(fù)復(fù)制一份Creatte taable myemmp ASS sellect * frrom eemp;此時(shí)數(shù)據(jù)已已經(jīng)復(fù)制出出來添加數(shù)據(jù)Inserrt innto eemp(eempnoo,enaame,jjob,hhireddate,sal ,depptno)Valuees (77899,張三,清潔工,20-22月-20000,90000, 440);使用簡略寫寫法(并不不推薦),因因?yàn)楝F(xiàn)在是是要添加所所有字段

12、的的內(nèi)容,所所以可以不不寫上任何何字段名稱稱,只要值值的數(shù)量和和順序和數(shù)數(shù)據(jù)庫表中中的順序一一致。Inserrt innto mmyempp vallues(78999,張三,清潔工,90000, 440);之前插入數(shù)數(shù)據(jù)的時(shí)候候,日期的的格式是使使用了表中中固定好的的格式,如如果現(xiàn)在有有這樣一個(gè)個(gè)日期”20099-10-10”日期格式式,那么現(xiàn)現(xiàn)在如何把把這種格式式的日期插插入進(jìn)去呢呢?使用TO_DATEE()函數(shù)數(shù),將一個(gè)個(gè)字符串類類型的數(shù)據(jù)據(jù)變?yōu)镈AATE類型型的數(shù)據(jù)。Inserrt innto mmyempp(emppno,eenamee,jobb,hirredatte,saal ,d

13、deptnno)Valuees (77899,張三,清潔工,TO_DATEE(20099-07-19,yyyyy-mm-dd),90000, 40);修改數(shù)據(jù)UPDATTE 表名名稱 seet 要修修改的字段段=新值,要要修改的字字段=新值值.;UPDATTE 表名名稱 seet 要修修改的字段段=新值,要要修改的字字段=新值值WHERRE 修改改條件.;修改數(shù)據(jù)刪除全部: DELLETE FROMM 表名稱稱 局部刪除: DELLETE FROMM 表名稱稱 WHEERE 刪刪除條件;事物處理范例:創(chuàng)建建一張只包包含10部部分雇員的的一張臨時(shí)時(shí)表CREATTE TAABLE EMP110 A

14、SS SELLECT * FRROM EEMP WWHEREE DEPPTNO=10;打開一個(gè)ooraclle終端,進(jìn)進(jìn)行刪除操操作DELETTE FFROM EMPP10 WHERRE SAAL=24450;顯顯示已經(jīng)刪刪除然后再打開開另外一個(gè)個(gè)oraccle終端端,查詢到到sal=24500這條數(shù)據(jù)據(jù)還在,證證明這條數(shù)數(shù)據(jù)并沒有有被刪除,這這就是orraclee事務(wù)的概概念。事務(wù)處理: 就是保保證數(shù)據(jù)操操作的完整整性,所有有的操作要要么同時(shí)成成功要么同同時(shí)失敗。在ORACCLE中對(duì)對(duì)每一個(gè)連連接到數(shù)據(jù)據(jù)庫中的窗窗口,都會(huì)會(huì)與數(shù)據(jù)庫庫建立一個(gè)個(gè)Sesssion。一個(gè)Seessioon對(duì)數(shù)據(jù)據(jù)

15、庫所做得得修改不會(huì)會(huì)馬上反應(yīng)應(yīng)到數(shù)據(jù)庫庫的真實(shí)數(shù)數(shù)據(jù)之上。是允許回回滾的,當(dāng)當(dāng)一個(gè)Seessioon提交所所有操作之之后,數(shù)據(jù)據(jù)庫才真正正做出修改改。進(jìn)行同樣的的刪除操作作DELETTE FFROM EMPP10 WHERRE SAAL=24450;結(jié)果它停住住了,等待待第一個(gè)終終端操作結(jié)結(jié)束再動(dòng)。這就是是ORACCLE死鎖鎖提交事務(wù):COMMMIT 回滾:RooolbaackORACLLE常用命命令查看所有表表selecct ttablee_namme ffrom userr_tabbles;顯示表結(jié)構(gòu)構(gòu)descrribe nchaar_tsst(ncchar_tst為為表名)查詢練習(xí)1.列

16、出至至少有一個(gè)個(gè)員工的所所有部門信信息第一步: 列出所所有部門的的員工數(shù)量量Selecct deeptnoo ,coount(empnno) ffrom emp grouup byy depptno;第二步:列列出員工大大于1的部部門 Seleect ddeptnno ,ccountt(emppno) fromm empp grooup bby deeptnoo HAVVING COUNNT(emmpno)1;第三步:通通過多表關(guān)關(guān)聯(lián)查,把把子查詢做做為一個(gè)查查詢出來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 列出所所有員工姓姓名及其直直接上級(jí)的的姓名此程序?qū)儆谟谧陨黻P(guān)聯(lián)聯(lián)

18、查詢SELECCT ee.enaame, d.enname FROMM empp e ,emp d whhere e.mggr=d.empnno;4. 列出出受雇日期期早于其直直接上級(jí)的的所有員工工的編號(hào),姓名,部部門名稱自身關(guān)聯(lián),查找mggr=emmpno的的同時(shí)還要要比較Hiiredaate第一步:SSELECCT e.empnno,e.enammeFROM emp e, eemp mm WHEERE ee.mgrr=m.eempnoo ANDD e.hhireddatem.hiiredaate;查找e表的直屬領(lǐng)導(dǎo)編號(hào)等于m表的員工,也就是說m表是領(lǐng)導(dǎo)表,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 這個(gè)錯(cuò)誤誤是因?yàn)?字段名寫寫錯(cuò)了 檢檢查下字段段名,發(fā)現(xiàn)現(xiàn)e1表的的查詢結(jié)果果沒有deeptnoo字段,所所以報(bào)錯(cuò)了了!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;李興華給出出的標(biāo)準(zhǔn)答答案是: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;結(jié)果出來,但是是錯(cuò)錯(cuò)的。李興華分析一:按按工作分組組,分組條條件最低工工資大于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”(銷售部部)工作的的員工的姓姓名,假定定不知道銷銷售部的部部門編號(hào)1.Sellect depttno ffrom deptt whhere dnamme= SALLES; 將第一步驟驟作為條件件寫子查詢詢2.sellect enamme ffrom emp wherre deeptnoo=( SSelecct deeptnoo froom deept wherre dnname=SALEES);9. 列出出薪金高于于公司平均均薪金的所所有員工,所在部門門,上級(jí)領(lǐng)領(lǐng)導(dǎo),公司司的工資等等級(jí)。1.算出出平均工資資: Selecct AAVG(ssal) froom eemp 2. seelect

23、t * fromm empp wheere ssal( Selecct AAVG(ssal) froom eemp);答案:第一一步求出公公司的平均均工資-11,第二步步:列出薪薪金高于平平均工資的的所有雇員員的信息-2第三步:要要求所在部部門肯定要要與部門表表關(guān)聯(lián)查所在在部門的信信息,3. SEELECTT e.*,d.ddnamee,d.lloc FFROM emp e,deept dd WHEERE ssal(SELEECT AAVG(ssal) FROMM empp ) AAND ee.depptno=d.deeptnoo;第四步要想想查詢上級(jí)級(jí)領(lǐng)導(dǎo)肯定定要與自身身關(guān)聯(lián)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表的領(lǐng)導(dǎo)編號(hào)等于m表的員工編號(hào),emp表自身關(guān)聯(lián)m表的員工=e表的領(lǐng)導(dǎo),所以m.ename就是:領(lǐng)導(dǎo)”。(+);第五步:求求出雇員的的工資等級(jí)級(jí)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工資屬于這個(gè)區(qū)間內(nèi)表示這個(gè)等級(jí)。;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 列出出在每個(gè)部部門工作的的員工數(shù)量量,平均工工資和平均均服務(wù)期限限第一步查詢詢出每個(gè)部部門的員工工數(shù)量:SSELECCT d.dnamme,COOUNT(empnno) FFROM emp e ,ddept d WHHERE e.deeptnoo=d.ddeptnno GRROUP BY dd.dnaame;答案:在第第一步的基基礎(chǔ)上,第第二步要讀讀出平均工工資和服務(wù)

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)函數(shù)數(shù)可以實(shí)現(xiàn)現(xiàn)年齡的計(jì)計(jì)算,此函函數(shù)的返回回值為daate1與與datee2之間的的月數(shù), 比如moonthss_bettweenn(20008-8-8,20005-44-8)執(zhí)執(zhí)行的結(jié)果果是40(執(zhí)執(zhí)行“seelectt monnths_betwween(20008-8-8,20055-4-88) ffrom duall;”不包包括雙引號(hào)號(hào))。daate1和和datee2都是DDATE類類型的,用用SYSDDATE可可以獲得系系統(tǒng)時(shí)間,用用現(xiàn)在的時(shí)時(shí)間減去變變量中的時(shí)時(shí)間再與年年齡總

31、月 數(shù)比較即即可實(shí)現(xiàn)這這一功能。14 列出出所有員工工的姓名,部門名稱稱和工資(dimss)Selecct e.enamme,d.dnamme,e.sal fromm empp e,ddept d whhere e.deeptnoo=d.ddeptnno; 15 列出出所有部門門的詳細(xì)信信息和部門門人數(shù)第一步: 這種題型型肯定是多多表關(guān)聯(lián)子子查詢,首首先列出部部門的人數(shù)數(shù)SELECCT deeptnoo dnoo, COOUNT(empnno) ccou FROMM empp GROOUP BBY deeptnoo第二步:把把以上的結(jié)結(jié)果當(dāng)成一一張臨時(shí)表表出現(xiàn);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 表達(dá)式.錯(cuò)誤答案:SELECCT *FROMM emppWHEREE sall IN(SELEECT MMIN(ssal) FROMM empp GROOUP BBY joob);17 列出出各個(gè)部門門的MANNAGERR(經(jīng)理)的最低薪薪金(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 列出出所有員工工的年工資資,按年薪薪從低到高高排序在處理年薪薪的時(shí)候,要處理獎(jiǎng)獎(jiǎng)金,獎(jiǎng)金金要使用NNVL函數(shù)數(shù)處理SELECCT enname,(sall+NVLL(commm,0)*122 inccome FROMM emppORDERR BY inccome;19 查出出某個(gè)員工工的上級(jí)主主管,并要要求出這些些主管中的的薪水超過過30000SELECCT DDISTIINCT m.* FRROM eemp ee,empp mWHEREE e.mmgr=mm.emppno AAND mm.sall

35、30000;20 求出出部門名稱稱中,帶s字符的部部門員工的的工資合計(jì)計(jì),部門人人數(shù)查詢部門表表的部門名名稱,使用用模糊查詢詢,以確定定部門的編編號(hào)SELECCT deeptnoo FROOM deept WWHEREE dnaame LLIKE %S%;以上面的結(jié)結(jié)果作為查查詢的條件件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;創(chuàng)建表和管管理表(重重點(diǎn))ORACLLE 復(fù)制制表的語法法:CREEATE TABLLE 表名名稱 ASS(子查詢詢)如果現(xiàn)在子子查詢寫的的是:SEELECTT *FFROM emp 表示將表表結(jié)構(gòu)和內(nèi)內(nèi)容一起復(fù)復(fù)制如果現(xiàn)在子子查詢寫的的是:SEELECTT * FFROM emp WHERRE 1=2; 加入一個(gè)個(gè)永遠(yuǎn)不可可能成立的的條件,表表示只是復(fù)復(fù)制表結(jié)構(gòu)構(gòu)不復(fù)制表表內(nèi)容。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;思考題分析:這是是一道面試試題,只能能用笛卡爾爾乘機(jī):Selecct e.counntry,d.coountrry frrom ccounttry dd ,coountrry e wheere ee.couuntryyd.counntry;約束約束的分類類:主鍵約束束(PRIIMARYY KEEY)主鍵約束束一般

39、都在在id上使使用,而且且本身已經(jīng)經(jīng)默認(rèn)了內(nèi)內(nèi)容不能為為空,主鍵鍵約束可以以在建表的的時(shí)候指定定:范例:建立立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,柯為權(quán),123,TO_DDATE(20099-07-19,yyyyy-mm-dd),男);主鍵

40、為空或或者重復(fù)都都會(huì)報(bào)錯(cuò)范例:將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);表示插入了了兩個(gè)非空空約束的聲聲明,證明明此時(shí)PIID跟naame是不不允許為空空的。唯一約束(UNIQQUE)表示一個(gè)字字段中的內(nèi)內(nèi)容是唯一一的,其他他列不允許許重復(fù)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)使用檢查約約束來判斷斷一個(gè)列中中插入的內(nèi)內(nèi)容是否合合法,例如如:年齡,性性別的取值值范圍。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 男);此時(shí),需需要為表中中添加若干干個(gè)約束,添添加約束的的語法如下下:ALTERR TABBLE 表表名稱 AADD CCONSTTRAINNT 約約束名稱 約束類類型(約束束字段);關(guān)于約束類類型的命名名一定要統(tǒng)統(tǒng)一: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(重點(diǎn)點(diǎn))ROWNNUM:表表示行號(hào),實(shí)實(shí)際上此是是一個(gè)列,但是這個(gè)個(gè)列是一個(gè)個(gè)偽列,此此列可以在在每張表中中出現(xiàn)。范例:在查查詢雇員表表上,加入入ROWNNUMSELECCT ROOWNUMM, emmpno,enamme,joob,saal,hiiredaate FFROM emp;從運(yùn)行上看看,ROWWNUM本本身采用自自動(dòng)編號(hào)的的形式出現(xiàn)現(xiàn),有什么么用處呢?例如,現(xiàn)在在假設(shè)只想想顯示前55條記錄。條件中:ROWNNUM=55SELECCT ROOWNUMM,emppno,eenamee,jobb,sall,hirredatte F

47、RROM eemp WWHEREE ROWWNUM 10000000在這里里,我們不不能用whhere來來篩選超過過10000000的的地區(qū),因因?yàn)楸碇胁徊淮嬖谶@樣樣一條記錄錄。相反,HHAVINNG子句可可以讓我們們篩選成組組后的各組組數(shù)據(jù)oraclle常見問問題1.在打打開PL/SQL deveelop的的時(shí)候 回回彈出: ORA-121770: TNS: 連接超超時(shí)關(guān)閉掉殺毒毒跟防火墻墻都無法解解決:點(diǎn)Net Manaager -設(shè)置好主機(jī)機(jī)名,也可可以設(shè)置IIP 地址址,但是每每次都要重重新設(shè)置。Ok成功解決決!2查找SSQL/PPL生成下一個(gè)序序列號(hào)在Oraccle庫中中查詢出下下個(gè)

48、自動(dòng)生生成的idd號(hào)3. ORRA-000904 invaalid idenntifiier解決決辦法,字字段名錯(cuò)誤誤ORA-0009044 invvalidd ideentiffier 這個(gè)錯(cuò)誤誤是因?yàn)?字段名寫寫錯(cuò)了 檢檢查下字段段名3. orraclee10gg安裝成成功之后。scottt用戶被被鎖定問題題原因:默認(rèn)認(rèn)Oraccle100g的sccott不不能登陸。解決:(11)connn syys/syys ass syssdba;/以DDBA的身身份登錄(22)altter uuser scottt acccounnt unnlockk;/ 然后解鎖鎖(3)cconn scottt/

49、tiiger /彈出出一個(gè)修改改密碼的對(duì)對(duì)話框,修修改一下密密碼就可以以了具體操操作步驟如如下:C: sqqlpluus請(qǐng)輸入入用戶名: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) ) ) 這就是對(duì)應(yīng)地址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權(quán)限問問題在用SCOOTT用戶戶創(chuàng)建視圖圖的時(shí)候出出現(xiàn)解決辦法是是:首先在開始始-運(yùn)運(yùn)行sqqlpluus,然后后輸入 ssys/cchangge_onn_insstalll as sysddba以sys權(quán)權(quán)限登陸進(jìn)進(jìn)去然后可以進(jìn)進(jìn)行操作:grantt creeate any vieew to SSCOTTT;/把創(chuàng)創(chuàng)建視圖的的權(quán)限賦給給scottt;在用scoott登入入:selecct * fromm useer

54、_syys_prrivs;這樣就可以以知道當(dāng)前前用戶的權(quán)權(quán)限常用的賦權(quán)權(quán)命令:1.創(chuàng)建用用戶 crreatee useer teest iindenntifiied bby teest;這樣就創(chuàng)建建了一個(gè)用用戶名密碼碼都為teest的用用戶2.登錄權(quán)權(quán)限graant ccreatte seessioon too tesst;這樣tesst用戶就就能成功登登陸進(jìn)去3. 建表表權(quán)限grrant creaate ttablee to testt;4 .使用用表空間權(quán)權(quán)限graant uunlimmitedd tabblesppace to ttest;5. 查詢詢當(dāng)前用戶戶的系統(tǒng)權(quán)權(quán)限:seelec

55、tt * ffrom userr_syss_priivs;這樣就可以以知道當(dāng)前前用戶的權(quán)權(quán)限撤銷權(quán)限 revooke ccreatte taable fromm tesst;-創(chuàng)建用用戶creatte usser kkeelttest idenntifiied bby keeelteest;分配所有權(quán)權(quán)限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這個(gè)錯(cuò)誤折折騰了我好好長一段時(shí)時(shí)間:后來來發(fā)現(xiàn)是驅(qū)驅(qū)動(dòng)器的問問題Oraclle有兩個(gè)個(gè)jdbcc的驅(qū)動(dòng)包包把classses112.jaar 換換成ojddbc144.jarr即可!13 .如如何取得表表中第6到到第10條條記錄的值值如何取得表表中第6到到第10條條記錄的值值51

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論