sql經(jīng)典面試題_第1頁
sql經(jīng)典面試題_第2頁
sql經(jīng)典面試題_第3頁
sql經(jīng)典面試題_第4頁
sql經(jīng)典面試題_第5頁
已閱讀5頁,還剩20頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、1 .張表,學生表S課程C學生課程表SC學生可以選修多門課程,一門課程可以被多個學生選修 通過SC表關聯(lián);(SQL)1)寫出建表語句;答:建表語句如下(mysql 數(shù)據(jù)庫) :create table s(id integer primary key, name varchar(20);create table c(id integer primary key, name varchar(20);create table sc(sid integer references s(id),cid integer references c(id), primary key(sid,cid);2)寫出

2、SQL語句,查詢選修了所有選修課程的學生;答:SQL語句如下:select , from s stuwhere (select count(*) from sc where sid= =(select count(*) from c);3)寫出SQL語句,查詢選修了至少 5門以上的課程的學生。答:SQL語句如下:select , from s stuwhere (select count(*) from sc where sid=5;2 .數(shù)據(jù)庫表(Test)吉構如下:(SQL) IDNAMEAGEMANAGE即屬主管人 ID) 106A30104109B19104104C20111107D3

3、5109112E25120119F45NULL要求 :列出所有年齡比所屬主管年齡大的人的ID 和名字答:SQL語句如下:select from test employee where (select from test manager where =;3 .有3個表( 15 分鐘) : (SQL)Student 學生表(學號,姓名,性別,年齡,組織部門)Course 課程表(編號,課程名稱)Sc 選課表(學號,課程編號,成績)表結構如下:1)寫一個SQL語句,查詢選修了計算機原理的學生學號和姓名(3分鐘)答:SQL語句如下:select , from Student stuwhere (sel

4、ect count(*) from sc where sno= and cno =(select cno from Course where cname= 計算機原理) != 0;2)寫一個SQL語句,查詢周星馳同學選修了的課程名字(3分鐘)答:SQL語句如下:select cname from Course where cno in (select cno from sc where sno=(select sno from Student where sname= 周星馳);3)寫一個SQL語句,查詢選修了 5門課程的學生學號和姓名(9分鐘)答:SQL語句如下:select , from

5、student stuwhere (select count(*) from sc where sno= = 5;小小+霸霸+王王=小霸王小 =,霸 =,王 = 用 sql 求證參考答案:declare data int,i int,j int,l intset data=100while (data=999)beginset i=data/100set j=data/10 % 10set l=data % 10 if(i+j+l)*11=data)beginSelect data data,i i,j j,l l breakendset data=data+1end;分析:II+JJ+LL=

6、IJLI*10+I +J*10+J+L*10+L=I*100+J*10+L(I+J+L)*111 . 用一條 SQL 語句 查詢出每門課都大于80 分的學生姓名namekechengfenshu張三語文81張三數(shù)學75李四語文76李四數(shù)學90王五語文81王五數(shù)學100王五英語90A: selectdistinctname fromtable where name not in (select distinct name from table wherefenshu802 . 一個叫 depart 的表,里面只有一個字段team, 一共有 4 條紀錄,分別是a,b,c,d, 對應四個球對,現(xiàn)在四

7、個球對進行比賽,用一條sql 語句顯示所有可能的比賽組合.你先按你自己的想法做一下,看結果有我的這個簡單嗎create table depart(team varchar(50) not null)答: select , from depart a, depart b where 4 .說明:復制表( 只復制結構, 源表名:a 新表名:b)SQL: select * into b from a where 11(where1=1 ,拷貝表結構和數(shù)據(jù)內容)ORACLE:create table bAsSelect * from a where 1=2(不等于)(SQL Server Compac

8、t)比較兩個表達式。當使用此運算符比較非空表達式時,如果左操作數(shù)不等于右操作數(shù),則結果為 TRUE否則,衛(wèi)果為 FALSE 5 . 說明:拷貝表( 拷貝數(shù)據(jù), 源表名:a 目標表名:b)SQL: insert into b(a, b, c) select d,e,f from a;6 .說明:兩張關聯(lián)表,刪除主表中已經(jīng)在副表中沒有的信息SQL:Delete from info where not exists(select * from infobz where = )7 .有兩個表A 和 B ,均有 key 和 value 兩個字段,如果B 的 key 在 A 中也有,就把B 的value

9、換為 A 中對應的value 這道題的SQL 語句怎么寫update b set =(select from a where = where in(select from b,a where =;8 .為了便于閱讀, 查詢此表后的結果顯式如下( 及格分數(shù)為60):courseid coursename score mark1java70pass2oracle90pass3xml40fail4jsp30fail5servlet80pass寫出此查詢語句select courseid, coursename ,score ,decode ( sign(score-60),-1,fail,pass)

10、 as mark from course decode貌似在我的SQLSERVER200里無法識別,可用以下方法替代select courseid,coursename,score,(case when (score-60)=0 then pass else fail end) as mark from course*sql 面試題(2)有表A,結構如下:A: p_ID p_Num s_id1 10 011 12 022 8 013 11 014 8 03其中:p_ID為產(chǎn)品ID, p_Num為產(chǎn)品庫存量,s_id為倉庫ID。請用SQL語句實現(xiàn)將上表中 的數(shù)據(jù)合并,合并后的數(shù)據(jù)為:p_ID s

11、1_id s2_id s3_id 1 10 12 02 8 0 03 11 0 8其中: s1_id 為倉庫 1 的庫存量,s2_id 為倉庫 2 的庫存量,s3_id 為倉庫 3 的庫存量。如果該產(chǎn)品在某倉庫中無庫存量,那么就是0 代替。結果:select p_id ,sum(case when s_id=1 then p_num else 0 end) as s1_id,sum(case when s_id=2 then p_num else 0 end) as s2_id,sum(case when s_id=3 then p_num else 0 end) as s3_id from

12、myPro group by p_id7。為管理業(yè)務培訓信息,建立3 個表:S(S#,SN,SD,SA)S#,SN,SD,SA別代表學號,學員姓名,所屬單位,學員年齡C(C#,CN)C#,CN別代表課程編號,課程名稱SC(S#,C#,G) S#,C#,窗別代表學號,所選的課程編號,學習成績(1)使用標準SQL嵌套語句查詢選修課程名稱為稅收基礎的學員學號和姓名答案: select s# ,sn from s where S# in(select S# from c,sc where #=# and cn= 稅收基礎 )(2)使用標準SQL嵌套語句查詢選修課程編號為C2的學員姓名和所屬單位答: s

13、elect sn,sd from s,sc where #=# and #= c2(3)使用標準SQL嵌套語句查詢不選修課程編號為C5的學員姓名和所屬單位答: select sn,sd from s where s# not in(select s# from sc where c#= c5 )(4)查詢選修了課程的學員人數(shù)答: select 學員人數(shù)=count(distinct s#) from sc(5) 查詢選修課程超過5 門的學員學號和所屬單位答: select sn,sd from s where s# in(select s# from sc group by s# having

14、 count(distinct c#)5)SQL面試題(4)1 .查詢A(ID,Name)表中第31至40條記錄,ID作為主鍵可能是不是連續(xù)增長的列,完整的查詢語句如下:select top 10 * from A where ID (select max(ID) from (select top 30 ID from A order by A ) T)order by A2 .查詢表A中存在ID重復三次以上的記錄,完整的查詢語句如下:select * from(select count(ID) as count from table group by ID)T where 3SQL面試題(3

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

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

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

18、MS 中,鎖是實現(xiàn)事務的關鍵,鎖可以保證事務的完整性和并發(fā)性。與現(xiàn)實生活中鎖一樣,它可以使某些數(shù)據(jù)的擁有者,在某段時間內不能使用某些數(shù)據(jù)或數(shù)據(jù)結構。當然鎖還分級別的。6 。什么叫視圖游標是什么 答:視圖是一種虛擬的表,具有和物理表相同的功能??梢詫σ晥D進行增,改,查,操作,試圖通常是有一個表或者多個表的行或列的子集。對視圖的修改不影響基本表。它使得我們獲取數(shù)據(jù)更容易,相比多表查詢。游標:是對查詢出來的結果集作為一個單元來有效的處理。游標可以定在該單元中的特 定行,從結果集的當前行檢索一行或多行??梢詫Y果集當前行做修改。一般不使用游標, 但是需要逐條處理數(shù)據(jù)的時候,游標顯得十分重要。SQL面試

19、題(5)在面試應聘的SQL Server數(shù)據(jù)庫開發(fā)人員時, 我運用了一套標準的基準技術問題。 下面這些 問題是我覺得能夠真正有助于淘汰不合格應聘者的問題。它們按照從易到難的順序排列。當你問到關于主鍵和外鍵的問題時,后面的問題都十分有難度,因為答案可能會更難解釋和說明,尤其是在面試的情形下。你能向我簡要敘述一下SQL Server 2000中使用的一些數(shù)據(jù)庫對象嗎你希望聽到的答案包括這樣一些對象:表格、視圖、用戶定義的函數(shù),以及存儲過程;如果他們還能夠提到像觸發(fā)器這樣的對象就更好了。如果應聘者不能回答這個基本的問題,那么這不是一個好兆頭。NULL是什么意思NULL(空)這個值是數(shù)據(jù)庫世界里一個非

20、常難纏的東西,所以有不少應聘者會在這個問題上跌跟頭您也不要覺得意外。NULL這個值表示UNKNOWN(未知):它不表示“(空字符串)。假設您的SQL Server數(shù)據(jù)庫里 有ANSI_NULLS當然在默認情況下會有, 對NULL這個值的任何比較都會生產(chǎn)一個 NULL值。您不能把任何值與一個UNKNOWN 值進行比較,并在邏輯上希望獲得一個答案。您必須使用IS NULL操作符。什么是索引SQL Server 2000里有什么類型的索引任何有經(jīng)驗的數(shù)據(jù)庫開發(fā)人員都應該能夠很輕易地回答這個問題。一些經(jīng)驗不太多的開發(fā)人員能夠回答這個問題,但是有些地方會說不清楚。簡單地說,索引是一個數(shù)據(jù)結構,用來快速訪

21、問數(shù)據(jù)庫表格或者視圖里的數(shù)據(jù)。在 SQL Server里,它們有兩種形式:聚集索引和非聚集索引。聚集索引在索引的葉級保存數(shù)據(jù)。這意味著不論聚集索引里有表格的哪個(或哪些)字段,這些字段都會按順序被保存在表格。由于存在這種排序,所以每個表格只會有一個聚集索引。非聚集索引在索引的葉級有一個行標識符。這個行標識符是一個指向磁盤上數(shù)據(jù)的指針。它允許每個表格有多個非聚集索引。什么是主鍵什么是外鍵主鍵是表格里的(一個或多個)字段,只用來定義表格里的行;主鍵里的值總是唯一的。外鍵是一個用來建立兩個表格之間關系的約束。這種關系一般都涉及一個表格里的主鍵字段與另外一個表格(盡管可能是同一個表格)里的一系列相連的

22、字段。那么這些相連的字段就是外鍵。什么是觸發(fā)器SQL Server 2000有什么不同類型的觸發(fā)器讓未來的數(shù)據(jù)庫開發(fā)人員知道可用的觸發(fā)器類型以及如何實現(xiàn)它們是非常有益的。觸發(fā)器是一種專用類型的存儲過程,它被捆綁到SQL Server 2000的表格或者視圖上。在 SQLServer 2000里,有INSTEAD-。林口 AFTERS種觸發(fā)器。INSTEAD-OFt器是替代數(shù)據(jù)操控語 言(Data Manipulation Language, DML)語句對表格執(zhí)行語句的存儲過程。例如,如果我有一 個用于TableA的INSTEAD-OF-UPDATE蟲發(fā)器,同時對這個表格執(zhí)行一個更新語句,那么

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

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

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

26、使用一個返回參數(shù)。什么是相關子查詢如何使用這些查詢經(jīng)驗更加豐富的開發(fā)人員將能夠準確地描述這種類型的查詢。相關子查詢是一種包含子查詢的特殊類型的查詢。查詢里包含的子查詢會真正請求外部查詢的值,從而形成一個類似于循環(huán)的狀況。Sql 常見面試題受用了1. 用一條 SQL 語句 查詢出每門課都大于80 分的學生姓名namekechengfenshu三三四四五五五張張李李王王王文學文學文學語 語文 數(shù)學 語文 數(shù)學 語文 數(shù)學817576908110090A: select distinct name from table where name not in (select distinct name

27、from table where fenshu802. 學生表 如下 :自動編號學號姓名課程編號課程名稱分數(shù)12005001張三0001數(shù)學6922005002李四0001數(shù)學8932005001張三0001數(shù)學69刪除除了自動編號不同, 其他都相同的學生冗余信息A: delete tablename where 自動編號not in(select min( 自動編號) from tablename group by學號 , 姓名 , 課程編號, 課程名稱, 分數(shù) )3. 一個叫 team 的表,里面只有一個字段name, 一共有 4 條紀錄,分別是a,b,c,d, 對應四個球對,現(xiàn)在四個球對

28、進行比賽,用一條sql 語句顯示所有可能的比賽組合.你先按你自己的想法做一下,看結果有我的這個簡單嗎答: select ,from team a, team bwhere *5. 面試題:怎么把這樣一個表兒yearmonth amount1991119912199131991419921199221992319924查成這樣一個結果year m1 m2 m3 m419911992答案一、select year,(select amount from aaa m where month=1 and = as m1,(select amount fromaaa m where month=2(se

29、lect amount fromaaa m where month=3(select amount fromaaa m where month=4from aaa group by yearand = as m2, and = as m3, and = as m4*6. 說明:復制表( 只復制結構, 源表名:a 新表名:b)SQL: select * into b from a where 11(where1=1 ,拷貝表結構和數(shù)據(jù)內容)ORACLE:create table bAsSelect * from a where 1=2(不等于)(SQL Server Compact)比較兩個表達

30、式。當使用此運算符比較非空表達式時,如果左操作數(shù)不等于右操作數(shù),則結果為TRUE。否則,結果為FALSE。 7. 說明:拷貝表( 拷貝數(shù)據(jù), 源表名:a 目標表名:b)SQL: insert into b(a, b, c) select d,e,f from a;8. 說明:顯示文章、提交人和最后回復時間SQL: select , from table a,(select max(adddate) adddate from table where = b9. 說明:外連接查詢( 表名 1 : a 表名 2 : b)SQL: select , , , , , from a LEFT OUTER

31、JOIN b ON =ORACLE : select , , , , , from a ,bwhere = (+)10. 說明:日程安排提前五分鐘提醒SQL: select * from 日程安排where datediff(minute,f 開始時間,getdate()511. 說明:兩張關聯(lián)表,刪除主表中已經(jīng)在副表中沒有的信息SQL:Delete from info where not exists (select * from infobz where = )*12. 有兩個表A 和 B , 均有 key 和 value 兩個字段,如果 B 的 key 在 A 中也有, 就把 B 的va

32、lue 換為 A 中對應的value這道題的SQL 語句怎么寫update b set =(select from a where = where in(select from b,a where =;*13. 高級 sql 面試題原表 :courseid coursename score1 java 702 oracle 903 xml 404 jsp 305 servlet 80為了便于閱讀, 查詢此表后的結果顯式如下( 及格分數(shù)為60):courseid coursename score mark1 java 70 pass2 oracle 90 pass3 xml 40 fail4 j

33、sp 30 fail5 servlet 80 pass寫出此查詢語句select courseid, coursename ,score ,decode ( sign(score-60),-1,fail,pass) as mark from course完全正確SQL desc course_vName Null TypeCOURSEID NUMBERCOURSENAME VARCHAR2(10)SCORE NUMBERSQL select * from course_v;COURSEID COURSENAME SCORE1 java 702 oracle 903 xml 404 jsp 30

34、5 servlet 80SQL select courseid, coursename ,score ,decode(sign(score-60),-1,fail,pass) as mark from course_v;COURSEID COURSENAME SCORE MARK1 java 70 pass2 oracle 90 pass3 xml 40 fail4 jsp 30 fail5 servlet 80 passSQL面試題(1)create table testtable1(id int IDENTITY,department varchar(12)select * from te

35、sttable1insert into testtable1values(設計)insert into testtable1values(市場)insert into testtable1values(售后)/*結果id department1 設計2 市場3 售后*/create table testtable2(id int IDENTITY,dptID int,name varchar(12)insert intotesttable2 values(1,張三)insert intotesttable2 values(1,李四)insert intotesttable2 values(2,

36、王五)insert intotesttable2 values(3,彭六)insert intotesttable2 values(4,陳七)/*用一條SQL語句,怎么顯示如下結果id dptID department name11設計張三21設計李四32市場王五43售后彭六54黑人陳七*/答案:SELECT testtable2.* , ISNULL(department,黑人)FROM testtable1 right join testtable2 on =也做出來了可比這方法稍復雜。sql 面試題(2)有表A,結構如下:A: p_ID p_Num s_id1 10 011 12 022

37、 8 013 11 014 8 03其中:p_ID為產(chǎn)品ID, p_Num為產(chǎn)品庫存量,s_id為倉庫ID。請用SQL語句實現(xiàn)將上表中 的數(shù)據(jù)合并,合并后的數(shù)據(jù)為:p_ID s1_id s2_id s3_id1 10 12 02 8 0 03 11 0 8其中: s1_id 為倉庫 1 的庫存量,s2_id 為倉庫 2 的庫存量,s3_id 為倉庫 3 的庫存量。如果該產(chǎn)品在某倉庫中無庫存量,那么就是0 代替。結果:select p_id ,sum(case when s_id=1 then p_num else 0 end) as s1_id,sum(case when s_id=2 the

38、n p_num else 0 end) as s2_id,sum(case when s_id=3 then p_num else 0 end) as s3_idfrom myPro group by p_idSQL面試題(3)1 觸發(fā)器的作用答:觸發(fā)器是一中特殊的存儲過程,主要是通過事件來觸發(fā)而被執(zhí)行的。它可以強化約束, 來維護數(shù)據(jù)的完整性和一致性,可以跟蹤數(shù)據(jù)庫內的操作從而不允許未經(jīng)許可的更新和變化。 可以聯(lián)級運算。如,某表上的觸發(fā)器上包含對另一個表的數(shù)據(jù)操作,而該操作又會導致該表觸發(fā)器被觸發(fā)。2 。什么是存儲過程用什么來調用答: 存儲過程是一個預編譯的SQL 語句, 優(yōu)點是允許模塊化的設

39、計,就是說只需創(chuàng)建一次,以后在該程序中就可以調用多次。如果某次操作需要執(zhí)行多次SQL ,使用存儲過程比單純SQL 語句執(zhí)行要快??梢杂靡粋€命令對象來調用存儲過程。3 。索引的作用和它的優(yōu)點缺點是什么答: 索引就一種特殊的查詢表,數(shù)據(jù)庫的搜索引擎可以利用它加速對數(shù)據(jù)的檢索。它很類似與現(xiàn)實生活中書的目錄,不需要查詢整本書內容就可以找到想要的數(shù)據(jù)。索引可以是唯一的,創(chuàng)建索引允許指定單個列或者是多個列。缺點是它減慢了數(shù)據(jù)錄入的速度,同時也增加了數(shù)據(jù)庫的尺寸大小。4 。什么是內存泄漏答: 一般我們所說的內存泄漏指的是堆內存的泄漏。堆內存是程序從堆中為其分配的,大小任意的,使用完后要顯示釋放內存。當應用程

40、序用關鍵字new 等創(chuàng)建對象時,就從堆中為它分配一塊內存,使用完后程序調用free 或者 delete 釋放該內存,否則就說該內存就不能被使用,我們就說該內存被泄漏了。4 。維護數(shù)據(jù)庫的完整性和一致性,你喜歡用觸發(fā)器還是自寫業(yè)務邏輯為什么答:我是這樣做的,盡可能使用約束,如check, 主鍵,外鍵,非空字段等來約束,這樣做效率最高,也最方便。其次是使用觸發(fā)器,這種方法可以保證,無論什么業(yè)務系統(tǒng)訪問數(shù)據(jù)庫都可以保證數(shù)據(jù)的完整新和一致性。最后考慮的是自寫業(yè)務邏輯,但這樣做麻煩,編程復雜,效率低下。5 。什么是事務什么是鎖答:事務就是被綁定在一起作為一個邏輯工作單元的SQL 語句分組,如果任何一個語

41、句操作失敗那么整個操作就被失敗,以后操作就會回滾到操作前狀態(tài),或者是上有個節(jié)點。為了確保要么執(zhí)行,要么不執(zhí)行,就可以使用事務。要將有組語句作為事務考慮,就需要通過ACID測試,即原子性,一致性,隔離性和持久性。鎖:在所以的DBMS 中,鎖是實現(xiàn)事務的關鍵,鎖可以保證事務的完整性和并發(fā)性。與現(xiàn)實生活中鎖一樣,它可以使某些數(shù)據(jù)的擁有者,在某段時間內不能使用某些數(shù)據(jù)或數(shù)據(jù)結構。當然鎖還分級別的。6 。什么叫視圖游標是什么答:視圖是一種虛擬的表,具有和物理表相同的功能。可以對視圖進行增,改,查,操作,試圖通常是有一個表或者多個表的行或列的子集。對視圖的修改不影響基本表。它使得我們獲取數(shù)據(jù)更容易,相比多

42、表查詢。游標:是對查詢出來的結果集作為一個單元來有效的處理。游標可以定在該單元中的特定行,從結果集的當前行檢索一行或多行。可以對結果集當前行做修改。一般不使用游標,但是需要逐條處理數(shù)據(jù)的時候,游標顯得十分重要。7。為管理業(yè)務培訓信息,建立3 個表:S(S#,SN,SD,SA)S#,SN,SD,SA別代表學號,學員姓名,所屬單位,學員年齡C(C#,CN)C#,CN別代表課程編號,課程名稱SC(S#,C#,G) S#,C#,窗別代表學號,所選的課程編號,學習成績(1)使用標準SQL嵌套語句查詢選修課程名稱為稅收基礎的學員學號和姓名答案: select s# ,sn from s where S#

43、in(select S# from c,sc where #=# and cn= 稅收基礎 )(2)使用標準SQL嵌套語句查詢選修課程編號為C2的學員姓名和所屬單位答: select sn,sd from s,sc where #=# and #= c2(3)使用標準SQL嵌套語句查詢不選修課程編號為C5的學員姓名和所屬單位答: select sn,sd from s where s# not in(select s# from sc where c#= c5 )(4)查詢選修了課程的學員人數(shù)答: select 學員人數(shù)=count(distinct s#) from sc(5) 查詢選修課程

44、超過5 門的學員學號和所屬單位答: select sn,sd from s where s# in(select s# from sc group by s# having count(distinct c#)5)SQL面試題(4)1 .查詢A(ID,Name)表中第31至40條記錄,ID作為主鍵可能是不是連續(xù)增長的列,完整的查詢語句如下:select top 10 * from A where ID (select max(ID) from (select top 30 ID from A order by A ) T) order by A2 .查詢表A中存在ID重復三次以上的記錄,完整的

45、查詢語句如下:select * from(select count(ID) as count from table group by ID)T where 3SQL面試題(5)在面試應聘的SQL Server數(shù)據(jù)庫開發(fā)人員時, 我運用了一套標準的基準技術問題。下面這些問題是我覺得能夠真正有助于淘汰不合格應聘者的問題。它們按照從易到難的順序排列。當你問到關于主鍵和外鍵的問題時,后面的問題都十分有難度,因為答案可能會更難解釋和說明,尤其是在面試的情形下。你能向我簡要敘述一下SQL Server 2000中使用的一些數(shù)據(jù)庫對象嗎你希望聽到的答案包括這樣一些對象:表格、視圖、用戶定義的函數(shù),以及存儲過

46、程;如果他們還能夠提到像觸發(fā)器這樣的對象就更好了。如果應聘者不能回答這個基本的問題,那么這不是一個好兆頭。NULL是什么意思NULL(空)這個值是數(shù)據(jù)庫世界里一個非常難纏的東西,所以有不少應聘者會在這個問題上跌跟頭您也不要覺得意外。NULL這個值表示UNKNOWN(未知):它不表示“(空字符串)。假設您的SQL Server數(shù)據(jù)庫里 有ANSI_NULLS當然在默認情況下會有, 對NULL這個值的任何比較都會生產(chǎn)一個 NULL值。 您不能把任何值與一個UNKNOWN 值進行比較,并在邏輯上希望獲得一個答案。您必須使用IS NULL操作符。什么是索引SQL Server 2000里有什么類型的索

47、引任何有經(jīng)驗的數(shù)據(jù)庫開發(fā)人員都應該能夠很輕易地回答這個問題。一些經(jīng)驗不太多的開發(fā)人員能夠回答這個問題,但是有些地方會說不清楚。簡單地說,索引是一個數(shù)據(jù)結構,用來快速訪問數(shù)據(jù)庫表格或者視圖里的數(shù)據(jù)。在 SQL Server里,它們有兩種形式:聚集索引和非聚集索引。聚集索引在索引的葉級保存數(shù)據(jù)。這意味著不論聚集索引里有表格的哪個(或哪些)字段,這些字段都會按順序被保存在表格。由于存在這種排序,所以每個表格只會有一個聚集索引。非聚集索引在索引的葉級有一個行標識符。這個行標識符是一個指向磁盤上數(shù)據(jù)的指針。它允許每個表格有多個非聚集索引。什么是主鍵什么是外鍵主鍵是表格里的(一個或多個)字段,只用來定義表

48、格里的行;主鍵里的值總是唯一的。外鍵是一個用來建立兩個表格之間關系的約束。這種關系一般都涉及一個表格里的主鍵字段與另外一個表格(盡管可能是同一個表格)里的一系列相連的字段。那么這些相連的字段就是外鍵。什么是觸發(fā)器SQL Server 2000有什么不同類型的觸發(fā)器讓未來的數(shù)據(jù)庫開發(fā)人員知道可用的觸發(fā)器類型以及如何實現(xiàn)它們是非常有益的。觸發(fā)器是一種專用類型的存儲過程,它被捆綁到SQL Server 2000的表格或者視圖上。在 SQLServer 2000里,有INSTEAD-。林口 AFTERS種觸發(fā)器。INSTEAD-OFt器是替代數(shù)據(jù)操控語 言(Data Manipulation Lang

49、uage, DML)語句對表格執(zhí)行語句的存儲過程。例如,如果我有一 個用于TableA的INSTEAD-OF-UPDATE蟲發(fā)器,同時對這個表格執(zhí)行一個更新語句,那么 INSTEAD-OF-UPDAT觸發(fā)器里的代碼會執(zhí)行,而不是我執(zhí)行的更新語句則不會執(zhí)行操作。AFTER觸發(fā)器要在DML語句在數(shù)據(jù)庫里使用之后才執(zhí)行。這些類型的觸發(fā)器對于監(jiān)視發(fā)生 在數(shù)據(jù)庫表格里的數(shù)據(jù)變化十分好用。您如何確一個帶有名為Fld1字段的TableB表格里只具有Fld1字段里的那些值,而這些值同時在名為TableA的表格的Fld1字段里這個與關系相關的問題有兩個可能的答案。第一個答案(而且是您希望聽到的答案)是使用外鍵限

50、制。 外鍵限制用來維護引用的完整性。它被用來確保表格里的字段只保存有已經(jīng)在不同的 (或者相同的)表格里的另一個字段里定義了的值。這個字段就是候選鍵(通常是另外一個表格的主鍵)。另外一種答案是觸發(fā)器。觸發(fā)器可以被用來保證以另外一種方式實現(xiàn)與限制相同的作用,但是它非常難設置與維護,而且性能一般都很糟糕。由于這個原因,微軟建議開發(fā)人員使用外鍵限制而不是觸發(fā)器來維護引用的完整性。對一個投入使用的在線事務處理表格有過多索引需要有什么樣的性能考慮你正在尋找進行與數(shù)據(jù)操控有關的應聘人員。對一個表格的索引越多,數(shù)據(jù)庫引擎用來更新、插入或者刪除數(shù)據(jù)所需要的時間就越多,因為在數(shù)據(jù)操控發(fā)生的時候索引也必須要維護。你可以用什么來確保表格里的字段只接受特定范圍里的值這個問題可以用多種方式來回答,但是只有一個答案是“好”答案。您希望聽到的回答是Check限制,它在數(shù)據(jù)庫表格里被定義,用來限制輸入該列的值。觸發(fā)器也可以被用來限制數(shù)據(jù)庫表格里的字段能夠接受的值,但是這種辦法要求觸發(fā)器在表格里被定義,這可能會在某些情況下影響到性能。因此,微軟建議使用 Check限制而不是其他的方式來限制域的完整性。如果應聘者能夠正確地回答這個問題,那么他的機會就非常大了,因為這表明

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論