數(shù)據(jù)庫程序員面試分類真題6_第1頁
數(shù)據(jù)庫程序員面試分類真題6_第2頁
數(shù)據(jù)庫程序員面試分類真題6_第3頁
數(shù)據(jù)庫程序員面試分類真題6_第4頁
數(shù)據(jù)庫程序員面試分類真題6_第5頁
已閱讀5頁,還剩13頁未讀, 繼續(xù)免費(fèi)閱讀

付費(fèi)下載

下載本文檔

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

文檔簡介

數(shù)據(jù)庫程序員面試分類真題6簡答題1.

什么是多表連接查詢?正確答案:多表連接查詢是指基于兩個或兩個以上的表或視圖的查詢。在實(shí)際應(yīng)用中,查洵單表不可能滿足業(yè)務(wù)的需求,只能通過多表的連接來獲取所需要的(江南博哥)數(shù)據(jù)。多表連接查詢主要分為等值連接、非等值連接、外連接和自連接四類。

需要注意的是,WHERE子句中的連接條件的個數(shù)不能少于FROM后表的個數(shù)減1,這樣可以確保不會形成笛卡兒積。即為了連接n個表,至少需要n-1個連接條件。例如,為了連接5個表,至少需要4個連接條件。[考點(diǎn)]SQL編寫

2.

笛卡兒積是什么?正確答案:笛卡兒積是把表中所有的記錄做乘積操作,生成大量的結(jié)果,而通常結(jié)果中可用的值有限。笛卡兒積出現(xiàn)的原因多種多樣,通常是由于連接條件缺失造成的。對笛卡兒積的使用,需要注意以下幾點(diǎn):

1)笛卡兒積會在下面條件下產(chǎn)生:

①省略連接條件或連接條件缺失。

②連接條件無效,例如,表A和表B進(jìn)行連接,但連接條件為A.ID=A.ID,這里的連接條件無效。

③統(tǒng)計(jì)信息不準(zhǔn)確,例如,表A有1000W的數(shù)據(jù)量,但是在統(tǒng)計(jì)信息中記錄的是0行,這種情況下表的連接易形成笛卡兒積。

2)由于笛卡兒積中的所有表中的所有行互相連接,所以,形成笛卡兒積的結(jié)果集的記錄數(shù)是組成它的各個子集的乘積。

3)為了避免笛卡兒積,需要在WHERE字句中加入有效的連接條件。

4)默認(rèn)情況下,查詢會返回全部行,包括重復(fù)行。[考點(diǎn)]SQL編寫

3.

什么是Fop-N查詢?正確答案:在數(shù)據(jù)庫查詢中,“Top-N分析”也稱“Top-N查詢”,就是獲取某一數(shù)據(jù)集合(表或查詢結(jié)果集)中的前N條記錄,例如,考試成績前三名的學(xué)生信息、銷量前十名的暢銷書信息、從當(dāng)前時刻開始最早起飛的五次航班信息等,實(shí)際應(yīng)用中Top-N分析經(jīng)常會用到。以下幾點(diǎn)是Top-N的性質(zhì):

1)Top-N分析就是查詢前幾名的意思。

2)在Oracle數(shù)據(jù)庫中,Top-N分析通過ROWNUM實(shí)現(xiàn)。

3)Top-N分析中必須使用ORDERBY排序子句。

4)Top-N分析中通常會有內(nèi)建視圖,一般的方法是先對內(nèi)建視圖的某一列或某些列排序,然后對此內(nèi)建視圖使用ROWNUM取前多少行數(shù)據(jù)。

如果要按照某種規(guī)則對符合條件的查詢結(jié)果進(jìn)行排序,再返回查詢結(jié)果中的全部記錄行,那么這是很容易做到的。例如,要查詢10號和20號部門所有員工的工資信息,可采用如下方式:

SELECTEMPNO,ENAME,SALFROMSCOTT.EMPDWHEREDEPTNOIN(10,20)ORDERBYD.EMPNO;

如果是要在排序查詢中進(jìn)行Top-N分析,那么情況要復(fù)雜一些。例如,要求按照工資降序排列,查詢10號和20號部門工資最高前五名員工的信息,則SQL語句為

在以上結(jié)果中,“原始行號”RN的含義為子查詢結(jié)果排序前的行號(子查詢執(zhí)行了WHERE子句之后,但尚未執(zhí)行ORDERBY子句排序時的行號)。ROWNUM是Oracle數(shù)據(jù)庫對查詢結(jié)果自動添加的一個偽列。簡單地說,就是在每一次查詢操作中,Oracle都會對符合條件的查詢結(jié)果中的每一條記錄行自動進(jìn)行編號,該編號總是從1開始,并保存在偽列ROWNUM中。之所以稱之為“偽列”,是因?yàn)樗谖锢砩?查詢目標(biāo)表中)并不是真的存在,而是在每一次查詢過程中動態(tài)生成的。此外,由于偽列ROWNUM在物理上并不存在,因此,不允許以任何查詢基表的名稱作為前綴。[考點(diǎn)]SQL編寫

4.

什么是子查詢?子查詢包括哪幾種類型?正確答案:所謂子查詢是指嵌套在其他查詢中的查詢語句,又稱為內(nèi)部查詢或嵌套查詢。主查詢又稱為外部查詢,是包含其他子查詢的查詢語句。按照子查詢與主查詢的關(guān)聯(lián)關(guān)系,可以將子查詢分為“標(biāo)量子查詢(ScalarSubquery)”和“關(guān)聯(lián)子查詢”兩種,其中,關(guān)聯(lián)子查詢又可以分為相關(guān)子查詢(CorrelatedSubquery)和非相關(guān)子查詢(UncorrelatedSubquery),非相關(guān)子查詢也叫獨(dú)立子查詢。子查詢根據(jù)返回的行數(shù)分為單行子查詢和多行子查詢,若根據(jù)返回的列數(shù)則分為單列子查詢和多列子查詢。子查詢的分類可以參考下圖。

[考點(diǎn)]SQL編寫

5.

什么是合并查詢(集合查詢)?正確答案:有時在實(shí)際應(yīng)用中,為了合并多個SELECT語句的結(jié)果,可以使用集合操作符UNION、UNIONALL、INTERSECT、MINUS,這些集合操作符多用于數(shù)據(jù)量比較大的數(shù)據(jù)庫,運(yùn)行速度快,稱為合并查詢,也叫集合查詢。以下分別對這幾個命令進(jìn)行分析與講解。

1)UNION:該操作符用于計(jì)算兩個結(jié)果集的并集。當(dāng)使用該操作符時,會自動去掉結(jié)果集中的重復(fù)行,只保留重復(fù)行的一行結(jié)果。需要注意的是:

①當(dāng)執(zhí)行聯(lián)合查詢時,必須保證它們具有相同個數(shù)的結(jié)果列,否則報如下的錯誤:ORA-01789:查詢塊的結(jié)果列數(shù)。

②列的數(shù)據(jù)類型不同也報錯:ORA-01790:expressionmusthavesamedatatypeAScorrespondingexpression。數(shù)據(jù)類型的長度不一樣是可以的,但是必須保證是相同的數(shù)據(jù)類型。

2)UNIONALL:該操作符與UNION相似,但是它不會取消重復(fù)行,而且不會排序。

3)INTERSECT(相交):該操作符用于計(jì)算兩個結(jié)果集的交集。

4)MINUS(相減):該操作符用于計(jì)算兩個結(jié)果集的差集,它只會顯示存在第一個集合中,而不存在第二個集合中的數(shù)據(jù),而且第一個集合中的相同數(shù)據(jù)只輸出一個。

MINUS具有如下的實(shí)用功能:

1)比較兩個表中的某一個字段中的不同的數(shù)據(jù)。

2)比較兩個表的結(jié)構(gòu)的不同。示例如下:

SYS@lhrdb>CREATETABLET_LHR_01(IDNUMBER);

Tabletreatcd.

SYS@lhrdb>CREATETABLET_LHR_02(IDNUMBER,NAMEVARCHAR2(255));

Tablecreated.

SYS@lhrdb>SELECTC.COLUMN_NAMEFROMCOLSCWHEREC.TABLE_NAME='T_LHR_02'

2

MINUS

3

SELECTC.COLUMN_NAMEFROMCOLSCWHEREC.TABLE_NAME='T_LHR_01';

COLUMN_NAME

-----------------------

NAME

可見,表T_LHR_02比表T_LHR_01多出一列NAME。[考點(diǎn)]SQL編寫

6.

SQL:1999語法是什么?正確答案:Oracle除了自己的連接語法外,同時支持ANSI(AmericanNationalStandardsInstitute,美國國家標(biāo)準(zhǔn)協(xié)會)的SQL:1999標(biāo)準(zhǔn)的連接語法。SQL:1999是ANSI制定的通用標(biāo)準(zhǔn),各數(shù)據(jù)庫廠商都支持的一個標(biāo)準(zhǔn)。

SQL:1999語法格式如下:

SELECTtable.column,

table2.column

FROM

tablel

CROSS

JOINtable2|NATURALJOIN

table2|JOIN

table2

USING

(column_name)|

JOIN

table2

ON

(table1.column_name=table2.column_name)|

LEFT

|RIGHT

|FULL

OUTERJOIN

table2

ON

(table1.column_name=table2.column_name)

WHERE...;

其中,INNERJOIN表示內(nèi)連接;LEFTJOIN表示左外連接;RIGHTJOIN表示右外連接;FULLJOIN表示完全外連接;ON子句用于指定連接條件。連接分類圖如下圖所示。

各種表之間的連接方式見下表。

[考點(diǎn)]SQL編寫

7.

什么是交叉連接(CrossJoin)?正確答案:交叉連接(CrossJoin)子句是在SQL:1999標(biāo)準(zhǔn)中開始支持的,為了生成笛卡兒積而設(shè)計(jì)。連接語法中,交叉連接不使用WHERE子句,而是在FROM子句中的兩個連接表之間使用CROSSJOIN顯式標(biāo)明。例如:

SELECTEMPNO,ENAME,SAL,EMP.DEPTNO,DNAMEFROM

SCOTT.EMPCROSS

JOINSCOTT.DEPT;

上述語句返回的是被連接的兩個表所有符合查詢條件記錄行的笛卡兒積,其結(jié)果集合中的記錄行數(shù)等于第一個表中符合查詢條件的記錄行數(shù)乘以第二個表中符合查詢條件的記錄行數(shù),其效果等同于如下語句:

SELECTEMPNO,ENAME,SAL,EMP.DEPTNO,DNAMEFROMSCOTI.EMP,SCOTT.DEP;[考點(diǎn)]SQL編寫

8.

什么是內(nèi)連接(InnerJoin/Join)?正確答案:內(nèi)連接(InnerJoin/Join)是常用的查詢方式,也叫簡單連接,是從兩個或更多的表中篩選出符合連接條件的數(shù)據(jù)(記錄行),對其連接后再進(jìn)行查詢并返回結(jié)果,如果遇到無法滿足連接條件的數(shù)據(jù),那么將之丟棄。內(nèi)連接在FROM子句中使用INNERJOIN或JOIN關(guān)鍵字標(biāo)識,并使用ON子句指定連接條件以及其他的查詢限定條件。

內(nèi)連接可以分為等值連接和非等值連接。例如,“SELECT*FROMA,BWHEREA.FIELD1=B.FIELD2”屬于等值連接,它返回滿足左表輸入與右表輸入連接的每一行。[考點(diǎn)]SQL編寫

9.

請使用ON子句連接查詢SCOTT.EMP和SCOTT.DEPT表,要求顯示EMPNO、ENAME、JOB和SAL字段。正確答案:題目要求使用ON子句,這是一個考查點(diǎn),SQL語句如下:

SYS@LHRDB>SELECTEMPNO,ENAME,JOB,SALFROMSCOTT.EMPEJOINSCOTT.DEPTDONE.DEPTNO=D.DEPTNO;[考點(diǎn)]SQL編寫

10.

什么是等值連接?正確答案:等值連接就是當(dāng)兩個表的公共字段相等的時候把兩個表連接在一起,它是連接條件中最常見的一種。公共字段是兩個表中具有相同含義的列。如下兩個連接都屬于等值連接:

連接1:

SELECTENAME姓名,(SELECTD.DNAMEFROMSCOTT.DEPTDWHEREE.DEPTNO=D.DEPTNO)部門名稱

FROMSCOTT.EMPEORDERBYE.ENAME;

連接2:

SELECTE.ENAME姓名,D.DNAME部門名稱

FROMSCOTT.EMPE,SCOTT.DEPTD

WHEREE.DEPTNO=D.DEPTNOORDERBYE.ENAME;[考點(diǎn)]SQL編寫

11.

什么是自然連接?正確答案:自然連接屬于等值連接的一種特殊形式,它是在兩張表中尋找那些數(shù)據(jù)類型和列名都相同的字段,然后自動地將它們連接起來,并返回所有符合條件的結(jié)果。自然連接以相同列為條件創(chuàng)建等值的列,不推薦使用。若沒有任何相同的字段,則會產(chǎn)生笛卡兒積,這對數(shù)據(jù)庫的性能有較大影響。

需要注意的是,自然連接只能發(fā)生在兩個表中有相同名字和數(shù)據(jù)類型的列上。如果表中的數(shù)據(jù)列有相同的名字,但數(shù)據(jù)類型不同,那么自然連接語法會提示錯誤。

有關(guān)自然連接的一些注意事項(xiàng)如下:

1)如果進(jìn)行自然連接的兩個表有多個字段都具有相同名稱和類型,那么它們都會被作為自然連接的條件。

2)如果進(jìn)行自然連接的兩個表僅有字段名稱相同,而數(shù)據(jù)類型不同,那么將會返回一個錯誤。

自然連接自動進(jìn)行關(guān)聯(lián)字段的匹配。示例如下:

SYS@RACLHR2>SELECT*FROMSCOTT.EMPNATURALJOINSCOTT.DEPT;[考點(diǎn)]SQL編寫

12.

什么是自連接?正確答案:自連接(SelfJoin)是SQL語句中的一種特殊連接方式,使用自連接可以將自身表的一個鏡像當(dāng)作另一個表來對待,從而能夠得到一些特殊的數(shù)據(jù)。

例如,在SCOTT.EMP中的每一個員工都有自己的MGR(經(jīng)理),并且每一個經(jīng)理自身也是公司的員工,自身也有自己的經(jīng)理。如果需要將每一個員工自己的名字及其經(jīng)理的名字都查詢出來,SQL語句應(yīng)該如何寫呢?這個時候就可以用到自連接了。最終SQL如下:

SELECTA.ENAMEWORKER,B.ENAMEMANAGERFROMSCOTT.EMPA,SCOTT.EMPBWHEREA.MGR=B.EMPNOORDERBYA.ENAME;

對于非等值連接,理解起來比較簡單,即表和表之間是通過非等值運(yùn)算符來連接的,例如,<>、BETWEEN...AND...等,如下:

SELECT

EMP.EMPNO,EMP.ENAME,DEPT.LOCFROMSCOTT.EMPINNERJOINSCOTT.DEPTONEMP.DEPTNO<>DEPT.DEPTNO

WHEREEMPNO=7788ORDERBYEMPNO;

13.

外連接包含哪幾種類型?正確答案:外連接分為3種,即左外連接(LEFTOUTERJOIN)、右外連接(RIGHTOUTERJOIN)和全外連接(FULLOUTERJOIN),通??梢允÷設(shè)UTER這個關(guān)鍵字,所以,也稱為左連接、右連接和全連接。[考點(diǎn)]SQL編寫

14.

使用SCOTT/TIGER用戶下的EMP表和DEPT表完成下列練習(xí),表的結(jié)構(gòu)說明如下:

EMP員工表(EMPNO員工號/ENAME員工姓名/JOB工作/MGR上級編號MIREDATE受雇日期/SAL薪金/COMM傭金/DEPTNO部門編號)

DEPT部門表(DEPTNO部門編號/DNAME部門名稱/LOC地點(diǎn))

工資=薪金+傭金

1)列出至少有一個員工的所有部門。

2)列出薪金比“SMITH”多的所有員工。

3)列出所有員工的姓名及其直接上級的姓名。

4)列出受雇日期早于其直接上級的所有員工。

5)列出部門名稱和這些部門的員工信息,同時列出那些沒有員工的部門。

6)列出所有工作為“CLERK”辦事員的姓名及其部門名稱。

7)列出最低薪金大于1500的各種工作。

8)列出在部門“SALES”銷售部工作的員工的姓名,假定不知道銷售部的部門編號。

9)列出薪金高于公司平均薪金的所有員工。

10)列出與員工“SCOTT”從事相同工作的所有員工。

11)列出薪金等于部門編號為30的員工的薪金的所有員工的姓名和薪金。

12)列出薪金高于在部門30工作的所有員工的薪金的員工姓名和薪金。

13)列出在每個部門工作的員工數(shù)量、平均工資和平均服務(wù)期限。

14)列出所有員工的姓名、部門名稱和工資。

15)列出所有部門的詳細(xì)信息和部門人數(shù)。

16)列出各種工作的最低工資。

17)列出工作為“MANAGER”的員工的最低薪金。

18)列出所有員工的年工資,按年薪從低到高排序。正確答案:本題考查編寫SQL語句的能力,答案如下:

1)考查兩個表聯(lián)合查詢,及GROUPBY...HAVING的用法,最終的SQL如下:

SELECTDNAMEFROMSCOTT.DEPTTWHERET.DEPTNOIN(SELECTT.DEPTNOFROMSCOTT.EMPGROUPBYT.DEPTNOHAVINGCOUNT(*)>1)

2)經(jīng)典的自連接查詢,最終的SQL如下:

SELECTENAMEFROMSCOTT.EMPTWHERESAL>(SELECTSALFROMSCOTT.EMPWHEREENAMELIKE='SMITH);

3)多次對自己查詢,為表取個別名,內(nèi)部查詢可以像對象一樣引用外部的對象的字段,這里引用與編程中的作用域相似,即與{}類比,最終的SQL如下:

SELECTENANE,(SELECTENAMEFROMSCOTT.EMPWHERESCOTT.EMPNOIN(A.MGR))FROMSCOTT.EMPA;

4)日期可直接用來比較,最終的SQL如下:

SELECTENAMEFROMSCOTT.EMPAWHEREHIREDATE<(SELECTHIREDATEFROMSCOTT.EMPWHERESCOTT.EMPNOIN(A.MGR));

5)以SCOTT.DEPT表為主,左連接查詢,最終的SQL如下:

SELECTDNAME,B.*FROMSCOTT.DEPTALEFTJOINSCOTT.EMPBONA.DEPTNO=B.DEPTNO;

6)最終的SQL如下:

SELECTENAME,(SELECTDNAMEFROMSCOTT.DEPTWHERET.DEPTNOIN(A.DEPTNO))ASDNAMEFROMSCOTT.EMPAWHEREJOB='CLERK';

7)找出哪些工作的所有員工的薪金都大于1500,最終的SQL如下:

SELECTT.JOBFROMSCOTT.SCOTT.EMPTGROUPBYT.JOBHAVINGMIN(SAL)>1500;

8)經(jīng)典的兩個表連接,最終的SQL如下:

SELECTENAMEFROMSCOTT.EMPWHERET.DEPTNO=(SELECTT.DEPTNOFROMSCOTT.DEPTWHEREDNAME='SALES');

9)反復(fù)查自己,最終的SQL如下:

SELECTENAMEFROMSCOTT.EMPWHERESAL>(SELECTAVG(SAL)FROMSCOTT.EMP);

10)排除自己,最終的SQL如下:

SELECTENAMEFROMSCOTT.EMP

WHEREJOBIN(SELECTJOBFROMSCOTT.EMPWHEREENAME='SCOTT)ANDENAME!='SCOTT;

11)考查ANY的用法,且排除自己,最終的SQL如下:

SELECTENAME,SALFROMSCOTT.EMPWHERESAL=ANY(SELECTSALFROMSCOTT.EMPWHERET.DEPTNO=30)ANDT.DEPTNO!=30;

12)MAX的用法,最終的SQL如下:

SELECTSAL,ENAME

FROMSCOTT.EMPWHERESAL>(SELECTMAX(SAL)FROMSCOTT.EMPWHERET.DEPTNO=30);

13)經(jīng)典的GROUPBY用法,最終的SQL如下:

SELECTT.DEPTNO,COUNT(*),AVG(A.SAL+COMM),AVG(SYSDATE-HIREDATE)FROMSCOIT.EMPAGROUPBYT.DEPTNO;

14)經(jīng)典的兩個表的連接查詢,用具體的名稱替換一個表中的主鍵的ID(解決很多人在實(shí)際運(yùn)用中會遇到的不能綁定多列的問題),也可用WHERE來查詢,與題5)比較,最終的SQL如下:

SELECTENAME,SAL+COMM,(SELECTDNAMEFROMSCOTT.DEPTAWHEREA.DEPTNO=B.DEPTNO)ASDNAMEFROMSCOTT.EMPB;

15)因?yàn)槭褂昧薙ELECT*,將顯示SCOTT.DEPT和后面臨時表B的全部字段(注意:不只是SCOTT.DEPT的字段,注意*號),最終的SQL如下:

SELECT*FROMSCOTT.DEPTALEFTJOIN(SELECTDEPTNO,COUNT(*)FROMSCOTT.EMPGROUPBYDEPTNO)B

ONA.DEPTNO=B.DEPTNO;

16)考查MIN的用法,最終的SQL如下:

SELECTJOB,MIN(SAL)FROMSCOTT.EMPGROUPBYJOB;

17)因?yàn)镸ANAGER是值而不是字段,所以不能用小寫,最終的SQL如下:

SELECTMIN(SAL+COMM)FROMSCOTT.EMPWHEREJOB='MANAGER';

18)NVL:空轉(zhuǎn)化函數(shù)。最終的SQL如下:

SELECTENAME,(SAL+NVL(COMM,0))*12ASSALFROMSCOTT.EMPORDERBYSAL;[考點(diǎn)]SQL編寫

15.

E-R圖向關(guān)系模型的轉(zhuǎn)換一般遵循哪些原則?正確答案:E-R圖向關(guān)系模型的轉(zhuǎn)換一般遵循如下原則:

1)一個實(shí)體型轉(zhuǎn)換為一個關(guān)系模式。實(shí)體的屬性就是關(guān)系的屬性。實(shí)體的碼就是關(guān)系的碼。

例如,學(xué)生實(shí)體可以轉(zhuǎn)換為如下關(guān)系模式,其中,學(xué)號為學(xué)生關(guān)系的碼:

學(xué)生(學(xué)號,姓名,出生日期,所在系,年級,平均成績)。同樣,性別、宿舍、班級、檔案材料、教師、課程、教室、教科書都分別轉(zhuǎn)換為一個關(guān)系模式。

2)一個聯(lián)系轉(zhuǎn)化為一個關(guān)系模式,與該聯(lián)系相連的各實(shí)體的碼以及聯(lián)系的屬性轉(zhuǎn)化為關(guān)系的屬性。該關(guān)系的碼有如下3種情況:

①若聯(lián)系為1:1,則每個實(shí)體的碼均是該關(guān)系的候選碼。

②若聯(lián)系為1:n,則關(guān)系的碼為n端實(shí)體的碼。

③若聯(lián)系為m:n,則關(guān)系的碼為諸實(shí)體碼的組合。

下面分別來講解這3種情況。

①聯(lián)系為1:1

一個1:1聯(lián)系可以轉(zhuǎn)換為一個獨(dú)立的關(guān)系模式,也可以與任意一端對應(yīng)的關(guān)系模式合并。

a)如果轉(zhuǎn)換為一個獨(dú)立的關(guān)系模式,那么與該聯(lián)系相連的各實(shí)體的碼以及聯(lián)系本身的屬性均轉(zhuǎn)換為關(guān)系的屬性,每個實(shí)體的碼均是該關(guān)系的候選碼。

b)如果與某一端對應(yīng)的關(guān)系模式合并,那么需要在該關(guān)系模式的屬性中加入另一個關(guān)系模式的碼和聯(lián)系本身的屬性。

②聯(lián)系為1:n

一個1:n聯(lián)系可以轉(zhuǎn)換為一個獨(dú)立的關(guān)系模式,也可以與n端對應(yīng)的關(guān)系模式合并。

a)如果轉(zhuǎn)換為一個獨(dú)立的關(guān)系模式,那么與該聯(lián)系相連的各實(shí)體的碼以及聯(lián)系本身的屬性均轉(zhuǎn)換為關(guān)系的屬性,而關(guān)系的碼為n端實(shí)體的碼。

b)如果與n端對應(yīng)的關(guān)系模式合并,那么在n端實(shí)體對應(yīng)模式中加入1端實(shí)體所對應(yīng)關(guān)系模式的碼,以及聯(lián)系本身的屬性。而關(guān)系的碼為n端實(shí)體的碼。

③聯(lián)系為m:n

一個m:n聯(lián)系轉(zhuǎn)換為一個關(guān)系模式。與該聯(lián)系相連的各實(shí)體的碼以及聯(lián)系本身的屬性均轉(zhuǎn)換為關(guān)系的屬性,而關(guān)系的碼為各實(shí)體碼的組合。

3)同一實(shí)體集的實(shí)體間的聯(lián)系,即自聯(lián)系,也可按上述1:1、1:n和m:n三種情況分別處理。

例如,如果教師實(shí)體集內(nèi)部存在領(lǐng)導(dǎo)與被領(lǐng)導(dǎo)的1:n自聯(lián)系,那么可以將該聯(lián)系與教師實(shí)體合并,這時主鍵職工號將多次出現(xiàn),但作用不同,可用不同的屬性名加以區(qū)分。例如,在合并后的關(guān)系模式中,主鍵仍為職工號,再增設(shè)一個“系主任”屬性,存放相應(yīng)系主任的職工號。

4)具有相同碼的關(guān)系模式可合并。

為了減少系統(tǒng)中的關(guān)系個數(shù),如果兩個關(guān)系模式具有相同的主鍵,那么可以考慮將它們合并為一個關(guān)系模式。合并方法是將其中一個關(guān)系模式的全部屬性加入另一個關(guān)系模式中,然后去掉其中的同義屬性(可能同名也可能不同名),并適當(dāng)調(diào)整屬性的次序。[考點(diǎn)]E-R模型

16.

假定一個部門的數(shù)據(jù)庫包括以下信息。

1)職工的信息:職工號、姓名、地址和所在部門。

2)部門的信息:部門所有職工、部門名、經(jīng)理和銷售的產(chǎn)品。

3)產(chǎn)品的信息:產(chǎn)品名、制造商、價格、型號及產(chǎn)品的內(nèi)部編號。

4)制造商的信息:制造商名稱、地址、生產(chǎn)的產(chǎn)品名和價格。

試畫出這個數(shù)據(jù)庫的E-R圖。正確答案:本題對應(yīng)的E-R圖如下圖所示。

[考點(diǎn)]E-R模型

17.

某學(xué)校學(xué)籍科管理中心需建立一個學(xué)生選修課數(shù)據(jù)庫,該數(shù)據(jù)庫中需要存儲和管理下列信息:

學(xué)生:學(xué)號,姓名,性別,年齡

課程:課程號,課程名,學(xué)時

以上數(shù)據(jù)存在的約束條件是:

一名學(xué)生可以選修多門課程,一門課程可以有多名學(xué)生,并且選修課要有成績的登記。

I)畫出該關(guān)系的E-R圖。

2)用SQL語句創(chuàng)建E-R關(guān)系圖中所有涉及的表。正確答案:1)建立E-R圖如下圖所示。

2)建表語句如下:

CREATETABLE學(xué)生

學(xué)號

VARCHAR(10)PRIMARYKEY,

姓名

VARCHAR(20)NOTNULL

性別

CHAR(2)CHECK(性別IN('男','女')),

年齡

INT);

CREATETABLE

課程(

課程號

VARCHAR(10)PRIMARYKEY,

課程號

VARCHAR(20)NOTNULL,

學(xué)時

TNT

);

CREATETABLE選修(

學(xué)號

VARCHAR(10),

課程號

VARCHAR(10),

成績INT,

PRIMARYKEY(學(xué)號,課程號),

FOREIGNKEY(學(xué)號)REFERENCES學(xué)生學(xué)號,

FOREIGNKEY(課程號)REFERENCES課程課程號,

);[考點(diǎn)]E-R模型

18.

熱備份和冷備份的區(qū)別有哪些?正確答案:冷備份和熱備份的區(qū)別見下表。

冷備份熱備份簡介冷備份指在數(shù)據(jù)庫已經(jīng)正常關(guān)閉后,將關(guān)鍵性文件復(fù)制到另外位置的一種備份方式,適用于所有模式的數(shù)據(jù)庫熱備份是在數(shù)據(jù)庫運(yùn)行的情況下,采用歸檔方式備份數(shù)據(jù)的方法。針對歸檔模式的數(shù)據(jù)庫,在數(shù)據(jù)庫仍舊處于工作狀態(tài)時進(jìn)行備份優(yōu)點(diǎn)1)非常快速的備份方法,只需復(fù)制文件,備份與恢復(fù)操作相當(dāng)簡單2)容易歸檔,簡單復(fù)制即可3)容易恢復(fù)到某個時間點(diǎn)上,只需將文件再復(fù)制回去即可4)能與歸檔方法相結(jié)合,做數(shù)據(jù)庫“最新狀態(tài)”的恢復(fù)5)低度維護(hù),高度安全1)可在表空間或數(shù)據(jù)文件級備份,備份時間短2)備份時數(shù)據(jù)庫仍可使用3)可以將數(shù)據(jù)庫恢復(fù)到任意一個時間點(diǎn)4)可對幾乎所有數(shù)據(jù)庫實(shí)體做恢復(fù)5)恢復(fù)是快速的,大多數(shù)情況下在數(shù)據(jù)庫仍工作時恢復(fù)缺點(diǎn)1)當(dāng)單獨(dú)使用時,只能提供到“某一時間點(diǎn)上”的恢復(fù)2)在實(shí)施備份的全過程中,數(shù)據(jù)庫必須是關(guān)閉狀態(tài),所以,在備份的過程中,數(shù)據(jù)庫就不能做其他工作了3)若磁盤空間有限,則復(fù)制到磁帶等其他外部存儲設(shè)備上,速度會很慢4)不能按表或按用戶恢復(fù)1)不能出錯,否則后果嚴(yán)重2)若熱備份不成功,則所得結(jié)果不可用于時間點(diǎn)的恢復(fù)3)維護(hù)困難,所以,要特別仔細(xì)小心,不允許“以失敗而告終”的情況發(fā)生[考點(diǎn)]熱備份和冷備份

19.

SQL注入的含義是什么?正確答案:所謂SQL注入(SQLInjection),就是通過把SQL命令插入WEB表單提交或輸入域名或頁面請求的查詢字符串,最終達(dá)到欺騙服務(wù)器執(zhí)行惡意的SQL命令的目的。例如,在代碼中使用下面的SQL語句:SQL="SELECTTOP1*FROMUSERWHERENAME='''+NAME+'''ANDPASSWORD='''+PASSWORD+'''''來驗(yàn)證用戶名和密碼是否正確,其中,NAME和PASSWORD是用戶輸入的內(nèi)容,當(dāng)用戶輸入用戶名為AA,密碼為“BB或'A'='A'”時,拼接出來的SQL語句就為“SELECTTOP1*FROMUSERWHERENAME='AA'ANDPASSWORD='BB'OR'A'='A'”,那么只要USER表中有數(shù)據(jù),這條SQL語句就會有返回結(jié)果,這就達(dá)到了SQL注入的目的。作為DBA,永遠(yuǎn)不要信任用戶的輸入,相反,必須認(rèn)定用戶輸入的數(shù)據(jù)永遠(yuǎn)都是不安全的,對用戶輸入的數(shù)據(jù)必須都進(jìn)行過濾處理。[考點(diǎn)]SQL注入

20.

有哪些方法可以防止SQL注入?正確答案:為了防止SQL注入,需要注意以下幾個要點(diǎn):

1)永遠(yuǎn)不要信任用戶的輸入??梢酝ㄟ^正則表達(dá)式或限制長度的方式對用戶的輸入進(jìn)行校驗(yàn);對單引號進(jìn)行轉(zhuǎn)換等。

2)永遠(yuǎn)不要使用動態(tài)拼裝SQL,可以使用參數(shù)化的SQL或者直接使用存儲過程進(jìn)行數(shù)據(jù)查詢、存取。

3)永遠(yuǎn)不要使用管理員權(quán)限的數(shù)據(jù)庫連接,建議為每個應(yīng)用賦予單獨(dú)的權(quán)限。

4)不要把機(jī)密信息直接存放,建議對密碼或敏感信息進(jìn)行加密或:HASH處理。

5)應(yīng)用的異常信息應(yīng)該給出盡可能少的提示,最好使用自定義的錯誤信息對原始錯誤信息進(jìn)行包裝。

6)SQL注入的檢測一般采取輔助軟件或借助網(wǎng)站平臺,軟件一般采用SQL注入檢測工具JSKY,網(wǎng)站平臺就有億思網(wǎng)站安全平臺檢測工具M(jìn)DCSOFTSCAN等。[考點(diǎn)]SQL注入

21.

UML主要應(yīng)用于哪些行業(yè)?正確答案:目前,UML已成功應(yīng)用于電信、金融、政府、電子、國防、航天航空、制造與工業(yè)自動化、醫(yī)療、交通、電子商務(wù)等領(lǐng)域中。在這些領(lǐng)域中,UML的建模包括大型、復(fù)雜、實(shí)時、分布式、集中式數(shù)據(jù)或者計(jì)算,以及嵌入式系統(tǒng)等,而且還用于軟件再生工程、質(zhì)量管理、過程管理、配置管理的各方面。在軟件無線電技術(shù)中,UML的應(yīng)用是可行的,而且具有優(yōu)勢。[考點(diǎn)]UML

22.

什么是OLAP和OLTP?它們之間的適用場景有什么不同?正確答案:數(shù)據(jù)處理大致可以分成兩大類:OLTP(On-LineTransactionProcessing,聯(lián)機(jī)事務(wù)處理)和OLAP(On-LineAnalyticalProcessing,聯(lián)機(jī)分析處理)。

OLTP是傳統(tǒng)的關(guān)系型數(shù)據(jù)庫的主要應(yīng)用,即記錄實(shí)時的增、刪、改,主要是執(zhí)行基本的、日常的事務(wù)處理,例如,在銀行存取一筆款,就是一個事務(wù)交易。OLTP系統(tǒng)強(qiáng)調(diào)數(shù)據(jù)庫處理效率,強(qiáng)調(diào)內(nèi)存各種指標(biāo)的命中率,強(qiáng)調(diào)綁定變量,強(qiáng)調(diào)并發(fā)操作。一般情況下,OLTP系統(tǒng)數(shù)據(jù)量少,DML操作比較頻繁,并行事務(wù)處理多,但是一般都比較短。OLTP表示事務(wù)性非常高的系統(tǒng),一般都是高可用的在線系統(tǒng),以小的事務(wù)以及小的查詢?yōu)橹?。評估系統(tǒng)的時候,一般看其每秒執(zhí)行的事務(wù)數(shù)以及SQL執(zhí)行的數(shù)量。在OLTP系統(tǒng)中,單個數(shù)據(jù)庫每秒處理的事務(wù)數(shù)往往超過幾百個,或者是幾千個,SELECT語句的執(zhí)行量每秒幾千甚至幾萬個。典型的OLTP系統(tǒng)有電子商務(wù)系統(tǒng)、銀行、證券等,例如,美國eBay的業(yè)務(wù)數(shù)據(jù)庫就是很典型的OLTP數(shù)據(jù)庫。在Oracle中創(chuàng)建OLTP系統(tǒng)時,使用一般用途或事務(wù)處理(GeneralPurposeorTransactionProcessing)模板。

具體而言,OLTP的特點(diǎn)一般有以下幾點(diǎn):

1)實(shí)時性要求高。

2)數(shù)據(jù)量不是很大。

3)交易一般是確定的,所以,OLTP是對確定性的數(shù)據(jù)進(jìn)行存取。例如,存取款都有一個特定的金額。

4)并發(fā)性要求高,并且有嚴(yán)格的事務(wù)完整性、安全性。例如,有可能你和你的家人同時在不同的銀行取同一個賬號的存款。

OLAP的特點(diǎn)一般有以下幾點(diǎn):

1)實(shí)時性要求不是很高,很多應(yīng)用都是每天晚上更新一次數(shù)據(jù)。

2)數(shù)據(jù)量大,因?yàn)镺LAP支持的是動態(tài)查詢,用戶需要統(tǒng)計(jì)很多數(shù)據(jù)以后才能得到想要知道的信息,所以,OLAP處理的數(shù)據(jù)量很大。

3)因?yàn)橹攸c(diǎn)在于決策支持,所以,OLAP查詢一般是動態(tài)的,也就是說允許用戶隨時提出查詢的要求。于是在OLAP中通過一個重要概念“維”來搭建一個動態(tài)查詢的平臺(或技術(shù)),供用戶自己去決定需要知道什么信息。

OLAP和OLTP的區(qū)別見下表。區(qū)分維度OLTP|OLAP用戶操作人員、低級管理人員決策人員、高級管理人員功能日常操作處理分析決策DB設(shè)計(jì)面向應(yīng)用,事務(wù)驅(qū)動面向主題,面向分析,分析驅(qū)動數(shù)據(jù)原始的、當(dāng)前的、最新細(xì)節(jié)的、二維的、分立的、實(shí)時更新的歷史的、聚集的、多維的、集成的、統(tǒng)一的、導(dǎo)出的、綜合性的、提煉性的、不實(shí)時更新但周期性刷新存取讀或?qū)憯?shù)十條記錄,一次處理的數(shù)據(jù)量小讀上百萬條記錄,一次處理的數(shù)據(jù)量大工作單位簡單的事務(wù),DML操作比較頻繁,并行事務(wù)處理多復(fù)雜的查詢,數(shù)據(jù)量大,DML操作少用戶數(shù)上千個上百個DB大小100MB-GB100GB-TB時間要求具有實(shí)時性對時間要求不嚴(yán)格主要應(yīng)用數(shù)據(jù)庫數(shù)據(jù)倉庫[考點(diǎn)]OLAP和OLTP

23.

分布式數(shù)據(jù)庫有哪些優(yōu)點(diǎn)?正確答案:分布式數(shù)據(jù)庫的優(yōu)

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論