SQL面試題(非純數(shù)據(jù)庫(kù)方向)_第1頁(yè)
SQL面試題(非純數(shù)據(jù)庫(kù)方向)_第2頁(yè)
SQL面試題(非純數(shù)據(jù)庫(kù)方向)_第3頁(yè)
SQL面試題(非純數(shù)據(jù)庫(kù)方向)_第4頁(yè)
SQL面試題(非純數(shù)據(jù)庫(kù)方向)_第5頁(yè)
已閱讀5頁(yè),還剩20頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、1觸發(fā)器的作用?答: 觸發(fā)器是一中特殊的存儲(chǔ)過程, 主要是通過事件來觸發(fā)而被執(zhí)行的。 它可以強(qiáng)化約束, 來維護(hù)數(shù)據(jù)的完整性和一致性, 可以跟蹤數(shù)據(jù)庫(kù)內(nèi)的操作從而不允許未經(jīng)許可的更新和 變化??梢月?lián)級(jí)運(yùn)算。如,某表上的觸發(fā)器上包含對(duì)另一個(gè)表的數(shù)據(jù)操作,而該操作又會(huì)導(dǎo)致該表觸發(fā)器被觸發(fā)。2。什么是存儲(chǔ)過程?用什么來調(diào)用?答:存儲(chǔ)過程是一個(gè)預(yù)編譯的SQM旬,優(yōu)點(diǎn)是允許模塊化的設(shè)計(jì),就是說只需 創(chuàng)建一次,以后在該程序中就可以調(diào)用多次。如果某次操作需要執(zhí)行多次SQL,使用存儲(chǔ)過程比單純SQL語(yǔ)句執(zhí)行要快??梢杂靡粋€(gè)命令對(duì)象來調(diào)用存儲(chǔ)過程。3。索引的作用?和它的優(yōu)點(diǎn)缺點(diǎn)是什么?答: 索引就一種特殊的查詢表

2、, 數(shù)據(jù)庫(kù)的搜索引擎可以利用它加速對(duì)數(shù)據(jù)的檢索。它很類似與現(xiàn)實(shí)生活中書的目錄,不需要查詢整本書內(nèi)容就可以找到想要的數(shù)據(jù)。索引可以是唯 一的, 創(chuàng)建索引允許指定單個(gè)列或者是多個(gè)列。 缺點(diǎn)是它減慢了數(shù)據(jù)錄入的速度,同時(shí)也增加了數(shù)據(jù)庫(kù)的尺寸大小。3。什么是內(nèi)存泄漏?答: 一般我們所說的內(nèi)存泄漏指的是堆內(nèi)存的泄漏。 堆內(nèi)存是程序從堆中為其分配的, 大小任意的, 使用完后要顯示釋放內(nèi)存。 當(dāng)應(yīng)用程序用關(guān)鍵字 new 等創(chuàng)建對(duì)象時(shí),就從堆中為它分配一塊內(nèi)存, 使用完后程序調(diào)用 free 或者 delete 釋放該內(nèi)存, 否則就說該內(nèi)存就不能被使用,我們就說該內(nèi)存被泄漏了。4。 維護(hù)數(shù)據(jù)庫(kù)的完整性和一致性,

3、 你喜歡用觸發(fā)器還是自寫業(yè)務(wù)邏輯?為什么?答:我是這樣做的,盡可能使用約束,如 check, 主鍵,外鍵,非空字段等來約束,這樣做效率最高,也最方便。其次是使用觸發(fā)器,這種方法可以保證,無論什么業(yè)務(wù)系統(tǒng)訪問數(shù) 據(jù)庫(kù)都可以保證數(shù)據(jù)的完整新和一致性。 最后考慮的是自寫業(yè)務(wù)邏輯, 但這樣做麻煩,編程復(fù)雜,效率低下。5。什么是事務(wù)?什么是鎖?答:事務(wù)就是被綁定在一起作為一個(gè)邏輯工作單元的SQL®句分組,如果任何一個(gè)語(yǔ)句操作失敗那么整個(gè)操作就被失敗, 以后操作就會(huì)回滾到操作前狀態(tài), 或者是上有個(gè)節(jié)點(diǎn)。為了 確保要么執(zhí)行,要么不執(zhí)行,就可以使用事務(wù)。要將有組語(yǔ)句作為事務(wù)考慮,就需要通過ACID測(cè)

4、試,即原子性,一致性,隔離性和持久性。鎖:在所以的DBMSK鎖是實(shí)現(xiàn)事務(wù)的關(guān)鍵,鎖可以保證事務(wù)的完整性和并發(fā)性。 與現(xiàn)實(shí)生活中鎖一樣, 它可以使某些數(shù)據(jù)的擁有者, 在某段時(shí)間內(nèi)不能使用某些數(shù)據(jù)或數(shù)據(jù)結(jié)構(gòu)當(dāng)然鎖還分級(jí)別的6。什么叫視圖?游標(biāo)是什么?答:視圖是一種虛擬的表,具有和物理表相同的功能??梢詫?duì)視圖進(jìn)行增,改,查, 操作, 試圖通常是有一個(gè)表或者多個(gè)表的行或列的子集。 對(duì)視圖的修改不影響基本表。它使得我們獲取數(shù)據(jù)更容易,相比多表查詢。游標(biāo): 是對(duì)查詢出來的結(jié)果集作為一個(gè)單元來有效的處理。 游標(biāo)可以定在該單元中的特定行,從結(jié)果集的當(dāng)前行檢索一行或多行??梢詫?duì)結(jié)果集當(dāng)前行做修改。一般不使用游標(biāo)

5、,但是需要逐條處理數(shù)據(jù)的時(shí)候,游標(biāo)顯得十分重要。7。為管理業(yè)務(wù)培訓(xùn)信息,建立3 個(gè)表:S(S#,SN,SD,SA)S#,SN,SD,SA 分別代表學(xué)號(hào),學(xué)員姓名,所屬單位,學(xué)員年齡C(C#,CN)C#,CN 分別代表課程編號(hào),課程名稱SC(S#,C#,G) S#,C#,G 分別代表學(xué)號(hào),所選的課程編號(hào),學(xué)習(xí)成績(jī)(1)使用標(biāo)準(zhǔn)SQL嵌套語(yǔ)句查詢選修課程名稱為稅收基礎(chǔ)的學(xué)員學(xué)號(hào)和姓 名?答案: select s# ,sn from s where S#in(selectS# from c,sc wherec.c#=sc.c# and cn= 稅收基礎(chǔ) )(2) 使用標(biāo)準(zhǔn)SQL嵌套語(yǔ)句查詢選彳課程編

6、號(hào)為C2的學(xué)員姓名和所屬單位 ?答: select sn,sd from s,sc where s.s#=sc.s# and sc.c#= c2(3) 使用標(biāo)準(zhǔn)SQL嵌套語(yǔ)句查詢不選修課程編號(hào)為C5'的學(xué)員姓名和所屬單位 ?答: select sn,sd from s where s# not in(select s# from sc where c#=c5 )(4) 查詢選修了課程的學(xué)員人數(shù)答: select 學(xué)員人數(shù) =count(distinct s#) from sc(5) 查詢選修課程超過5 門的學(xué)員學(xué)號(hào)和所屬單位?答: select sn,sd from s where s

7、# in(select s# from sc group by s# having count(distinct c#)>5)在面試過程中多次碰到兩道 SQL查詢的題目,一是查詢A(ID,Name)表中第31至40 條記錄, ID 作為主鍵可能是不是連續(xù)增長(zhǎng)的列,完整的查詢語(yǔ)句如下:select top 10 * from A where ID >(select max(ID) from (select top 30 IDfrom A order by A ) T) order by A另外一道題目的要求是查詢表 A中存在ID重復(fù)三次以上的記錄,完整的查詢語(yǔ)句 如下:select

8、* from(select count(ID) as count from table group by ID)T whereT.count>3create table testtable1(id int IDENTITY,department varchar(12)select * from testtable1insert into testtable1values('設(shè)計(jì)')insert into testtable1values('市場(chǎng)')insert into testtable1values('售后')/*結(jié)果id depart

9、ment1 設(shè)計(jì)2 市場(chǎng)3 售后*/create table testtable2(id int IDENTITY,dptID int,name varchar(12)insert intotesttable2values(1,'張三')insert intotesttable2values(1,'李四')insert intotesttable2values(2,'王五')insert intotesttable2values(3,'彭六')insert intotesttable2values(4,'陳七')/

10、*用一條SQL語(yǔ)句,怎么顯示如下結(jié)果 id dptID department name計(jì)計(jì)場(chǎng)后人 設(shè)計(jì) 設(shè)計(jì) 市場(chǎng) 售后1123412345張三李四王五彭六 陳七*/答案是:SELECT testtable2.* , ISNULL(department,' 黑人 ')FROMtesttable1 right join testtable2 on testtable2.dptID = testtable1.ID 在面試應(yīng)聘的 SQL Server 數(shù)據(jù)庫(kù)開發(fā)人員時(shí),我運(yùn)用了一套標(biāo)準(zhǔn)的基準(zhǔn)技術(shù)問題。 下面這些問題是我覺得能夠真正有助于淘汰不合格應(yīng)聘者的問題。 它們按照 從易到難的順

11、序排列。 當(dāng)你問到關(guān)于主鍵和外鍵的問題時(shí), 后面的問題都十分有難度, 因?yàn)榇鸢缚赡軙?huì)更難解釋和說明,尤其是在面試的情形下。你能向我簡(jiǎn)要敘述一下 SQL Server 2000 中使用的一些數(shù)據(jù)庫(kù)對(duì)象嗎 ?你希望聽到的答案包括這樣一些對(duì)象: 表格、視圖、用戶定義的函數(shù),以及存儲(chǔ)過程 ; 如果他們還能夠提到像觸發(fā)器這樣的對(duì)象就更好了。如果應(yīng)聘者不能回答這個(gè)基本的問題,那么這不是一個(gè)好兆頭。NULL什么意思?NULLa)這個(gè)值是數(shù)據(jù)庫(kù)世界里一個(gè)非常難纏的東西,所以有不少應(yīng)聘者會(huì)在這 個(gè)問題上跌跟頭您也不要覺得意外。NULLS個(gè)值表示UNKNOWN卻):它不表示“"(空字符串)。假設(shè),的SQ

12、LServer 數(shù)據(jù)庫(kù)里有ANSI_NULLS當(dāng)然在默認(rèn)情況下會(huì)有,對(duì) NULL這個(gè)值的任何比較都 會(huì)生產(chǎn)一個(gè)NULLfflo您不能把任何值與一個(gè)UNKNOWN進(jìn)行比較,并在邏輯上希望獲得一個(gè)答案。您必須使用 IS NULL 操作符。sql5什么是索引 ?SQL Server 2000 里有什么類型的索引 ?任何有經(jīng)驗(yàn)的數(shù)據(jù)庫(kù)開發(fā)人員都應(yīng)該能夠很輕易地回答這個(gè)問題。 一些經(jīng)驗(yàn)不太多的開發(fā)人員能夠回答這個(gè)問題,但是有些地方會(huì)說不清楚。簡(jiǎn)單地說,索引是一個(gè)數(shù)據(jù)結(jié)構(gòu),用來快速訪問數(shù)據(jù)庫(kù)表格或者視圖里的數(shù)據(jù)。在 SQLServer 里,它們有兩種形式: 聚集索引和非聚集索引。聚集索引在索引的葉級(jí)保存數(shù)

13、據(jù)。這意味著不論聚集索引里有表格的哪個(gè)(或哪些 ) 字段, 這些字段都會(huì)按順序被保存在表格。 由于存在這種排序, 所以每個(gè)表格只會(huì)有一個(gè)聚集索引。 非聚集索引在索引的葉級(jí)有一個(gè)行 標(biāo)識(shí)符。 這個(gè)行標(biāo)識(shí)符是一個(gè)指向磁盤上數(shù)據(jù)的指針。 它允許每個(gè)表格有多個(gè)非聚集索引。什么是主鍵?什么是外鍵?主鍵是表格里的(一個(gè)或多個(gè)) 字段,只用來定義表格里的行; 主鍵里的值總是唯一的。 外鍵是一個(gè)用來建立兩個(gè)表格之間關(guān)系的約束。 這種關(guān)系一般都涉及一個(gè)表格里的主鍵字段與 另外一個(gè)表格 (盡管可能是同一個(gè)表格 ) 里的一系列相連的字段。 那么這些相連的字段就是外鍵。什么是觸發(fā)器?SQL Server 2000 有

14、什么不同類型的觸發(fā)器?讓未來的數(shù)據(jù)庫(kù)開發(fā)人員知道可用的觸發(fā)器類型以及如何實(shí)現(xiàn)它們是非常有益的。觸發(fā)器是一種專用類型的存儲(chǔ)過程,它被捆綁到 SQLServer 2000 的表格或者視圖上。在 SQLServer 2000里,有 INSTEAD-。舜口 AFTEFW種觸發(fā)器。INSTEAD-OF 觸發(fā)器是替代數(shù)據(jù)操控語(yǔ)言(Data Manipulation Language , DML語(yǔ)句對(duì)表格執(zhí)行語(yǔ)句的存儲(chǔ)過程。例 如,如果我有一個(gè)用于TableA的INSTEAD-OF-UPDATE發(fā)器,同時(shí)對(duì)這個(gè)表格 執(zhí)行一個(gè)更新語(yǔ)句,那么INSTEAD-OF-UPDATE發(fā)器里的代碼會(huì)執(zhí)行,而不是我執(zhí)行的更

15、新語(yǔ)句則不會(huì) 執(zhí)行操作。AFTEF®發(fā)器要在DML®旬在數(shù)據(jù)庫(kù)里使用之后才執(zhí)行。這些類型的觸發(fā)器對(duì)于監(jiān)視發(fā)生在數(shù)據(jù)庫(kù)表格里的數(shù)據(jù)變化十分您如何確一個(gè)帶有名為 Fld1 字段的 TableB 表格里只具有Fld1 字段里的那些值,而這些值同時(shí)在名為 TableA 的表格的 Fld1 字段里 ?這個(gè)與關(guān)系相關(guān)的問題有兩個(gè)可能的答案。第一個(gè)答案( 而且是您希望聽到的答案 ) 是使用外鍵限制。外鍵限制用來維護(hù)引用的完整性。它被用來確保表格里的字段只保存有已經(jīng)在不同的 ( 或者相同的 ) 表格里的另一個(gè)字段里定義了的值。這個(gè)字段就是候選鍵( 通常是另外一個(gè)表格的主鍵 ) 。另外一種答

16、案是觸發(fā)器。 觸發(fā)器可以被用來保證以另外一種方式實(shí)現(xiàn)與限制相同的作用,但是它非常難設(shè)置與維護(hù),而且性能一般都很糟糕。由于這個(gè)原因,微軟建議開發(fā)人員使用外鍵限制而不是觸發(fā)器來維護(hù)引用的完整性。對(duì)一個(gè)投入使用的在線事務(wù)處理表格有過多索引需要有什么樣的性能考慮?你正在尋找進(jìn)行與數(shù)據(jù)操控有關(guān)的應(yīng)聘人員。 對(duì)一個(gè)表格的索引越多, 數(shù)據(jù)庫(kù)引擎用來更新、 插入或者刪除數(shù)據(jù)所需要的時(shí)間就越多, 因?yàn)樵跀?shù)據(jù)操控發(fā)生的時(shí)候索引也必須要維護(hù)。你可以用什么來確保表格里的字段只接受特定范圍里的值?這個(gè)問題可以用多種方式來回答,但是只有一個(gè)答案是“好”答案。您希望聽到的回答是 Check 限制,它在數(shù)據(jù)庫(kù)表格里被定義,用

17、來限制輸入該列的值。觸發(fā)器也可以被用來限制數(shù)據(jù)庫(kù)表格里的字段能夠接受的值, 但是這種辦法要求觸發(fā)器在表格里被定義, 這可能會(huì)在某些情況下影響到性能。 因此, 微軟建議使用 Check 限制而不是其他的方式來限制域的完整性。如果應(yīng)聘者能夠正確地回答這個(gè)問題, 那么他的機(jī)會(huì)就非常大了, 因?yàn)檫@表明他們具有使用存儲(chǔ)過程的經(jīng)驗(yàn)。返回參數(shù)總是由存儲(chǔ)過程返回, 它用來表示存儲(chǔ)過程是成功還是失敗。 返回參數(shù) 總是 INT 數(shù)據(jù)類型。OUTPU參數(shù)明確要求由開發(fā)人員來指定,它可以返回其他類型的數(shù)據(jù),例如字 符型和數(shù)值型的值。 ( 可以用作輸出參數(shù)的數(shù)據(jù)類型是有一些限制的。 ) 您可以在 一個(gè)存儲(chǔ)過程里使用多個(gè)

18、OUTPUT:,而您只能夠使用一個(gè)返回參數(shù)。什么是相關(guān)子查詢?如何使用這些查詢?經(jīng)驗(yàn)更加豐富的開發(fā)人員將能夠準(zhǔn)確地描述這種類型的查詢。相關(guān)子查詢是一種包含子查詢的特殊類型的查詢。 查詢里包含的子查詢會(huì)真正請(qǐng)求外部查詢的值,從而形成一個(gè)類似于循環(huán)的狀況。為管理崗位業(yè)務(wù)培訓(xùn)信息,建立3 個(gè)表 :S (S#,SN,SD,SA) S#,SN,SD,SA 分別代表學(xué)號(hào)、學(xué)員姓名、所屬單位、學(xué)員年齡C (C#,CN ) C#,CN 分別代表課程編號(hào)、課程名稱SC ( S#,C#,G ) S#,C#,G 分別代表學(xué)號(hào)、所選修的課程編號(hào)、學(xué)習(xí)成績(jī)1 .使用標(biāo)準(zhǔn)SQL嵌套語(yǔ)句查詢選修課程名稱為稅收基礎(chǔ)的學(xué)員學(xué)號(hào)

19、和姓名- 實(shí)現(xiàn)代碼 :SELECT SN,SD FROM SWHERE S# IN(SELECT S# FROM C,SCWHERE C.C#=SC.C#AND CN=N收基礎(chǔ)')2 .使用標(biāo)準(zhǔn)SQL嵌套語(yǔ)句查詢選彳課程編號(hào)為C2的學(xué)員姓名和所屬單位- 實(shí)現(xiàn)代碼 :SELECT S.SN,S.SD FROM S,SCWHERE S.S#=SC.S#AND SC.C#='C2'3.使用標(biāo)準(zhǔn)SQL嵌套語(yǔ)句查詢不選修課程編號(hào)為C5'的學(xué)員姓名和所屬單位- 實(shí)現(xiàn)代碼 :SELECT SN,SD FROM SWHERE S# NOT IN(SELECT S# FROM S

20、CWHERE C#='C5')4.使用標(biāo)準(zhǔn)SQL嵌套語(yǔ)句查詢選修全部課程的學(xué)員姓名和所屬單位-實(shí)現(xiàn)代碼 :SELECT SN,SD FROM SWHERE S# IN(SELECT S# FROM SCRIGHT JOINC ON SC.C#=C.C# GROUP BY S#HAVING COUNT(*)=COUNT(S#)5. 查詢選修了課程的學(xué)員人數(shù)- 實(shí)現(xiàn)代碼 :SELECT學(xué)員人數(shù)=COUNT(DISTINCT S#) FROM SC6. 查詢選修課程超過5 門的學(xué)員學(xué)號(hào)和所屬單位- 實(shí)現(xiàn)代碼 :SELECT SN,SD FROM SWHERE S# IN(SELECT

21、 S# FROM SCGROUP BY S#HAVING COUNT(DISTINCT C#)>5)5. 查詢選修了課程的學(xué)員人數(shù)- 實(shí)現(xiàn)代碼 :SELECT學(xué)員人數(shù)=COUNT(DISTINCT S#) FROM SC6. 查詢選修課程超過5 門的學(xué)員學(xué)號(hào)和所屬單位- 實(shí)現(xiàn)代碼 :SELECT SN,SD FROM SWHERE S# IN(SELECT S# FROM SCGROUP BY S#HAVING COUNT(DISTINCT C#)>5)題目 2問題描述 :已知關(guān)系模式:S (SNO,SNAME)學(xué)生關(guān)系。SNO為學(xué)號(hào),SNAM助姓名C(CNO,CNAME,CTEA

22、CHER程關(guān)系。CNO為課程號(hào),CNAM時(shí)課程名,CTEACHER 為任課教師SC(SNO,CNO,SCGRADE課關(guān)系。SCGRADE 成績(jī)1. 找出沒有選修過“李明”老師講授課程的所有學(xué)生姓名- 實(shí)現(xiàn)代碼 :SELECT SNAME FROM SWHERE NOT EXISTS(SELECT * FROM SC,CWHERE SC.CNO=C.CNOAND CNAME季明AND SC.SNO=S.SNO)2. 列出有二門以上( 含兩門 ) 不及格課程的學(xué)生姓名及其平均成績(jī)- 實(shí)現(xiàn)代碼 :SELECT S.SNO,S.SNAME,AVG_SCGRADE=AVG(SC.SCGRADE)FROM

23、 S,SC,(SELECT SNOFROM SCWHERE SCGRADE<60GROUP BY SNOHAVING COUNT(DISTINCT CNO)>=2)A WHERE S.SNO=A.SNO AND SC.SNO=A.SNOGROUP BY S.SNO,S.SNAME3. 列出既學(xué)過“1”號(hào)課程,又學(xué)過“2”號(hào)課程的所有學(xué)生姓名- 實(shí)現(xiàn)代碼 :SELECT S.SNO,S.SNAMEFROM S,(SELECT SC.SNOFROM SC,CWHERE SC.CNO=C.CNOAND C.CNAME IN('1','2')GROUP BY

24、 SNOHAVING COUNT(DISTINCT CNO)=2)SC WHERE S.SNO=SC.SNO4. 列出“1”號(hào)課成績(jī)比“2”號(hào)同學(xué)該門課成績(jī)高的所有學(xué)生的學(xué)號(hào)- 實(shí)現(xiàn)代碼:SELECT S.SNO,S.SNAMEFROM S,(SELECT SC1.SNOFROM SC SC1,C C1,SC SC2,C C2WHERE SC1.CNO=C1.CNO AND C1.NAME='1'AND SC2.CNO=C2.CNO AND C2.NAME='2'AND SC1.SCGRADE>SC2.SCGRADE)SC WHERE S.SNO=SC.S

25、NO5. 列出 “ 1” 號(hào)課成績(jī)比 “2” 號(hào)課成績(jī)高的所有學(xué)生的學(xué)號(hào)及其“ 1” 號(hào)課和“2”號(hào)課的成績(jī)- 實(shí)現(xiàn)代碼 :SELECT S.SNO,S.SNAME,SC.K成績(jī),SC.2 號(hào)課成績(jī)FROM S,(SELECT SC1.SNO,得課成績(jī)=SC1.SCGRADE,2t課成績(jī)=SC2.SCGRADEFROM SC SC1,C C1,SC SC2,C C2WHERE SC1.CNO=C1.CNO AND C1.NAME='1'AND SC2.CNO=C2.CNO AND C2.NAME='2'AND SC1.SCGRADE>SC2.SCGRADE

26、)SC WHERE S.SNO=SC.SNOcreate table dept(deptno varchar(10) primary key,dname varchar(10);create table emp(empno varchar(10) primary key,ename varchar(10),job varchar(10),mgr varchar(10),sal varchar(10),deptno varchar(10) references dept(deptno);drop table dept;drop table emp;insert into dept values

27、('1','事業(yè)部');insert into dept values ('2','銷售部');insert into dept values ('3','技術(shù)部');insert into emp values ('01','jacky','clerk','tom','1000','1');insert into emp values ('02','tom','c

28、lerk','','2000','1');insert into emp values ('07','biddy','clerk','','2000','1');insert into emp values ('03','jenny','sales','pretty','600','2');insert into emp values ('0

29、4','pretty','sales','','800','2');insert into emp values ('05','buddy','jishu','canndy','1000','3');insert into emp values ('06','canndy','jishu','','1500','3')

30、;select * from dept;select * from emp;- -1列出em昧中各部門的部門號(hào),最高工資,最低工資select deptno as 部門號(hào) ,max(sal) as 最高工資 ,min(sal) as 最低工資 from emp group by deptno;-2列出emp表中各部門job為'CLERK'的員工的最低工資,最高工資select max(sal) as 最高工資 ,min(sal) as 最低工資 ,deptno as 部門號(hào) from emp wherejob='clerk' group by deptno;-3

31、對(duì)于emp中最低工資小于2000的部門,歹出job為CLERK的員工的部門號(hào), 最低工資,最高工資select b.deptno as 部門號(hào) ,max(sal) as 最高工資 ,min(sal) as 最低工資 from emp as bwhere job='clerk' and (select min(sal)from emp as a where a.deptno=b.deptno)<2000 group by b.deptno;- -4 根據(jù)部門號(hào)由高而低,工資有低而高列出每個(gè)員工的姓名,部門號(hào),工資select ename as 姓名 ,deptno as 部

32、門號(hào) ,sal as 工資 from emp order by deptno desc,sal asc;- -5 列出 'buddy' 所在部門中每個(gè)員工的姓名與部門號(hào)select b.ename as 姓名 ,b.deptno as 部門號(hào) from emp as b where b.deptno= (select a.deptno from emp as a where a.ename='buddy');- -6 列出每個(gè)員工的姓名,工作,部門號(hào),部門名select enameas 姓名 ,job as 工作 ,dept.deptno as 部門號(hào) ,dep

33、t.dname as 部 門名 from emp,deptwhere emp.deptno=dept.deptno;-7列出emp中工彳為'CLERK'的員工的姓名,工作,部門號(hào),部門名select enameas 姓名 ,job as 工作 ,dept.deptno as 部門號(hào) ,dept.dname as 部 門名 from emp,deptwhere emp.deptno=dept.deptno and job='clerk'- -8對(duì)于emp中有管理者的員工,列出姓名,管理者姓名(管理者外鍵為mgr-) select a.deptno as 部門號(hào) ,

34、a.ename as 員工 ,b.ename as 管理者 from empas a,emp as b where a.mgr is not null and a.mgr=b.ename;- -9 對(duì)于 dept 表中, 列出所有部門名, 部門號(hào), 同時(shí)列出各部門工作為 'CLERK' 的員工名與工作select a.deptno as 部門號(hào) ,a.dname as 部門名 ,b.ename as 員工名 ,b.job as 工作 from dept as a,emp as b where a.deptno=b.deptno and b.job='clerk'

35、- -10 對(duì)于工資高于本部門平均水平的員工,列出部門號(hào),姓名,工資,按部門號(hào)排序select b.deptno as 部門號(hào) ,b.ename as 姓名 ,b.sal as 工資 from emp as b where b.sal>(select avg(a.sal) from emp as a where a.deptno=b.deptno) order by b.deptno;- -11 對(duì)于emp, 列出各個(gè)部門中工資高于本部門平均工資的員工數(shù)和部門號(hào), 按部門號(hào)排序select a.deptno as 部門號(hào) ,count(a.sal) as 員工數(shù) from emp as

36、awhere a.sal>(select avg(b.sal) from emp as b where a.deptno=b.deptno)group by a.deptno orderby a.deptno;- -12對(duì)于emp中工資高于本部門平土§水平,人數(shù)多與1人的,列出部門號(hào),人數(shù),平均工資,按部門號(hào)排序select count(a.empno) as 員工數(shù) ,a.deptno as 部門號(hào) ,avg(sal) as 平均工 資from emp as a where (select count(c.empno) from emp as c where c.deptno

37、=a.deptno andc.sal>(select avg(sal) from emp as b where c.deptno=b.deptno)>1group by a.deptno order by a.deptno;- -13對(duì)于emp中低于自己工資至少5人的員工,列出具部門號(hào),姓名,工資,以及工資少于自己的人數(shù)select a.deptno as 部門號(hào) ,a.ename as 姓名 ,a.sal as 工資 ,(select count(b.ename) from emp as bwhere b.sal<a.sal) as 人數(shù) from emp as awher

38、e (select count(b.ename) from emp as b where b.sal<a.sal)>=5 1、對(duì)于教學(xué)數(shù)據(jù)庫(kù)的三個(gè)基本表(如下),試用 SQL的查詢語(yǔ)句表達(dá)下列查詢:學(xué)生 S(S#, SNAM,E AGE, SEX)學(xué)習(xí) SC( S#, C#, GRAD)E課程 C( C#,CNAME,TEACH)ER( 1)檢索 LIU 老師所授課的課程號(hào)和課程名。Select c#,cnameFrom cWhere teacher= LIU( 2)檢索年齡大于 23 歲的男學(xué)生的學(xué)號(hào)和姓名。Select s#,snameFrom sWhere AGE>23

39、 and sex='男'( 3)檢索至少選修LIU 老師所授課程中一門課程的女學(xué)生姓名。方法一:Select snameFrom s,sc,cliuWhere s.sex= 女 and s.s#=sc.s# and sc.c#=c.c# and c.teacher= 方法二:Select snameFrom sWhere s# in (select s#From scWhere c# in (select c#From cWhere teacher= liu )and sex= 女(4)檢索WANG學(xué)未學(xué)的課程的課程號(hào)。方法一:Select c#From CWhere c# n

40、ot in (select c#From sc,sWhere = wang and s.s#=sc.s#)方法二:Select c#From cWhere not exists(select *From s,scWhere s.s#=sc.s# and sc.c#=c.c# and sname= wang)( 5)檢索至少選修兩門課程的學(xué)生學(xué)號(hào)。方法一:Select distinct a.s#From sc a,sc bWhere a.s#=B.s# and a.c#<>b.c#方法二:Select s#From scGroup by s#Having count(*)

41、>=2( 6)檢索全部學(xué)生都選修的課程的課程號(hào)與課程名。Select c#.cnameFrom cWhere not exists(select *From sWhere not exists(select *From scWhere s.s#=sc.s# and sc.c#=c.c#)( 7)檢索選修課程包含LIU 老師所授課的學(xué)生學(xué)號(hào)。Select distinct s#From sc s1Where not exists(select *From c where teacher= liu andNot exists(select * from sc s2Where s1.s#=s2

42、.s#And c.c#=s2.c#)( 8)統(tǒng)計(jì)有學(xué)生選修的課程門數(shù)。Select count(distinct c#)From sc( 9)求選修C4 課程的學(xué)生的平均年齡。Select AVG(age)From s,scWhere s.s#=sc.s# and c#= c4( 10)求LIU 老師所授課程的每門課程的學(xué)生平均成績(jī)。Select c#,avg(grade)From scWhere c# in (select c#From CWhere teacher= liu )Group by c#( 11)統(tǒng)計(jì)每門課程的學(xué)生選修人數(shù)(超過10 人的課程才統(tǒng)計(jì))。要求輸出課程號(hào)和選修人數(shù),

43、Select c#,count(s#)From scGroup by c#Having count(s#)>102、更新語(yǔ)句Insert 、 update 、 delete試用SQL更新語(yǔ)句對(duì)教學(xué)數(shù)據(jù)庫(kù)中三個(gè)基本表 S、SG C進(jìn)行更新操作。(參看作業(yè)3)( 1)在基本表S 中插入一個(gè)學(xué)生元組( S9,WU,18)。Insert into s(s#,sname,age)Values( S9 , WU ,18)( 2) 在基本表 S 中檢索每一門課程成績(jī)都大于等于80 分的學(xué)生學(xué)號(hào)、 姓名和性別,并把檢索到的值送往另一個(gè)新的基本表STUDENT(S#,SNAME,SEX)Create ta

44、ble student(s# char(10),Sname char(20),Sex char(2)Insert into stuentSelect S#,sname,sexFrom sWhere not exists(select *From scWhere s.s#=sc.s# and grade<80) 或Select S#,sname,sex into studentFrom sWhere not exists(select *From scWhere s.s#=sc.s# and grade<80)(3)在基本表SC中刪除尚無成績(jī)的選課元組Delete from scWh

45、ere grade is null(4)把WANG學(xué)的學(xué)習(xí)選課和成績(jī)?nèi)縿h除去方法一:Delete from scWhere wang =(select snameFrom sWhere s.s#=sc.s#)方法二:Delete from scWhere s# in (select s#From sWhere sname= wang)(5)把選修MATHS!不及格的成績(jī)?nèi)臑榭罩?。方法一:Update sc set grade=nullWhere 60>(select gradeFrom sc,cWhere ame= maths and sc.c#=c.c#)方法二: update s

46、c set grade=nullWhere grade<60 and c#=(select c#From cWhere cname= maths)( 6)把低于總平均成績(jī)的女同學(xué)成績(jī)提高5%。Update sc set grade=grade*1.05Where s# in (select s#From sWhere sc.s#=s.s# and sex=女)And grade>(select avg(grade) from sc)(7)在基本表SC中修改C4課程的成績(jī),若成績(jī)小于等于75分時(shí)提高5%若 成績(jī)大于75分時(shí)提高4%州兩個(gè)UPDAT踣句實(shí)現(xiàn))。(略)若課程號(hào)為: C4U

47、pdate sc set grade=grade*1.05Where c#= C4 and grade<=75Update sc set grade=grade*1.04Where c#= C4 and grade>75若課程名為: C4Update sc set grade=grade*1.05Where C# in (select C#From CWhere cname= C4 )and grade <=75Update sc set grade=grade*1.05Where C# in (select C#From CWhere cname= C4 )and grad

48、e >75注:查詢每位學(xué)生的學(xué)號(hào)、姓名及總成績(jī)。select sc.sno,sname,sum(grade)from student,scwhere student.sno=sc.snogroup by sc.sno,sname若語(yǔ)句中含有 group by 子句, select 子句中的字段,除集聚函數(shù)外,都需在group by 后出現(xiàn)才行。多表時(shí),有重復(fù)字段名時(shí),一定要標(biāo)明所有的字段是哪個(gè)表的。3、創(chuàng)建表create實(shí)例二:設(shè)有如圖所示的關(guān)系S,SC和C,試用關(guān)系代數(shù)表達(dá)式表示下列查詢語(yǔ)句:SC1、 創(chuàng)建實(shí)例二中的基本表,指出主鍵、外鍵。Create table S( S# int

49、primary key, Sname char(8), AGE tinyint, Sex char(2)Create table SC(S# int foreign key references s(S#),C# char(3) foreign key references c(C#), Grade int, Primary key (S#,C#)Create table C(C# char(3) primary key, cname char(10), teacher char(8)1) 創(chuàng)建一張學(xué)生表,包含以下信息,學(xué)號(hào),姓名,年齡,性別,家庭住址,聯(lián)系電話Create table stu

50、 ( 學(xué)號(hào) int ,姓名 varchar(8),年齡 int,性別 varchar(4),家庭地址varchar(50),聯(lián)系電話int);2) 修改學(xué)生表的結(jié)構(gòu),添加一列信息,學(xué)歷Alter table stu add 學(xué)歷 varchar(6);3) 修改學(xué)生表的結(jié)構(gòu),刪除一列信息,家庭住址Alter table stu drop column 家庭地址4) 向?qū)W生表添加如下信息:學(xué)號(hào) 姓名年齡性別聯(lián)系電話學(xué)歷1A22 男 123456 小學(xué)2B21男119中學(xué)3c23男110高中4D18女114大學(xué),22,男,123456, 小學(xué)),21,男,119,中學(xué)),23,男,110,高中),

51、18,女,114,大學(xué))11 開頭的學(xué)員的學(xué)歷改為“大?!盜nsert into stu values(1, AInsert into stuvalues(2,BInsert into stuvalues(3,cInsert into stuvalues(4,D5) 修改學(xué)生表的數(shù)據(jù),將電話號(hào)碼以Update stu set 學(xué)歷 =大專where 聯(lián)系電話 like 11%6)刪除學(xué)生表的數(shù)據(jù),姓名以C開頭,性別為男的記錄刪除Delect from stu where 性別 =男and 姓名 like c%7) 查詢學(xué)生表的數(shù)據(jù), 將所有年齡小于 22 歲的, 學(xué)歷為“大專”的, 學(xué)生 的姓

52、名和學(xué)號(hào)示出來Select 姓名 , 學(xué)號(hào) from stu where 年齡 <22 and 學(xué)歷 =大專8) 查詢學(xué)生表的數(shù)據(jù),查詢所有信息,列出前25%的記錄Select top 25 percent * from stu9) 查詢出所有學(xué)生的姓名,性別,年齡降序排列Select 姓名 , 性別 from stu order by 年齡 desc10) 按照性別分組查詢所有的平均年齡Select avg( 年齡 ) from stu group by 性別三 填空 (3 分/題 ) 361) 索引分為_聚集索引_和_非聚集索引_在一張表上最多可以創(chuàng)建1個(gè) 聚集索引_索引。但是可以創(chuàng)

53、建_249 個(gè)非 聚集索引 索引。2) 系統(tǒng)存儲(chǔ)過程_sp-helptext_ 是用來顯示規(guī)則,默認(rèn)值,未加密的存儲(chǔ)過程,用戶定義函數(shù),觸發(fā)或視圖的文本3) 事務(wù)開始: begin Transction提交事務(wù):commit Transction回滾事務(wù):rollback Transction四 問答題 (5 分/ 題 )601) 數(shù)據(jù)庫(kù)包含哪些那幾種后綴名的文件必須,這些文件分別存放在什么的信息 ?主要數(shù)據(jù)文件(.mdf) 包含數(shù)據(jù)用戶收集的信息 , 還有數(shù)據(jù)庫(kù)其他相關(guān)的信息,日志數(shù)據(jù)文件(.ndf) 存放用戶對(duì)數(shù)據(jù)庫(kù)的增刪改查的信息 , 用于備份恢復(fù)使用2) TRUNCATE TABL瑜令

54、是什么含義?和Delete from表名有什么區(qū)?TRUNCATE TABLE®供了一種刪除表中所有記錄的快速方法Delete from 表名 : 可以刪除表的一個(gè)或多條記錄3) 說出以下聚合數(shù)的含義: avg ,sum ,max ,min , count ,count(*)AVG求平均值SUM求和MAX求最大值MIN:求最小值COUNT(*):返回所有行數(shù)COUN返回滿足指定條件的記錄值4) inner join 是什么意思 ?作用是什么 ?寫出基本語(yǔ)法結(jié)構(gòu)INNER JOIN 內(nèi)聯(lián)接 , 用于返回兩個(gè)表中要查詢的列數(shù)據(jù)通信Select * from 表名 1 inner join

55、 表名 2 on 條件表達(dá)式5) 左向外聯(lián)接,右向外聯(lián)接,全聯(lián)接的關(guān)健字如何寫 ?Left outer join左向外聯(lián)接Right outer join 右向外聯(lián)接Full outer join全聯(lián)接6) 子查詢分為幾類,說明相互之間的別了查詢分三種基本子查詢 : 1. 使用 in 查詢返回一列或更多值2. 比較運(yùn)算符, 返回單個(gè)值勤做為外查詢的參數(shù)3. 用 exists 查詢時(shí)相當(dāng)于進(jìn)行一次數(shù)據(jù)測(cè)試7) 實(shí)現(xiàn)實(shí)體完整性, 實(shí)現(xiàn)域完整性, 實(shí)現(xiàn) 完整性 ( 引用完整性) , 實(shí)現(xiàn)自定義完整性分別使用什么手段?實(shí)現(xiàn)實(shí)體完整性: 主鍵約束 唯一約束 標(biāo)識(shí)列實(shí)現(xiàn)域完整性: 默認(rèn)值約束檢查約束 非空

56、屬性引和完整性: 外鍵引用8) 視圖可以更新嗎?會(huì)影響到實(shí)際表嗎?視圖是可以更新的 , 視圖只是基于基本表上的虛擬表, 對(duì)視圖的更新會(huì)直接影響到實(shí)際表9) 談?wù)勥@樣幾個(gè)角色, dbo , Sysadmin publicDbo : 是數(shù)據(jù)庫(kù)的擁有者, 對(duì)數(shù)據(jù)庫(kù)擁有所有操作的權(quán)限Sysadmin :可以對(duì)SQL SERVER行任何活動(dòng)Public : 自動(dòng)創(chuàng)建的 , 能捕獲數(shù)據(jù)庫(kù)中用戶的所有默認(rèn)權(quán)限10) 何為動(dòng)態(tài)游標(biāo)?何為靜態(tài)游標(biāo)?動(dòng)態(tài)游標(biāo)與靜態(tài)游標(biāo)相對(duì) , 反映結(jié)果集中所做的所有更改 ,靜態(tài)游標(biāo)的結(jié)果集在游標(biāo)打開時(shí),建立在tempdb中,總按照游標(biāo)打開時(shí)的原 樣顯示11) 什么是存儲(chǔ)過程?為什

57、么存儲(chǔ)過程要比單純的Sql 語(yǔ)句執(zhí)行起來要快?存儲(chǔ)過程:是一組預(yù)先編譯好的T-SQL代碼在創(chuàng)建存儲(chǔ)過程時(shí)經(jīng)過了語(yǔ)法和性能優(yōu)化 , 執(zhí)行不必重復(fù)的步驟 , 使用存儲(chǔ) 過程可提高運(yùn)行效率12) 什么是 Inserted 表 ? 什么是 Deleted 表?Inserted 表用于存儲(chǔ)inserted 和 update 語(yǔ)句影響的副本Deleted 表用于存儲(chǔ)delect 和 update 語(yǔ)句影響的行的副本一 查詢語(yǔ)句- 1 查詢所有記錄從studentSelect * from student- 2. 查詢部 s_no,s_name 段從 student 中。select s_name,s_no from student- 3 查詢并采用別名選擇s_name,=( 姓名 ) , s_no (學(xué)號(hào))從studentfrom studentselect 學(xué)號(hào)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論