SQL面試題目彙總

SQL面試題目彙總 html


1.觸發器的做用?
答:觸發器是一中特殊的存儲過程,主要是經過事件來觸發而被執行的。它能夠強化約束,來維護數據的
完整性和一致性,能夠跟蹤數據庫內的操做從而不容許未經許可的更新和變化。能夠聯級運算。如,某表
上的觸發器上包含對另外一個表的數據操做,而該操做又會致使該表觸發器被觸發。
2。什麼是存儲過程?用什麼來調用?
答:存儲過程是一個預編譯的SQL語句,優勢是容許模塊化的設計,就是說只需建立一次,之後在該程序
中就能夠調用屢次。若是某次操做須要執行屢次SQL,使用存儲過程比單純SQL語句執行要快。能夠用
一個命令對象來調用存儲過程。
3。索引的做用?和它的優勢缺點是什麼?
答:索引就一種特殊的查詢表,數據庫的搜索引擎能夠利用它加速對數據的檢索。它很相似與現實生活中
書的目錄,不須要查詢整本書內容就能夠找到想要的數據。索引能夠是惟一的,建立索引容許指定單個列
或者是多個列。缺點是它減慢了數據錄入的速度,同時也增長了數據庫的尺寸大小。
3。什麼是內存泄漏?
答:通常咱們所說的內存泄漏指的是堆內存的泄漏。堆內存是程序從堆中爲其分配的,大小任意的,使用
完後要顯示釋放內存。當應用程序用關鍵字new等建立對象時,就從堆中爲它分配一塊內存,使用完後程
序調用free 或者delete釋放該內存,不然就說該內存就不能被使用,咱們就說該內存被泄漏了。
4。維護數據庫的完整性和一致性,你喜歡用觸發器仍是自寫業務邏輯?爲何?
答:我是這樣作的,儘量使用約束,如check,主鍵,外鍵,非空字段等來約束,這樣作效率最高,也最
方便。其次是使用觸發器,這種方法能夠保證,不管什麼業務系統訪問數據庫均可以保證數據的完整新和
一致性。最後考慮的是自寫業務邏輯,但這樣作麻煩,編程複雜,效率低下。
5。什麼是事務?什麼是鎖?
答:事務就是被綁定在一塊兒做爲一個邏輯工做單元的SQL語句分組,若是任何一個語句操做失敗那麼整
個操做就被失敗,之後操做就會回滾到操做前狀態,或者是上有個節點。爲了確保要麼執行,要麼不執行,
就可使用事務。要將有組語句做爲事務考慮,就須要經過ACID測試,即原子性,一致性,隔離性和持
久性。
鎖:在因此的DBMS中,鎖是實現事務的關鍵,鎖能夠保證事務的完整性和併發性。與現實生活中鎖一
樣,它可使某些數據的擁有者,在某段時間內不能使用某些數據或數據結構。固然鎖還分級別的。
6。什麼叫視圖?遊標是什麼?
答:視圖是一種虛擬的表,具備和物理表相同的功能。能夠對視圖進行增,改,查,操做,試圖一般是有
一個表或者多個表的行或列的子集。對視圖的修改不影響基本表。它使得咱們獲取數據更容易,相比多表
查詢。
遊標:是對查詢出來的結果集做爲一個單元來有效的處理。遊標能夠定在該單元中的特定行,從結果集
的當前行檢索一行或多行。能夠對結果集當前行作修改。通常不使用遊標,可是須要逐條處理數據的時候,
遊標顯得十分重要。
7。爲管理業務培訓信息,創建3個表:
S(S#,SN,SD,SA)S#,SN,SD,SA分別表明學號,學員姓名,所屬單位,學員年齡
C(C#,CN)C#,CN分別表明課程編號,課程名稱
SC(S#,C#,G)S#,C#,G分別表明學號,所選的課程編號,學習成績
(1)使用標準SQL嵌套語句查詢選修課程名稱爲’稅收基礎’的學員學號和姓名?
答案:selects#,sn from swhereS#in(select S#from c,scwherec.c#=sc.c#andcn=’稅收基礎’)
(2) 使用標準SQL嵌套語句查詢選修課程編號爲’C2’的學員姓名和所屬單位?
答:selectsn,sdfrom s,scwheres.s#=sc.s#andsc.c#=’c2’
(3) 使用標準SQL嵌套語句查詢不選修課程編號爲’C5’的學員姓名和所屬單位?
答:selectsn,sdfrom swheres#notin(select s#from scwherec#=’c5’)
(4)查詢選修了課程的學員人數
答:select 學員人數=count(distincts#)from sc
(5) 查詢選修課程超過5門的學員學號和所屬單位?
答:selectsn,sdfrom swheres#in(select s#from scgroupbys#havingcount(distinctc#)>5)
目前在職場中很難找到很是合格的數據庫開發人員。有人說:「SQL開發是一門語言,它很容易學,可是很
難掌握。」
華爲http://sqlserver.365dev.net/sql-1981.html
在面試過程當中屢次碰到兩道SQL查詢的題目,一是查詢A(ID,Name)表中第31至40條記錄,ID 做爲主鍵
多是不是連續增加的列,完整的查詢語句以下:
selecttop 10*from AwhereID >(selectmax(ID)from (selecttop 30ID from AorderbyA)T)orderbyA
另一道題目的要求是查詢表A中存在ID 重複三次以上的記錄,完整的查詢語句以下:
select*from(select count(ID)ascountfrom table groupbyID)T whereT.count>3
以上兩道題目很是有表明意義,望各位把本身碰到的有表明的查詢都貼上來。
createtable testtable1
(
id int IDENTITY,
departmentvarchar(12)
)
select*from testtable1
insert into testtable1 values('設計')
insert into testtable1 values('市場')
insert into testtable1 values('售後')
/*
結果
id department
1 設計
2 市場
3 售後
*/
createtable testtable2
(
id int IDENTITY,
dptIDint,
namevarchar(12)
)
insert into testtable2 values(1,'張三')
insert into testtable2 values(1,'李四')
insert into testtable2 values(2,'王五')
insert into testtable2 values(3,'彭六')
insert into testtable2 values(4,'陳七')
/*
用一條SQL語句,怎麼顯示以下結果
id dptIDdepartmentname
1 1 設計 張三
2 1 設計 李四
3 2 市場 王五
4 3 售後 彭六
5 4 黑人 陳七
*/
答案是:
SELECTtesttable2.* , ISNULL(department,'黑人')
FROMtesttable1 rightjoin testtable2 ontesttable2.dptID =testtable1.ID
在面試應聘的SQLServer數據庫開發人員時,我運用了一套標準的基準技術問題。下面這些問題是我覺
得可以真正有助於淘汰不合格應聘者的問題。它們按照從易到難的順序排列。當你問到關於主鍵和外鍵的
問題時,後面的問題都十分有難度,由於答案可能會更難解釋和說明,尤爲是在面試的情形下。
你能向我簡要敘述一下SQLServer2000中使用的一些數據庫對象嗎?
你但願聽到的答案包括這樣一些對象:表格、視圖、用戶定義的函數,以及存儲過程;若是他們還可以提到像
觸發器這樣的對象就更好了。若是應聘者不能回答這個基本的問題,那麼這不是一個好兆頭。
NULL NULL是什麼意思?
NULL(空)這個值是數據庫世界裏一個很是難纏的東西,因此有很多應聘者會在這個問題上跌跟頭您也不要
以爲意外。
NULL這個值表示UNKNOWN(未知):它不表示「」(空字符串)。假設您的SQLServer數據庫裏有
ANSI_NULLS,固然在默認狀況下會有,對NULL這個值的任何比較都會生產一個NULL值。您不能把任
何值與一個UNKNOWN值進行比較,並在邏輯上但願得到一個答案。您必須使用IS NULL操做符。
什麼是索引?SQLServer2000裏有什麼類型的索引?
任何有經驗的數據庫開發人員都應該可以很輕易地回答這個問題。一些經驗不太多的開發人員可以回答這
個問題,可是有些地方會說不清楚。
簡單地說,索引是一個數據結構,用來快速訪問數據庫表格或者視圖裏的數據。在SQLServer裏,它們
有兩種形式:彙集索引和非彙集索引。彙集索引在索引的葉級保存數據。這意味着不論彙集索引裏有表格的
哪一個(或哪些)字段,這些字段都會按順序被保存在表格。因爲存在這種排序,因此每一個表格只會有一個聚
集索引。非彙集索引在索引的葉級有一個行標識符。這個行標識符是一個指向磁盤上數據的指針。它容許
每一個表格有多個非彙集索引。
什麼是主鍵?什麼是外鍵?
主鍵是表格裏的(一個或多個)字段,只用來定義表格裏的行;主鍵裏的值老是惟一的。外鍵是一個用來創建
兩個表格之間關係的約束。這種關係通常都涉及一個表格裏的主鍵字段與另一個表格(儘管多是同一個
表格)裏的一系列相連的字段。那麼這些相連的字段就是外鍵。
什麼是觸發器?SQLServer2000有什麼不一樣類型的觸發器?
讓將來的數據庫開發人員知道可用的觸發器類型以及如何實現它們是很是有益的。
觸發器是一種專用類型的存儲過程,它被捆綁到SQLServer2000的表格或者視圖上。在SQLServer2000
裏,有INSTEAD-OF 和AFTER兩種觸發器。INSTEAD-OF 觸發器是替代數據操控語言(DataManipulation
Language,DML)語句對錶格執行語句的存儲過程。例如,若是我有一個用於TableA的
INSTEAD-OF-UPDATE 觸發器,同時對這個表格執行一個更新語句,那麼INSTEAD-OF-UPDATE 觸發器
裏的代碼會執行,而不是我執行的更新語句則不會執行操做。
AFTER觸發器要在DML語句在數據庫裏使用以後才執行。這些類型的觸發器對於監視發生在數據庫表格
裏的數據變化十分好用。
您如何確一個帶有名爲Fld1字段的TableB表格裏只具備Fld1字段裏的那些值,而這些值同時在名爲
TableA的表格的Fld1字段裏?
這個與關係相關的問題有兩個可能的答案。第一個答案(並且是您但願聽到的答案)是使用外鍵限制。外鍵
限制用來維護引用的完整性。它被用來確保表格裏的字段只保存有已經在不一樣的(或者相同的)表格裏的另
一個字段裏定義了的值。這個字段就是候選鍵(一般是另一個表格的主鍵)。
另一種答案是觸發器。觸發器能夠被用來保證以另一種方式實現與限制相同的做用,可是它很是難設
置與維護,並且性能通常都很糟糕。因爲這個緣由,微軟建議開發人員使用外鍵限制而不是觸發器來維護
引用的完整性。
對一個投入使用的在線事務處理表格有過多索引須要有什麼樣的性能考慮?
你正在尋找進行與數據操控有關的應聘人員。對一個表格的索引越多,數據庫引擎用來更新、插入或者刪
除數據所須要的時間就越多,由於在數據操控發生的時候索引也必需要維護。
你能夠用什麼來確保表格裏的字段只接受特定範圍裏的值?
這個問題能夠用多種方式來回答,可是隻有一個答案是「好」答案。您但願聽到的回答是Check限制,它在
數據庫表格裏被定義,用來限制輸入該列的值。
觸發器也能夠被用來限制數據庫表格裏的字段可以接受的值,可是這種辦法要求觸發器在表格裏被定義,
這可能會在某些狀況下影響到性能。所以,微軟建議使用Check限制而不是其餘的方式來限制域的完整性。
若是應聘者可以正確地回答這個問題,那麼他的機會就很是大了,由於這代表他們具備使用存儲過程的經
驗。
返回參數老是由存儲過程返回,它用來表示存儲過程是成功仍是失敗。返回參數老是INT數據類型。
OUTPUT參數明確要求由開發人員來指定,它能夠返回其餘類型的數據,例如字符型和數值型的值。(可
以用做輸出參數的數據類型是有一些限制的。)您能夠在一個存儲過程裏使用多個OUTPUT參數,而您只
可以使用一個返回參數。
什麼是相關子查詢?如何使用這些查詢?
經驗更加豐富的開發人員將可以準確地描述這種類型的查詢。
相關子查詢是一種包含子查詢的特殊類型的查詢。查詢裏包含的子查詢會真正請求外部查詢的值,從而形
成一個相似於循環的情況。
相關文章
相關標籤/搜索