數(shù)據(jù)庫概念名詞及常用SQL_第1頁
數(shù)據(jù)庫概念名詞及常用SQL_第2頁
數(shù)據(jù)庫概念名詞及常用SQL_第3頁
數(shù)據(jù)庫概念名詞及常用SQL_第4頁
數(shù)據(jù)庫概念名詞及常用SQL_第5頁
已閱讀5頁,還剩3頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

數(shù)據(jù)庫筆試面試11、事務(wù)是什么?A:所謂事務(wù)是用戶定義的一個數(shù)據(jù)庫操作序列,這些操作要么全做要么全不做,是一個不可分割的工作單位。一視圖視圖是原始數(shù)據(jù)庫數(shù)據(jù)的一種變換,是查看表中數(shù)據(jù)的另外一種方式??梢詫⒁晥D看成是一個移動的窗口,通過它可以看到感興趣的數(shù)據(jù)。視圖是從一個或多個實際表中獲得的,這些表的數(shù)據(jù)存放在數(shù)據(jù)庫中。那些用于產(chǎn)生視圖的表叫做該視圖的基表。一個視圖也可以從另一個視圖中產(chǎn)生。視圖的定義存在數(shù)據(jù)庫中,與此定義相關(guān)的數(shù)據(jù)并沒有再存一份于數(shù)據(jù)庫中。通過視圖看到的數(shù)據(jù)存放在基表中。視圖看上去非常象數(shù)據(jù)庫的物理表,對它的操作同任何其它的表一樣。當通過視圖修改數(shù)據(jù)時,實際上是在改變基表中的數(shù)據(jù);相反地,基表數(shù)據(jù)的改變也會自動反映在由基表產(chǎn)生的視圖中。由于邏輯上的原因,有些視圖可以修改對應(yīng)的基表,有些則不能(僅僅能查詢)。視圖的作用*簡單性??吹降木褪切枰?。視圖不僅可以簡化用戶對數(shù)據(jù)的理解,也可以簡化他們的操作。那些被經(jīng)常使用的查詢可以被定義為視圖,從而使得用戶不必為以后的操作每次指定全部的條件。*安全性。通過視圖用戶只能查詢和修改他們所能見到的數(shù)據(jù)。數(shù)據(jù)庫中的其它數(shù)據(jù)則既看不見也取不到。數(shù)據(jù)庫授權(quán)命令可以使每個用戶對數(shù)據(jù)庫的檢索限制到特定的數(shù)據(jù)庫對象上,但不能授權(quán)到數(shù)據(jù)庫特定行和特定的列上。*邏輯數(shù)據(jù)獨立性。視圖可幫助用戶屏蔽真實表結(jié)構(gòu)變化帶來的影響。視圖可以使應(yīng)用程序和數(shù)據(jù)庫表在一定程度上獨立。如果沒有視圖,應(yīng)用一定是建立在表上的。有了視圖之后,程序可以建立在視圖之上,從而程序與數(shù)據(jù)庫表被視圖分割開來。如:如果應(yīng)用建立在視圖上,當應(yīng)用發(fā)生變化時,可以在表上修改視圖,通過視圖屏蔽應(yīng)用的變化,從而數(shù)據(jù)庫可以不動。三、數(shù)據(jù)庫索引索引的通俗理解:為表中的數(shù)據(jù)的一列或者幾列建一個目錄,目錄會告訴數(shù)據(jù)庫你要找的記錄在哪里。這樣就避免了全表查詢。提高數(shù)據(jù)庫表數(shù)據(jù)訪問速度。例如索引:CREATEINDEXIDX_CITY_CITYNAMEONCITY(CITYNAME);對表CITY按CITYNAME建一個目錄,當你要查找CITYNAME為深圳的記錄時,數(shù)據(jù)庫就去目錄中查找‘深圳’,找到深圳后,目錄會告訴數(shù)據(jù)庫,CITYNAME為深圳的記錄在哪里!從而避免全表查詢??梢曰跀?shù)據(jù)庫表中的單列或多列創(chuàng)建索引。多列索引可以區(qū)分其中一列可能有相同值的行。索引是消耗表空間大小的,當你執(zhí)行建立索引的sql時,數(shù)據(jù)庫會消耗一定的表空間來建立一個目錄(這個目錄對我們來說是不可見的),當你使用到索引進行查詢時,數(shù)據(jù)庫將在索引(目錄)中查找對應(yīng)記錄在磁盤上的物理位置,從而找到對應(yīng)記錄。以新華字典作比喻。按部首查詢的目錄就類似于數(shù)據(jù)庫中的非聚類索引。該目錄需要占據(jù)字典十幾頁版面(就象索引需要占據(jù)數(shù)據(jù)庫表空間),當我們要找‘唐’字時,我們到目錄中找到‘廣’字部首下的‘唐’字,目錄就告訴我們?nèi)プ值涞?55頁找‘唐’的釋義。(當數(shù)據(jù)庫要查找某條記錄時,使用了索引后,索引會告訴計算機對應(yīng)的記錄在磁盤的具體位置。)如果沒有任何索引,則需要去數(shù)據(jù)表中查找記錄時,數(shù)據(jù)庫會從第1條記錄開始查找符合條件的記錄,直到最后1條。(就象字典中沒有目錄,則我們需要在字典中,從第1頁開始找,直到找到為止)當然,雖然索引可以提高查詢速度,但是它們也會導(dǎo)致數(shù)據(jù)庫系統(tǒng)更新數(shù)據(jù)的性能下降,因為大部分數(shù)據(jù)更新需要同時更新索引。創(chuàng)建索引最普通的情況,是為出現(xiàn)在where子句的字段建一個索引。如在查詢時常用類似以下的語句:SELECT*FROMmytableWHEREcategory_id=1;最直接的應(yīng)對之道,是為category_id建立一個簡單的索引:CREATEINDEXmytable_categoryidONmytable(category_id);如果有不止一個選擇條件呢?例如:SELECT*FROMmytableWHEREcategory_id=1ANDuser_id=2;可以建立多重的索引:CREATEINDEXmytable_categoryid_useridONmytable(category_id,user_id);注意到在命名時的習(xí)慣了嗎?使用''表名—字段1名—字段2名''的方式。索引的類型A) 聚集索引(clusteredindex),表數(shù)據(jù)行的存儲順序與索引的存儲順序一致。一個表只能包含一個聚集索引。因為數(shù)據(jù)表的物理存儲順序只有一種。與非聚集索引相比,聚集索引通常提供更快的數(shù)據(jù)訪問速度。B) 非聚集索引(nonclusteredindex),表數(shù)據(jù)存儲順序與索引順序無關(guān)。一個數(shù)據(jù)表可以有多種非聚集索引。聚集索引和非聚集索引的區(qū)別?聚集索引中的順序也就是數(shù)據(jù)行的實際排列順序,每次增刪改等都可能進行數(shù)據(jù)行移動,對于聚集索引請不要建在將會頻繁修改的列上,因為數(shù)據(jù)行是按列值大小排序的,因此可能會引起數(shù)據(jù)行整行移動.所謂聚集也就是按順序的意思,索引列值大小相近的物理數(shù)據(jù)行排在一起.如字典里的拼音檢索。比如,我們要查“安”字,就會很自然地翻開字典的前幾頁,因為按照拼音排序漢字的字典是以英文字母“a”開頭并以“z”結(jié)尾的,那么“安”字就自然地排在字典的前部;同樣的,如果查“張”字,那您也會將您的字典翻到最后部分。也就是說,字典的正文部分本身就是一個目錄,您不需要再去查其他目錄來找到您需要找的內(nèi)容。非聚集則沒有這些特點,它和數(shù)據(jù)行的物理排列順序不相干,它只不過是物理數(shù)據(jù)的另一種"目錄"罷了,就象字典除了拼音檢索還是有其它好幾種檢索方式如果您認識某個字,您可以快速地從自動中查到這個字。但您不認識某個字也不知道它的發(fā)音,這時候,需要去根據(jù)“偏旁部首”查到您要找的字,然后根據(jù)這個字后的頁碼直接翻到某頁來找到您要找的字。但您結(jié)合“部首目錄”和“檢字表”而查到的字的排序并不是真正的正文的排序方法,比如檢字表中看到的連續(xù)的“馳、張、弩”三字實際上就是他們在非聚集索引中的排序,但在字典正文中的字分別在99、522、345頁,是在非聚集索引中的映射。它需要兩個過程,先找到目錄中的結(jié)果,然后再翻到您所需要的頁碼。為什么一個表只能有一個聚集索引,因為數(shù)據(jù)行的物理排序只能有一種.但是邏輯排序卻可以很多,在其它地方搞幾個"目錄''這就是邏輯排序,所以從這點上看我想連初中生都可以知道聚集索引大部分情況是比非聚集索引快的,因為有先天優(yōu)勢呢。索引的存儲一條索引記錄中包含的基本信息包括:鍵值(即索引指定的字段的值)+邏輯指針(指向數(shù)據(jù)頁或者另一索引頁)。常見的數(shù)據(jù)庫系統(tǒng),其索引使用的數(shù)據(jù)結(jié)構(gòu)多是B-Tree或者B+Tree。例如,MsSql使用的是B+Tree,Oracle及Sysbase使用的是B-Tree。B-Tree不同于BinaryTree(二叉樹,最多有兩個子樹),一棵M階的B-Tree滿足以下條件:1) 每個結(jié)點至多有M個孩子;2) 除根結(jié)點和葉結(jié)點外,其它每個結(jié)點至少有M/2個孩子;3) 根結(jié)點至少有兩個孩子(除非該樹僅包含一個結(jié)點);4) 所有葉結(jié)點在同一層,葉結(jié)點不包含任何關(guān)鍵字信息;5) 有K個關(guān)鍵字的非葉結(jié)點恰好包含K+1個孩子;另外,對于一個結(jié)點,其內(nèi)部的關(guān)鍵字是從小到大排序的。以下是B-Tree(M=4)的樣例:2、oracle中truncate和delete命令有何區(qū)別?(1) delete將在回滾段中產(chǎn)生回滾信息,truncate不產(chǎn)生,因此無論表中的記錄多少,truncate執(zhí)行都很快。(2) truncate是DDL,執(zhí)行隱含的commit,truncate不能回滾。任何沒有提交的DML改變也將會和truncate一起提交。

truncate重置表及其索引高水位標志。全表掃描和索引快速全掃描讀高水位標志下的所有數(shù)據(jù)塊,因此在delete后全掃描性能沒有提高,但truncate后將會變快。truncate不觸發(fā)delete觸發(fā)器。沒有對象權(quán)限允許一個用戶truncate另一個用戶的表。這樣做需要DROPANYTABLE系統(tǒng)權(quán)限。當一個表被truncate,表及其索引的存儲將被重置回初始大小。而delete不收縮表及其索引的大小。當父表有一個可用的引用完整性約束時不能被truncate。必須先disable引用父表的外鍵約束,再truncate。3、Oracle中char和varchar2數(shù)據(jù)類型有什么區(qū)別?有數(shù)據(jù)"test”分別存放到char(10)和varchar2(10)類型的字段中,其存儲長度及類型有何區(qū)別?A:char是定長字符類型,varchar2是變長字符類型?!皌est”在char(10)中被補齊空格,存儲長度是10字節(jié),在varchar2(10)中存儲長度是4字節(jié)。4、參見如下表結(jié)構(gòu)作者:4作者代號作者:4作者代號charj4r作者名稱,varcha.E2I性別char^l),1年齡number(3),i文學(xué)方向varcharZ.t64)4荻獎名單:』獲獎日期date^4獲獎人員char(4).:4r出版社代碼char(2)>出版社名稱varchar2(32)^圖書4圖書編號char(S)J圖書名稱varchar2(12E)>出版社代碼char(2)J作者代號char(4)J/圖書簡介E1二編寫SQL語句,找出“作者”庫中沒有出現(xiàn)在“獲獎名單”庫中所有作者信息的SQL語句(提示:使用notin、notexists以及外關(guān)聯(lián)三種方法,并說明哪種方法最優(yōu))。select*from作者where作者代號notin(select獲獎人員from獲獎名單);select*from作者wherenotexists(select1from獲獎名單where作者.作者代號=獲獎名單.獲獎人員);select*from作者leftjoin獲獎名單on作者.作者代號=獲獎名單.獲獎人員where獲獎名單.獲獎人員isnull;外關(guān)聯(lián)的性能好于notexists,notexists好于notin。5、 Oracle數(shù)據(jù)庫表存在偽列rowid,請利用rowid編寫一個SQL語句,從以下記錄中找到唯一記錄,并將其flag列更新為YNonamesexflag1張三1N1張三1N1張三1Nupdatetsetflag='Y'whererowid=(selectmin(rowid)fromtt2wheret.no==andt.sex=t2.sex);6、Oracle中,需要在查詢語句中把空值(NULL)輸出為0,如何處理?A:selectnvl(c1,0)fromt1;7、 見第四題“獲獎名單”表,寫出SQL語句,查詢出在上一個月獲獎的人員。A:select*from作者join獲獎名單on作者.作者代號=獲獎名單.獲獎人員whereto_char(獲獎名單.獲獎日期,’yyyy-mm')=to_char(add_months(sysdate,-1),'yyyy-mm');8、見第四題“圖書”表,在表上對圖書名稱、出版社代碼、作者代號創(chuàng)建了組合索引,請問在執(zhí)行如下語句時會不會利用到索引。

Select*from圖書Select*fromSelect*from圖書Select*from圖書Select*from圖書Select*from圖書where圖書名稱=’xxxx’where圖書名稱=’xxxx’where圖書名稱=’xxxx’where出版社代碼=’yyy’and出版社代碼=’bb’and作者代號=’ddd’A:根據(jù)索引的“最左前綴”原理,前三個查詢會利用索引,最后一個不會。9、編寫一個簡單的Oracle存儲過程,輸出參數(shù)必須有一個是結(jié)果集。A:CREATEORREPLACEpackagepkg_getrecordisTYPEmyrctypeISREFCURSOR;endpkg_getrecord;/CREATEORREPLACEPROCEDUREp_ret_rs(r_cursorOUTpkg_getrecord.myrctype)ISBEGINOPENr_cursorFORSELECT*FROMt;EXCEPTIONWHENOTHERSTHENROLLBACK;RAISE;ENDp_ret_rs;/oralce數(shù)據(jù)庫一、選擇題1、 在sql的查詢語句中,用于分組查詢的語句是(c)。orderbyb)wherec)groupby d)having2、在“學(xué)生情況.dbf”表中,查詢計算機專業(yè)、助學(xué)金大于40元的學(xué)生的姓名,正確的語句是(c)。select姓名from學(xué)生情況where計算機.and.助學(xué)金<40select姓名from學(xué)生情況where專業(yè)=“計算機”.or.助學(xué)金>40select姓名from學(xué)生情況where專業(yè)=“計算機”.and.助學(xué)金>40select姓名from學(xué)生情況where專業(yè)=“計算機”.and.助學(xué)金<403、 下列sql語句中,修改表結(jié)構(gòu)的是(a)。a)alter b)createc)desc d)rename4、 已知職工表emp有工號e_no和工資e_sal兩個字段。從職工關(guān)系中檢索所有工資值,要求在輸出結(jié)果中沒有重復(fù)的工資值,則sql的命令語句能實現(xiàn)上述功能的是(b)。a)selectalle_salfromempb)selectdistincte_salfromempc)selecte_salfromempd)selecte_salwhereemp5、 請選出屬于dml的選項(c)a)truncateb)creatc)delete d)drop6、 視圖存放在哪里(b)a.數(shù)據(jù)庫的表中 b.數(shù)據(jù)字典的select語句中c.from列表的第一個表格的select語句中d.列表的第二個表格的select語句中7、 當fetch執(zhí)行失敗時,哪種游標的屬性值為true(c)%isopen b.%foundc.%notfound d.%rowcount8、 下列那些說法是正確的(b)一個事務(wù)中的某條sql命令提交時,其它sql命令可以不提交。在一個關(guān)系表中,主鍵可唯一標識一行記錄。一個關(guān)系表中的外鍵必定是另一表中的主鍵?;貪L可以在事務(wù)失敗時,回到操作事務(wù)前的數(shù)據(jù)狀態(tài)。9、假如一個變量的值為null,有一條if語句,if變量=null分支1else分支2請問最終執(zhí)行的結(jié)果是(b)a)分支1b)分支2c)系統(tǒng)錯誤提示d)都沒有執(zhí)行10、 關(guān)于主鍵(primarykey)和唯一索引(uniqueindex)的說法哪些是錯誤的?(a)a、 唯一索引的列允許為null值b、 主鍵的列不允許為null值c、 一個表只能有一個唯一索引11、 教師信息表teacher包含以下字段:last_namevarchar2(25)first_namevarchar2(25)email varchar2(25)下面哪個語句可以顯示無email地址的教師的姓名(c)selectlast_name,fist_namefromteacherwhereemail=nullselectlast_name,first_namefromteacherwhereemail<>nullselectlast_name,first_namefromteacherwhereemailisnullselectlast_name,first_namefromteacherwhereemailisnotnull12、 在執(zhí)行一個查詢時哪個是正確的順序?(c)a、解析、執(zhí)行 b、執(zhí)行、解析、獲取c、解析、執(zhí)行、獲取 d、解析、獲取二、判斷對錯1、 一個表空間可以含有多個數(shù)據(jù)文件,一個數(shù)據(jù)文件也可以跨多個表空間。一個表不可以跨表空間(錯誤)2、 一個表test有字段id,name,age,address,email,salary刪除age大于平均年齡的記錄。這樣寫可以嗎?deletefromtestwhereage>avg(age);(錯誤)3、betweenand運算符是否既可以用于數(shù)值表達式,又可以用于字符表達式?(正確)二、簡答題:1、 用sql語句寫出以下操作a、 建一張數(shù)據(jù)表emp(職工信息表),包含工號、姓名、性別、部門、年齡、工資等字段。createtableemp(idnumber,namevarchar2(20),sexchar(4),departmentvarchar2(20),agenumber,salarynumber(6,2));b、 往該數(shù)據(jù)表中添加一條記錄。insertintoempvalues(1,’xiaozhang’,’男’,’銷售部’,23,1200.0);c、 假設(shè)該表中存在3000條員工的相關(guān)信息,要求顯示所有年齡在20到30歲之間的人員記錄select*fromempwhereagebetween20and30;d、 假設(shè)有一個銷售部,請給出銷售部門所有女職員的工資總數(shù)selectsum(salary)fromempwheredepartment=’銷售部’andsex=’女’;2、 什么是ddl、什么是dml,請分別列舉一些。

溫馨提示

  • 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)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論