版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、一驗證Oraacle已已經(jīng)安裝完完成了,首首先得確認認程序里有有這些個選選項,有四四個選項:Oraccle IInstaallattion Prodductss、集成管管理工具、配置和移植植工具(管管理員用得得比較多)、應(yīng)用程序開發(fā)。Oracle也可以形成一種層次性的鏈接(Directory Manager),對于我們來說用得最多是sqlplus,而OLE 是一種面向?qū)ο蟮募夹g(shù),利用這種技術(shù)可開發(fā)可重復(fù)使用的軟件組件(COM),他是微軟提出的,在用VB開發(fā)時可能要用,對于我們來說不須管。當(dāng)啟動ssqlpllus時會會提示輸入入用戶名和和口令,所所謂的sqqlpluus是Orraclee的一個客
2、客戶端。OOraclle大多數(shù)數(shù)命令都用用命令來實實現(xiàn),所以以比較難使使,就如同同unixx比winndowss難使??诳诹钅爿斎肴雝igeer,建議議就用它,因因為以后去去企業(yè)里OOraclle 9ii就是用的的這個口令令。當(dāng)你看看到SQLL命令符符時說明已已經(jīng)進入到到了Oraacle的的命令行了了。圖形版的的sqlpplus,命命令行的ssqlpllus,還還有一個就就是通過網(wǎng)網(wǎng)頁訪問OOraclle的服務(wù)務(wù),啟動ssqlpllus,端端口號是55560,UURL是 HYPERLINK hhttp:/1:55600/isqqlpluus。issqlpllus httpp:
3、/1127.00.0.11:55660/issqlpllus。iisqlpplus非非常有用,比如說你的機器上沒有裝上Oracle,就可以通過鍵入別人的IP,然后登陸到他的機器上來做實驗,當(dāng)然也可以安裝特定的客戶端軟件實現(xiàn)。說實在的的Oraccle的這這個客戶端端太難看了了,并且要要記好多好好多的命令令,所以專專門有一類類公司專門門為Oraacle開開發(fā)客戶端端。有一個個比較著名名的客戶端端叫Toadd,當(dāng)然OOraclle還有一一個客戶端端PL/SSQL DDevellplorr,這個用用的也非常常多。數(shù)據(jù)據(jù)庫管理時時常用Tooad(英英文蛤蟆的的意思),如果有聲卡的話,你啟動一次它就叫一次
4、。對我們來說sqlplus足夠使了。以后有機會我使用一下PL/SQL Develplor,不過這個也不好使,因為你同時必須裝上Oracle,還不如isqlplus好呢。以超級管管理員身份份鏈接數(shù)據(jù)據(jù)庫的方法法是再命令令行下敲入入命令:ssqlpllus ssys/口口令 ass syssdba。Sys和ssysteem的區(qū)別別是syss是數(shù)據(jù)庫庫管理者,ssysteem是數(shù)據(jù)據(jù)庫所有者者,sys用戶戶擁有dbba,sysddba,sysooper等等角色或權(quán)權(quán)限,是ooraclle權(quán)限最最高的用戶戶,sysstem用用戶擁有ddba,sysddba等角角色或系統(tǒng)統(tǒng)權(quán)限,ssysteem如果正正
5、常登錄,它它其實就是是一個普通通的dbaa用戶,但但是如果以以as ssysdbba登錄,其其結(jié)果實際際上它是作作為syss用戶登錄錄的,這一一點類似LLinuxx里面的suudo的感感覺,從登登錄信息里里面我們可可以看出來來。syss用戶必須須以as sysddba或as ssysopper形式式登錄。然后輸入入命令allter userr scoott aaccouunt uunlocck;它的的意思是將將Scottt用戶解解鎖,以后后關(guān)于dbba的用到到一個學(xué)一一個,沒必必要從頭到到尾的去學(xué)學(xué)它。二SQL語語言是在數(shù)數(shù)據(jù)庫下進進行操作的的語言,它它本身是一一個標(biāo)準(zhǔn)語語言,有國國際標(biāo)準(zhǔn)。有
6、兩套一一個是SQQL19992,SQQL19999。大多多數(shù)數(shù)據(jù)庫庫既支持舊舊的標(biāo)準(zhǔn)也也支持新的的,很多也也是用的舊舊的SQLL語言寫程程序的,對對于我們來來說新舊都都要學(xué),而而且對大多多數(shù)數(shù)據(jù)庫庫系統(tǒng)來說說都是通用用的,只不不過不同數(shù)數(shù)據(jù)庫有一一個輕微的的改變,這這就是最郁郁悶的地方方,沒辦法法到時候查查手冊或ggooglle一下。SQL全全稱為Sttructturedd Queery LLanguuage,即機構(gòu)化化查詢語言言,它被定義義為第四代代語言。為為什么叫第第四代語言言,因為我我們知道第第三代語言言也得有iif ellse ffor 等等這些流程程控制語句句,也就是是你得告訴訴它干
7、什么么且怎么干干。第四大大只用告訴訴它我要干干什么,不不用去控制制它怎么干干,這樣的的語言學(xué)起起來當(dāng)然十十分eassy。我們共有有四類語句句要學(xué):數(shù)數(shù)據(jù)操作語語言語句Dataa mannipullatioon laanguaage,DDML,會話控制制語句 HYPERLINK /searchwhatis/18/5949018.shtml sesssion conttrol stattemennt,數(shù)據(jù)定義義語言語句句Datta deefiniitionn lannguagge,DDDL以及及事務(wù)控制制語句 HYPERLINK /searchwhatis/297/6092797.shtml tr
8、annsacttion conttrol stattemennt。查詢語句句只有一句句話就是sselecct語句,這是最重要的一條語句。以后只要遇到相應(yīng)的select語句一律背過,企業(yè)再面試時其他語句一般不會怎么考但這條語句是必考的。如果考你SQL語句肯定會考這條select語句不是別的。你跟別人交流的時候,別說我寫過幾條dml語句,而因詳細的說到底是什么語句,比如insert語句、update語句等。選擇的意思是從表里把數(shù)據(jù)拿出來,展現(xiàn)出來。聽起來似乎挺簡單的,但你要從表里拿數(shù)據(jù)得首先知道有幾張表,每張表里有些什么內(nèi)容。第一步要要做的就是是熟悉一下下實驗用的的數(shù)據(jù),這這些數(shù)據(jù)OOraclle
9、都給自自帶了,直直接用就行行了。首先先第一條語語句dessc emmp,描述述一下emmp這張表表,會分別別列出所有有字段(表表頭),eempnoo 雇員編編號,enname 雇員名字字,jobb 雇員工工種,mggr 經(jīng)理理人,hiiredaate 雇雇員入職日日期,saal 薪水水,commm 津貼貼,獎金,ddeptnno 所屬屬部門編號號。表還有一一部分叫類類型,也就就是相對應(yīng)應(yīng)字段的類類型,這些些都是Orraclee已經(jīng)定義義好的,我我們直接用用?,F(xiàn)在先先用別人建建立好的表表,然后再再自己建表表。NUMBEER指數(shù)字字,VARRCHARR指字符型型,Oraacle77以前在用用,現(xiàn)在
10、常常用的是VVARCHHAR2它它支持各種種可變字符串,可以更好好的表示各各國文字,DDATE指指日期,NNUMBEER(7,2)指七七位數(shù)字有有兩位小數(shù)數(shù)。descc deppt 部門門表,它有有三個字段段DEPTTNO 部部門編號,DDNAMEE 部門名名稱,LOOC部門所所在位置。Desc salggradee工資等級級表,許多多公司都實實行的是工工資等級制制,分幾級級工資,GGRADEE工資等級級,HISSAL該等等級最高工工資,LOOSAL該該等級最低低工資。以上簡要要的介紹了了三張表,如如果想更詳詳細的了解解里面的數(shù)數(shù)據(jù),教大大家第一個個seleect語句句:secleect *
11、fromm 表名;。*表示把把表里所有有的數(shù)據(jù)都都取出來,分分號表示語語句結(jié)束。盡量多熟熟悉各張表表之間的關(guān)關(guān)系,以及及表內(nèi)部各各字段之間間的關(guān)系,越越熟悉越好好。如果要算算純數(shù)據(jù),可可以采用ddual這這張表,它它就一條記記錄,一個個字段。你你如果用其其他表計算算的話會有有好多條重重復(fù)結(jié)果,記記錄。字段是不不能有空格格的,如果果非要空格格可以將整整個字段用用雙引號括括起來,這這樣的話引引號里面就就可以加上上各種各樣樣的字符了了。如果沒沒加引號的的話那樣做做是不對的的。再沒有有加雙引號號的時候結(jié)結(jié)果字段名名會以大寫寫字母顯示示出來,但但加了雙引引號就保持持住了原來來的形式不不變。沒有有就是nu
12、ull值,即即便是0也也與空值大大不一樣。0是有值值但為0,nnull是是沒有值。任何含有有空值的表表達式最后后的結(jié)果都都是空值。SQL里里面有一個個字符串鏈鏈接符|,它的作作用跟Jaava里的的+一樣,所所有被鏈接接的都會轉(zhuǎn)轉(zhuǎn)換為字符符串顯示出出來。如seleect eenamee|saal frrom eemp;它它的意思是是將結(jié)果ssal轉(zhuǎn)換換為字符串串后鏈接到到enamme后面。在任何數(shù)數(shù)據(jù)庫的SSQL語句句里面都是是用單引號號括起來表表示一個字字符串序列列。如果字字符串里本本來就有單單引號,再再解析時就就會出錯??梢杂脙蓛蓚€單引號號來代替一一個單引號號,這樣就就可以正確確顯示了。關(guān)鍵
13、字ddistiinct是是指選擇不不重復(fù)的記記錄,如果果修飾多個個字段時表表示選擇該該多個字段段的組合不不重復(fù)的顯顯示出來。wherre叫過濾濾條件,它它會過濾掉掉一些記錄錄,等值判判斷用=,不不等值判斷斷注意是而不是是Javaa語句里的的不等號。字符串比比較是比較較字符的AASCIII碼,挨個個比較。做做比較時還還可以用關(guān)關(guān)鍵字beetweeen annd,注意意的是包括括邊界值的的。andd也可把兩兩個過濾條條件連接起起來。下面來講講空值的處處理,你可可以直接用用wherre +字字段+iss nulll來取出出是空值的的,取出不不是空值的的多加一個個not就就行。這種種處理方式式非常像我
14、我們的說話話習(xí)慣。iin然后跟跟著某個字字段的取值值是括號括括起來各值值之間用逗逗號隔開。可以使用用and、or,nnot連接接起各個查查詢條件。日期處理理起來稍微微麻煩一些些,由于現(xiàn)現(xiàn)在還沒有有學(xué)日期函函數(shù),所以以采用另外外一種方式式一個特殊殊的字符串串。你就按按它的日期期寫法來寫寫如20-22月-077,然后系系統(tǒng)就按照照字符串來來比較即可可。年份可可以寫全如如20-22月-20007,它能認認出來。以以后我們可可以寫成任任何形式的的日期格式式都能處理理。模糊查詢詢是這樣的的,比如找找出名字里里含有all的,有點點像正則表表達式。使使用關(guān)鍵字字likee,可以通配符符%,代表表0個或多多個
15、字符,_代表一個字母。如果名字里就含有一個%,則使用轉(zhuǎn)義字符%的形式,當(dāng)然可以自己指定轉(zhuǎn)義字符方法是select * from emp where ename like _A$% escape $;。排序用到到的一個關(guān)關(guān)鍵字是oorderr by,默默認的是按按升序排列列,如果想想降序排列列可以采用用如下形式式:sellect * frrom ddept ordeer byy depptno descc;dessc是降序序的英文縮縮寫。升序序排列可不不寫也可加加上ascc。還可以以加入whhere先先過濾了再再排序,按按照幾個字字段進行排排序時,用用逗號分隔隔開,如下下:sellect ena
16、mme ,jjob,eempnoo,sall ,deeptnoo froom emmp orrder by ddeptnno,saal deesc;意意思是先將將表按照ddeptnno升序排排列,然后后相同的ddeptnno內(nèi)部再再按照saal降序排排列。三SQL函函數(shù),函數(shù)數(shù)就是Jaava里的的方法,有有參數(shù)有返返回值?,F(xiàn)現(xiàn)在講的是是單行函數(shù)數(shù),第一個個叫做loower,作作用是轉(zhuǎn)換換為小寫;第二個叫叫uppeer,作用用是轉(zhuǎn)為大大寫;第三三個叫suubstrring,取取子串。這這幾個函數(shù)數(shù)都是對字字符串進行行操作的,傳傳遞進去的的參數(shù)就是是字段名。如seleect llowerr(ena
17、ame) fromm empp;還有一一個函數(shù)叫叫chr,它它是把一個個數(shù)字轉(zhuǎn)為為字符:sselecct chhr(866) frrom ddual;將86代代表的字符符顯示出來來,與之對對應(yīng)的是將將一個字符符轉(zhuǎn)為對應(yīng)應(yīng)的ASCCII碼,叫叫asciii,如:seleect aascii(A) frrom ddual;就是將AA的碼值顯顯示出來。rounnd函數(shù)是是四舍五入入的作用,如如seleect rroundd(43.5354435) fromm duaal;結(jié)果果就為444。還有一一個重載的的帶兩個參參數(shù)的方法法如sellect rounnd(433.5355435,4) ffrom
18、duall;四舍五五入到小數(shù)數(shù)點后4位位,結(jié)果位位44.55354,第第二個參數(shù)數(shù)可以是負負數(shù)表示四四舍五入到到小數(shù)點前前多少位。其他函數(shù)數(shù)可以不用用記住,但但要知道有有這么個函函數(shù),然后后取手冊中中可以查到到,但下面面講的一個個函數(shù)最好好記住它。to_cchar是是將字段內(nèi)內(nèi)容顯示為為字符,可可以對顯示示的形式進進行格式控控制,比如如seleect tto_chhar(ssal, $999,9999,9999.99999) fromm empp;就是以以后面給定定字符形式式顯示出來來,小數(shù)點點后的四位位會強制顯顯示,而前前面的沒有有的位數(shù)就就不顯示,這這就是9的的含義。$換為L表表示本地貨貨
19、幣。0代代表一位數(shù)數(shù)字,如果果沒有該位位數(shù)字也會會強制顯示示為0,對對于這種方方式是為了了進行格式式控制。實際上用用to_cchar來來控制數(shù)字字是比較少少用的,而而用得最多多的是對日日期格式的的控制,我我們知道OOraclle里的ssysdaate包含含了插入記記錄的詳細細時間信息息,我們可可以對其進進行顯示的的格式進行行控制,比比如:seelectt to_charr(hirredatte,yyyyy-mm-ddd) fromm empp;轉(zhuǎn)換為為年月日22006-3-233這種格式式的。實際際上對日期期的格式控控制是利用用Javaa來實現(xiàn)的的,到時會會有一個關(guān)關(guān)于日期處處理的專題題。se
20、leect eenamee,jobb,hirredatte frrom eemp wwheree hirredatte tto_daate(19822-1-11 1:330:000, yyyyy-mm-dd hhh:mii:ss);意思思是將特定定的字符串串轉(zhuǎn)換為相相應(yīng)的日期期格式。還有too_nummber是是將特定的的字符串解析析為相應(yīng)的的數(shù)字格式式如seleect eenamee ,joob ,ssal ffrom emp wherre saal20000;首先按按depttno求出出每個deeptnoo的平均ssal,然然后對這些些分組利用用haviing 語語句進行過過濾。到現(xiàn)在為為
21、止已經(jīng)學(xué)學(xué)完了所有有的單條sselecct語句,執(zhí)執(zhí)行順序按按照sellect+字段或內(nèi)容容+froom+表名名+wheere+grooup bby+havving+ordder bby這個順序序進行執(zhí)行行,首先取取出記錄,然然后對單個個記錄進行行過濾,過過濾完了分分組,分組組好了對組組過濾,剩剩下的分組組再按順序序顯示出來來。單條sselecct語句一一定要非常常熟悉,如如果這都要要查書的話話對企業(yè)就就沒法交代代了,哈哈哈!之前已經(jīng)經(jīng)講過一個個子查詢的的例子:sselecct enname,sal fromm empp wheere ssal=(seleect mmax(ssal) from
22、m empp);看誰誰的工資最最高,之所所以叫子查查詢因為再再一個seelectt語句里套套了另外一一個sellect語語句。理解解子查詢的的關(guān)鍵是把把它當(dāng)成一一張表,可可以對它做做表連接最最后就可以以求出想要要的結(jié)果來來。單獨的的seleect語句句相當(dāng)簡單單,但是有有了sellect子子句和表連連接之后語語句就稍微微復(fù)雜了點點。sellect enamme ,ssal ffrom emp joinn(sellect max(sal) maxx_sall,depptno fromm empp grooup bby deeptnoo) t on (emp.sal=t.maax_saal ann
23、d t.depttno=eemp.ddeptnno);這這個語句的的作用是求求出每個部部門薪水最最高的員工工記錄。seleect ee1.enname,e2.eenamee froom emmp e11,empp e2 wherre e11.mgrr=e2.empnno;對于于在同一張張表中進行行查詢時需需要進行自自連接,為為表取別名名便于寫出出條件和比比較。這條條語句的意意思是找出出每個員工工的經(jīng)理人人。為同一一張表起不不同的別名名然后當(dāng)成成兩張表來來用。在SQLL99里面面鏈接條件件和過濾條條件是分開開的,即鏈鏈接條件不不能出現(xiàn)在在wherre語句里里面,利用用Joinn+表名+on+鏈鏈
24、接條件進進行。比如如:sellect enamme ,jjob,ddnamee froom emmp jooin ddept on (emp.depttno=ddept.depttno);等值鏈接接的時候有有一個簡便便的寫法uusingg(depptno)代替onn (emmp.deeptnoo=deppt.deeptnoo)但不推推薦使用,因因它的限制制條件很多多,可能報報出來的錯錯誤很難找找并且看起起來也不是是很清楚。連接有各各種各樣的的形式,下下面我們講講外連接,其其實用起來來特別方便便。它會把左左邊那張表表不能和右右邊鏈接的的數(shù)據(jù)也拿拿出來。sselecct t11.enaame ,
25、t2.enamme mggr , t1.ddeptnno frrom eemp tt1 left outeer jooin eemp tt2 onn (t11.mgrr=t2.empnno);oouterr可以省略略掉效果一一樣。如果果想把右邊邊多余的拿拿出來Jooin前加加上rigght即可可;如果兩兩邊多余的的都想拿出出來Joiin前加上上fulll叫全外連連接。講一道面面試題,不不準(zhǔn)用組函函數(shù)求出薪薪水的最高高值。方法法是用自連連接,連接接條件采用用非等值連連接,這這樣表中的的最大值就就會連接不不上,然后后再從emmp表中找找出未連接接上的最大大值,如下下:sellect sal fro
26、mm empp wherre saal noot inn (seelectt t1.sal fromm empp t1 joinn empp t2 on (t1.ssal(seelectt maxx(sall) frrom eemp wwheree emppno nnot iin (sselecct diistinnct mmgr ffrom emp wherre mggr iss nott nulll) and empnno inn (seelectt disstincct mggr frrom eemp wwheree mgrr is not nulll );再講一道道面試題:比較這兩兩個
27、語句的的執(zhí)行效率率Selecct * fromm empp wheere ddeptnno=100 andd enaame llike %A%;Selecct * fromm empp wheere eenamee likke %A% and depttno=110;理論上說應(yīng)應(yīng)該是第一一個,就如如同&和和&的區(qū)別別一樣它會會過濾掉很很多條件,后后面的字符符串就不用用再取去比比較了,但但實際中不不好說因為為有可能OOraclle在執(zhí)行行的時候做做了優(yōu)化,自自動將數(shù)字字比較放前前面了。四現(xiàn)在已經(jīng)經(jīng)講完了sselecct語句,接接下來講ddml語句句,常見的的有三條,他他們和seelectt語句合
28、稱稱為數(shù)據(jù)庫庫的四大語語句(seelectt/inssert/updaate/ddelette)。增刪改查查!接下來簡簡單介紹一一下Oraacle的的邏輯結(jié)構(gòu)構(gòu)。安裝的的時候創(chuàng)建建了一個全全局數(shù)據(jù)庫庫,同時為為這個數(shù)據(jù)據(jù)庫建立了了一系列管管理它的進進程SIDD。一個大數(shù)數(shù)據(jù)庫里面面又區(qū)分為為不同的表表空間,說說白了就是是裝表的地地兒。我們們現(xiàn)在的表表是放在不不同的表空空間里面,比比方說ussers表表空間,在在里面放著著某個用戶戶所有的表表,當(dāng)該用用戶登錄進進去后其實實是去訪問問自己的表表空間里的的相對應(yīng)的的表??梢砸詫⒛硞€表表空間里的的內(nèi)容全部部copyy出去創(chuàng)建建一個新的的userr,然后
29、該該userr就操作專專屬于自己己的表空間間里的表了了,所以說說Oraccle是支支持多用戶戶的。將某個表表空間里的的內(nèi)容全部部copyy出去創(chuàng)建建一個新的的userr做法是這這樣的:11.以超級級管理員登登錄數(shù)據(jù)庫庫connn syss/oraacle as ssysdbba; 2.從命令令行在起一一個cliient,先先建立一個個目錄如CC:teest進入入該目錄后后執(zhí)行deel *.*刪除所所有,然后后鍵入命令令exp后后提示輸入入用戶名和和口令,就就是你要備備份哪個就就輸哪個,接接下來提示示輸入數(shù)組組提取緩沖沖區(qū)大小,這這個沒關(guān)系系(內(nèi)存里里的一個小小區(qū)域填滿滿了再統(tǒng)一一拿到硬盤盤上來
30、)一一路回車就就行,等著著它導(dǎo)完就就可以了;3.創(chuàng)建新新用戶crreatee useer huuangggang idenntifiied bby haaha08832 ddefauult ttableespacce ussers quotta 100M onn useers;用用戶名huuangggang口口令hahha08332在ussers表表空間里分分配10MM的默認表表空間給該該用戶;4.給予相相應(yīng)權(quán)限ggrantt creeate sesssion,creaate ttablee,creeate vieww to huanngganng,如果果沒有seessioon它登錄錄都是問題
31、題;5.導(dǎo)入入文件immp后回車車幾個后提提示是否導(dǎo)導(dǎo)入整個導(dǎo)導(dǎo)出文件選選否后輸入入想導(dǎo)入的的那個用戶戶數(shù)據(jù)的用用戶名。只有2和和5是在命命令行中完完成,其余余是超級用用戶登錄后后在數(shù)據(jù)庫里里完成。inseert iinto+表名+vvaluees(各字字段值),在在對這些數(shù)數(shù)據(jù)進行操操作時最好好有一個備備份,方法法很簡單rrollbback回回退操作,create table 表名 as select * from +欲備份表名;insert語句還有一種插入方法,insert into dept2(deptno,loc) values(50,beijing);只是插入部分字段的值,其他字段的
32、值為null,還有一種方法是insert into dept2 select * from dept;將select子句選出的記錄挨個插入前提是選出的記錄與該表的記錄格式相同。在Oraacle中中取完相應(yīng)應(yīng)字段后,會會在末尾附附加一個偽偽字段,你你看不到,叫叫做rowwnum,它它是記錄下下每條記錄錄在第幾行行了,用它它的時候有有個限制條條件只能與與或=6 annd r=10;這個在Orraclee里面是效效率最高的的,如果通通過連接數(shù)數(shù)據(jù)庫用JJava編編程來做,但但效率相當(dāng)當(dāng)?shù)?。這個個重點掌握握,比如說說顯示論壇壇里的帖子子是分頁顯顯示的,如如果想顯示示第4頁的的內(nèi)容一定定是從某一一個帖子
33、到到某一個帖帖子顯示出出來,帖子子這個記錄錄是按照發(fā)發(fā)帖時間倒倒序排列的的。三層嵌嵌套就是OOraclle對這種種問題的解解決方案,當(dāng)當(dāng)然每一種種數(shù)據(jù)庫有有自己的解解決方式。SQL面面試題:有3個表表S,C,SC。SS(SNOO,SNAAME)代代表(學(xué)號號,姓名);C(CNNO,CNNAME,CTEAACHERR)代表(課課號,課名名,教師);SC(SSNO,CCNO,SSCGRAADE)代代表(學(xué)號號,課程成成績)。問題:找出沒選過過“黎明”老師課程程的所有學(xué)學(xué)生姓名;列出2門以以上(含22門)不及及格學(xué)生姓姓名及平均均成績;既學(xué)過1號號課程又學(xué)學(xué)過2號課課程所有學(xué)學(xué)生姓名。請用標(biāo)準(zhǔn)SSQ
34、L語言言寫出答案案,方言也也行(請說說明使用什什么方言)。selecct snname fromm s jjoin sc oon (ss.snoo=sc.sno) joiin c on (no=scc.no) wheere cc.cteeacheer limiing; (2) sselecct snname fromm s wwheree snoo in (sellect sno fromm sc wherre sccgradde =2); (3) sselecct snname fromm s wwheree snoo in (sellect sno fromm sc wherre cnno
35、=1 and sno = (sselecct snno frrom ssc whhere cno=2);updatte 的作作用相對于于對記錄進進行修改。用法是uupdatte+表名名+sett+字段列列表及更新新值過濾條件;ddelette+frrom+表表名+過濾濾條件,刪刪除某些字字段。五接下來講講數(shù)據(jù)定義義語言dddl語言。它實現(xiàn)了了數(shù)據(jù)表,視視圖等的建建立。事務(wù)務(wù)trannsacttion就就是一系列列的操作,要要么同時完完成要么不不完成,比比如轉(zhuǎn)賬操操作要對兩兩個賬戶uupdatte,不會會出現(xiàn)數(shù)據(jù)據(jù)不一致。對于Orraclee來說,一一個traanscaationn起始于一一條d
36、mll語句,然然后一系列列的操作rrollbback回回退事務(wù)會結(jié)束束;或coommitt結(jié)束事務(wù)務(wù),再roollbaack也沒沒用;當(dāng)遇遇到一條ddcl語句句或ddll語句提交交結(jié)束事務(wù)務(wù);當(dāng)正常常退出exxit時提提交結(jié)束事事務(wù),不正正常退出時時(如斷電電)自動回回滾結(jié)束事事務(wù)。數(shù)據(jù)庫常常用對象是是指它經(jīng)常常使用的一一些資源,比方說表、視圖或其他資源。下面講如何創(chuàng)建一張表,create table +表名+字段及字段的數(shù)據(jù)類型。Oracle常用的數(shù)據(jù)類型有變長字符串varchar2(最長字符數(shù)即上界4k)、定長字符串char(所占大?。S辛俗冮L字符串后為什么還要有定長字符串呢?主要還是效
37、率問題,跟數(shù)組很像,但是站空間,很多結(jié)構(gòu)、算法都存在拿空間換時間問題,如HashTable。數(shù)字型number(m,n)m指總共多少為,n是小數(shù)點后的位數(shù);日期date,包含年月日時分秒;變長字符串long可達2G,主要是有些時候一篇文本相當(dāng)長;存圖片可以把硬盤上圖像的名字存到數(shù)據(jù)庫里,也可以把整張圖片存到數(shù)據(jù)庫里。創(chuàng)建一張張表存放學(xué)學(xué)生數(shù)據(jù)如如:creatte taable stu ( id nnumbeer(8), namee varrcharr(20), sex numbber(110), age numbber(33), sdatte daate, gradde nuumberr(2)
38、 defaault 1, classs nuumberr(2), emaiil vaarchaar2(550) );sex取數(shù)數(shù)字來表示示更節(jié)省空空間,入學(xué)學(xué)時日期加加個s避免免和關(guān)鍵字字沖突,可可以為某些些字段指定定默認值當(dāng)當(dāng)插入記錄錄時沒有對對該字段賦賦新值就以以該默認值值,其他沒沒有默認值值為nulll。五個約束束條件第一一個叫非空空,第二個個叫唯一,第第三個叫主主鍵,第四四個叫外鍵鍵第五個叫叫checck。當(dāng)我我們創(chuàng)建這這張表的時時候,有一一個最簡單單的條件字字段非空nnot nnull。在Oraacle里里面約束條條件也可以以看成一個個對象,能能為之取一一個名字,加一個關(guān)鍵字cons
39、traint+約束名,如name varchar(2) constraint stu_name_nn not null,不起時系統(tǒng)自動起名字我們不用管了。唯一約束的意思是在這個字段里面所有的記錄不能重復(fù),如id number(8) unique,這屬于字段級的約束;字段級的約束有些限制,比如要某些字段組合不能重復(fù),還有就是兩個空值它不認為是重復(fù)的。要達到表級約束方法是在最后一個字段寫完后加一句如:constraint stu_name_email_uniuniquue(emmail,namee)。主鍵(pprimaary kkey)是是可以唯一一標(biāo)示整條條記錄的東東西,它代代表的意思思是既不能
40、能為空又不不能重復(fù),比如學(xué)生學(xué)號。E-mail做主鍵不好因為它可以為null,同時索引的時候數(shù)字比字符串效率高。如id number(8) primary key ,也可以加在表級,如constraint stu_id_pk primary key(id),主鍵也可以是多個字段組合。外鍵約束束建立在一一張表的兩兩個字段上上或者是兩兩張表的兩兩個字段上上,是比較較麻煩的一一種約束。在empp和deppt就有外外鍵約束,往emp里加記錄的時候不允許再dept里沒有的部門編號。class number(2) references class(id),參考class這張表的id字段,當(dāng)然也可以加在表級
41、上:constraint foreign key (class) references class(id),。注意在寫外鍵約束的時候,stu里的class叫參考字段,class里的id叫被參考字段,加外鍵的前提是被參考字段必須是主鍵。刪一條記錄的時候首先看有沒有其他字段參考它,有的話是無法刪除的,違反了完整約束條件。Checck約束用用得比較少少,在寫mmis系統(tǒng)統(tǒng)時數(shù)據(jù)在在Javaa程序里就就已經(jīng)校驗驗過了。修修改表結(jié)構(gòu)構(gòu)是在現(xiàn)有有表上修改改。在任何何項目開發(fā)發(fā)時候建表表的SQLL語句是要要保存下來來的,所以以可以將表表整個刪掉掉再建。添添加字段aalterr tabble +表名+aadd
42、(字字段名+數(shù)數(shù)據(jù)類型)如altter ttablee deppt2 aadd(ddphonne vaarchaar2(111);刪除某個個字段如aalterr tabble ddept22 droop(dpphonee);還可可以修改字字段的數(shù)據(jù)據(jù)類型,如如果里面已已經(jīng)有數(shù)據(jù)據(jù)修改的后后果應(yīng)不影影響原來存存的記錄值值。在Oraacle里里面看當(dāng)前前用戶下有有哪些表,哪哪些約束,哪哪些視圖等等等這些信信息被單獨獨地裝在一一張表里面面,稱作數(shù)數(shù)據(jù)字典表表。useer_taabless里面裝的的是當(dāng)前用用戶共有多多少張表,里面字段可多了,我們關(guān)心的是table_name。查詢當(dāng)前用戶下有哪些視圖:
43、select view_name from user_views;查詢當(dāng)前用戶下有哪些表:select table_name from user_tables;查詢當(dāng)前用戶下有哪些約束:select constraint_name,table_name from user_constraints;。user_tables、user_constraints、user_views這些都是數(shù)據(jù)字典表,那么一共有多少個數(shù)據(jù)字典表呢?Oracle專門有另外一張表存放數(shù)據(jù)字典表的表叫做dictionary,它總共兩個字段一個叫table_name數(shù)據(jù)字典表的名字、還有一個叫comments對于這張數(shù)據(jù)字典
44、表的描述。總共有600多個數(shù)據(jù)字典表,這就是Oracle的DBA總是背著個小本本的原因,你要背是不可能的。索引就相相當(dāng)于字典典里的索引引一樣,它它在Oraacle里里相當(dāng)于一一種新的數(shù)數(shù)據(jù)庫對象象,建立索索引的方法法creaate iindexx idxx_stuu_emiil onn stuu (emmail);也可以以在字段組組合上建立立索引,以以后在查詢詢組合時效效率就高,刪刪除索引同同刪除表方方法類似。忘了自己己有哪些索索引可以采采用sellect indeex_naame ffrom userr_inddexsee;當(dāng)你給給某張表的的字段加主主鍵或唯一一性約束的的時候。建建立索引的的
45、用處是當(dāng)當(dāng)你建立了了索引后取取訪問相應(yīng)應(yīng)數(shù)據(jù)的時時候效率會會很高。注注意說的是是讀的效率高高了,但存存的效率反反而低了,因因為你得同同時往索引引表里加索索引值,會會占用大量量的空間。記住一點點不要輕易易建立索引引,除非覺覺得訪問量量特別大時時。視圖前面面也提過,它它是一張?zhí)撎摫?,?yán)格格來講就是是一個子查查詢。利用用它可以簡簡化我們的的查詢復(fù)雜雜度,同時時它也有不不好的地方方,就是表表結(jié)構(gòu)改了了它也得跟跟著改動,增增加了維護護的難度。視圖有些些其他功能能,比如說說我有一個個數(shù)據(jù)庫,它它里面存了了所有的產(chǎn)產(chǎn)品信息,而有一個供應(yīng)商他想看我產(chǎn)品的信息,如果我把整張表都給他看那么關(guān)鍵信息他就全部都看走了
46、,我的銷量有多少等等。我可以建立一個視圖里面只包含我想要給他看的內(nèi)容。序列是OOraclle數(shù)據(jù)庫庫獨有的東東西,它產(chǎn)產(chǎn)生一個唯唯一、不間間斷的序列列,作用是是一般做主主鍵。如下下我們要存存儲BBSS里的帖子子建立一張張表:creatte taable artiicle (id nuumberr,titlee varrcharr2(10024),cont longg);如果要加入入一篇文章章,采用這這種做法sselecct maax(idd) frrom aarticcle;然然后知道了了id往里里插,但若若有另外一一個客戶端端在做數(shù)據(jù)據(jù)插入同時時也在執(zhí)行行完上面一一條語句插插入了一條條記錄就
47、會會導(dǎo)致數(shù)據(jù)據(jù)不一致的的現(xiàn)象。為為此我們可可以創(chuàng)建一一個seqquencce,每次次插的時候候訪問它的的一個屬性性nexttval就就會得到不不重復(fù)的iid,實際際上它是在在內(nèi)部做了了同步的。六范式就是是數(shù)據(jù)庫設(shè)設(shè)計的一些些規(guī)則,而而它又是由由一個姓范的提出的的。講到設(shè)設(shè)計其實是是很復(fù)雜的的事情,不不能指望用用幾條規(guī)則則把所有的的都總結(jié)出出來(你在在造永動機機,追求銀銀彈sillver bulllet),所以有時時要具體問問題具體分分析,該打打破三范式式的時候還還是要敢于于打破。三范式追追求的是這這樣的目標(biāo)標(biāo):不存在在冗余數(shù)據(jù)據(jù),換句話話說就是同同樣的數(shù)據(jù)據(jù)不存第二二遍。當(dāng)然除了了冗余性外外還
48、有一些些邊緣性的的要求,不不是很重要要,講到的的時候再說說。第一范式式的第一個個要求-要要有主鍵;第二個要要求-列不不可分,不不能說姓名名我還要分分成姓和名名。第二范式式當(dāng)一張表表里有多個個字段作為為組合主鍵鍵的時候,非非主鍵的字字段不能夠夠依賴于部部分主鍵,多對多關(guān)系的表應(yīng)分割成三張表,如前一個面試題。第三范式式是不能存存在傳遞依依賴,即除除了主鍵之之外的其他他字段必須須直接依賴賴于主鍵。比如emmp表里的的depttno依賴于于empnno,而lloc依賴賴于emppno所以以不能放一一張表里。七PL_SSQL是OOraclle里面的的一個編程程語言,比比較有用,在在Oraccle內(nèi)部部寫
49、一些存存儲過程,觸觸發(fā)器,函函數(shù)。基本上每每一種數(shù)據(jù)據(jù)庫都有這這么一個語語言,SQQL-Seerverr叫做T_SQL,如果每個個都學(xué)比較較累,但是是可以取學(xué)學(xué)一種然后后其他實在在要用時再再查上手要要快很多??赡芤院蠛笪覀兘佑|觸的寫存儲儲過程機會會很少,實實際上我們們用SQLL和Javva程序就就可以解決決大部分問問題了,這這只是讓大大家有個了了解知道有有這么回事事。PL語言言用來補充充SQL語語言的,因因為后者不不帶有分支支和循環(huán),對對于有些問問題求解不不便,而過過程語言可可以解決。PL_SSQL寫程程序非常固固定,分為為四塊,第第一塊叫ddeclaare,聲聲明各種變變量和游標(biāo)標(biāo)的地方,可
50、可選;第二二個叫beegin,就就是說程序序從這開始始執(zhí)行了;exceeptioon是caatch到到任何異常常時要執(zhí)行行的;ennd是結(jié)束束,后面得得有一個分分號。set sserveerouttput on;beginn dbmss_outtput.put_linee(hii,pl_sql!);end;/第一句是將將內(nèi)部環(huán)境境變量打開開,默認的的是關(guān)掉的的,不然看看不到任何何輸出結(jié)果果。dbmms_ouutputt相當(dāng)于ssysteem.ouut而puut_liine相當(dāng)當(dāng)于priintlnn。declaare v_nname varcchar22(20);beginn v_nname :
51、= huanngganng; dbmms_ouutputt.putt_linne(v_nname);end;/變量名的寫寫法是v_+名字,聲聲明的時候候是變量名名在前,類類型在后;賦值語句句有點像ppascaal冒號等等號;declaare v_namee nummber := 00; begiin v_namee := 2/v_namee; dbbms_ooutpuut.puut_liine(vv_namme); exceeptioon whhen ootherrs thhen dbmss_outtput.put_linee(Errror!); end; /當(dāng)檢測到異異常時才執(zhí)執(zhí)行excce
52、ptiion,wwhen otheers tthen 這樣做就就相當(dāng)于一一張大網(wǎng)子子,肯定能能把異常捕捕獲到。PL_SSQL變量量聲明規(guī)則則:變量名名不能夠使使用保留字字(Oraacle里里保留字很很多所以推推薦使用vv_+名字字,這樣不不易沖突),如select、from等;第一個字符必須是字母;變量名最多包含30個字符;不要與數(shù)據(jù)庫的表或者列同名;每一行只能聲明一個變量。常用變量類型7種:binary_integer整數(shù)主要是計數(shù)而不是用來表示字段類型(用來for循環(huán),數(shù)組下標(biāo),效率比較高,Oracle追求的目標(biāo));number數(shù)字類型;char定長字符串;date日期;long長字符串可
53、達2GB;boolean布爾可取true、false或null值,建議大家布爾類型在用的時候一定要給一個初值,否則是null。declaare v_tempp nummber(1); v_counnt biinaryy_inttegerr :=00; v_saal nuumberr(7,22) := 40000.000; v_daate ddate := ssysdaate; v_pii connstannt nuumberr := 3.144; v_vaalid boollean := ffalsee; v_naame vvarchhar2(20) not nulll :=myNaame;
54、begiin dbbms_ooutpuut.puut_liine(v_teemp vvaluee:|v_daate); end; /dbms_outpput.pput_lline不不能打印處處布爾類型型的值。CConsttant相相當(dāng)于Jaava的ffinall ,noot nuull對變變量進行限限制。Oraccle里面面的變量經(jīng)經(jīng)常用來存存儲某一張張表的某個個字段的值值,使用%typee屬性為了了解決表里里字段的變變動與聲明明變量類型型一致。在在PL_SSQL里面面可以使用用 兩個短短橫線注釋釋掉一行,注注釋掉多行行的時候用用/* */。declaare v_empnno nuumberr
55、(4); v_empnno2 eemp.eempnoo%typpe; v_empnno3 vv_emppno2%typee; begiin dbbms_ooutpuut.puut_liine(Testt); end;%typee可以看做做變量的一一個屬性,指指示其類型型;引用某某張表某個個字段方法法如v_eempnoo2 emmp.emmpno%typee;。下面接著著講PL_SQL里里面復(fù)雜的的變量,可可以定義復(fù)復(fù)合變量,有有兩種:TTablee相當(dāng)于JJava里里的數(shù)組;Recoord相當(dāng)當(dāng)于Javva里的類類,暫且這這樣理解。要指定ttablee的數(shù)據(jù)類類型,比較較復(fù)雜是這這樣來做typ
56、ee typpe_taable_emp_empnno iss tabble oof emmp.emmpno%typee inddex bby biinaryy_inttegerr;typpe定義了了一種新的的數(shù)據(jù)類型型名字叫ttype_tablle_emmp_emmpno,然后可以用它定義新變量如 v_empnos type_table_emp_empno;。比較有意思的是下標(biāo)可以取負值如v_empnos(-1)。是什么促促使了reecordd類型數(shù)據(jù)據(jù)的出現(xiàn)呢呢?我們現(xiàn)現(xiàn)在寫的是是PL_SSQL,它它最主要用用于操縱表表,表里面面有字段、記錄,如如果把一條條記錄放一一個變量里里以后用起起來要
57、方便便得多。聲聲明這種類類型的方式式如:declaare typpe tyype_rrecorrd_deept iis reecordd( deeptnoo deppt.deeptnoo%typpe, dnname deptt.dnaame%ttype, looc deept.lloc%ttype); v_ttemp typee_reccord_deptt;beginn v_ttemp.depttno := 500; v_ttemp.dnamme := aaaaa; v_ttemp.loc := bj; dbmms_ouutputt.putt_linne(v_tempp.depptno| |
58、vv_temmp.dnname);end;/這樣聲明還還有一個弊弊病,那就就是當(dāng)字段段改變時控控制起來比比較煩人,為為此引入rrowtyype屬性性來聲明rrecorrd變量。只需:declaare v_ttemp deptt%rowwtypee;beginn v_ttemp.depttno := 500; v_ttemp.dnamme := aaaaa; v_ttemp.loc := bj; dbmms_ouutputt.putt_linne(v_tempp.depptno| | vv_temmp.dnname);end;/PL_SSQL語句句里的seelectt語句只能能返回一條條記錄,且
59、且seleect語句句里面必須須有個innto或使使用游標(biāo),還還要保證有有且僅有一一條記錄被被返回,這這是它比較較特別的地地方,不然然會報錯。在PL_SQL里里面使用iinserrt、deeletee、upddate后后加上coommitt不然起不不了作用有有時,只不不過。同時還有有這么一個個需求-執(zhí)執(zhí)行上述語語句以后有有多少條記記錄受影響響(除seelectt,對它來來說沒多大大意義),這這樣做:dbms_outpput.pput_lline(sql%rowccountt|條記記錄受影響響);sqql代表剛剛剛執(zhí)行完完的sqll語句,而而rowccountt代表剛剛剛執(zhí)行完的的sql語語句影
60、響了了多少條記記錄。如果在PPL_SQQL里創(chuàng)建建一張表得得這樣寫:execcute immeediatte ccreatte taable T(nnnn vaarchaar2(220) deffaultt aaaa); 由于外面面已經(jīng)有單單引號了所所以里面的的一個單引引號得用兩兩個代表一一個。deefaullt是給一一個默認值值。PL_SSQL里條條件語句是是形如iff (條件件) thhen elssif (條件) thenn elsse endd if;注意最后后一個ellse后沒沒有theen,其他他條件后有有,而且eelsiff沒有那個個e,最后后以endd if;結(jié)束。PL_SSQ
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 山西傳媒學(xué)院《信息光學(xué)實驗》2023-2024學(xué)年第二學(xué)期期末試卷
- 炎黃職業(yè)技術(shù)學(xué)院《傳感器與智能測試技術(shù)》2023-2024學(xué)年第二學(xué)期期末試卷
- 二零二五年度醫(yī)院臨時檢驗師勞動合同規(guī)范
- 二零二五年度新能源汽車補貼申請與購車合同
- 《項目經(jīng)濟評價要素》課件
- 《網(wǎng)絡(luò)企業(yè)管理》課件
- 企業(yè)文化建設(shè)與員工融入制度
- 低碳技術(shù)推廣面臨的主要挑戰(zhàn)
- 低空經(jīng)濟中的安全風(fēng)險概述
- 《植物觀察記錄報告》課件
- 魚類和淡水生態(tài)系統(tǒng)
- 全國大學(xué)高考百科匯編之《哈爾濱工業(yè)大學(xué)》簡介
- 學(xué)校安全教育教你如何遠離危險
- 【人教版】九年級化學(xué)上冊全冊單元測試卷【1-7單元合集】
- 中國傳統(tǒng)文化課件6八卦五行
- 《胃癌課件:病理和分子機制解析》
- 口腔科導(dǎo)診分診技巧(PPT課件)
- 圓筒混料機-設(shè)計說明書
- 發(fā)電機臨時用電施工方案(定)
- 蓋板涵施工工藝流程配圖豐富
- 與食品經(jīng)營相適應(yīng)的主要設(shè)備設(shè)施布局、操作流程等文件
評論
0/150
提交評論