




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1.觸發器的作用?答:觸發器是一中特殊的存儲過程,重要是通過事件來觸發而被執行的。它可以強化約束,來維護數據的完整性和一致性,可以跟蹤數據庫內的操作從而不允許未經許可的更新和變化??梢月摷夁\算。如,某表上的觸發器上包含對另一個表的數據操作,而該操作又會導致該表觸發器被觸發。2。什么是存儲過程?用什么來調用?答:存儲過程是一個預編譯的SQL語句,優點是允許模塊化的設計,就是說只需創建一次,以后在該程序中就可以調用多次。假如某次操作需要執行多次SQL,使用存儲過程比單純SQL語句執行要快。可以用一個命令對象來調用存儲過程。3。索引的作用?和它的優點缺陷是什么?答:索引就一種特殊的查詢表,數據庫的搜索引擎可以運用它加速對數據的檢索。它很類似與現實生活中書的目錄,不需要查詢整本書內容就可以找到想要的數據。索引可以是唯一的,創建索引允許指定單個列或者是多個列。缺陷是它減慢了數據錄入的速度,同時也增長了數據庫的尺寸大小。3。什么是內存泄漏?答:一般我們所說的內存泄漏指的是堆內存的泄漏。堆內存是程序從堆中為其分派的,大小任意的,使用完后要顯示釋放內存。當應用程序用關鍵字new等創建對象時,就從堆中為它分派一塊內存,使用完后程序調用free或者delete釋放該內存,否則就說該內存就不能被使用,我們就說該內存被泄漏了。4。維護數據庫的完整性和一致性,你喜歡用觸發器還是自寫業務邏輯?為什么?答:我是這樣做的,盡也許使用約束,如check,主鍵,外鍵,非空字段等來約束,這樣做效率最高,也最方便。另一方面是使用觸發器,這種方法可以保證,無論什么業務系統訪問數據庫都可以保證數據的完整新和一致性。最后考慮的是自寫業務邏輯,但這樣做麻煩,編程復雜,效率低下。5。什么是事務?什么是鎖?答:事務就是被綁定在一起作為一個邏輯工作單元的SQL語句分組,假如任何一個語句操作失敗那么整個操作就被失敗,以后操作就會回滾到操作前狀態,或者是上有個節點。為了保證要么執行,要么不執行,就可以使用事務。要將有組語句作為事務考慮,就需要通過ACID測試,即原子性,一致性,隔離性和持久性。鎖:在所以的DBMS中,鎖是實現事務的關鍵,鎖可以保證事務的完整性和并發性。與現實生活中鎖同樣,它可以使某些數據的擁有者,在某段時間內不能使用某些數據或數據結構。當然鎖還分級別的。6。什么叫視圖?游標是什么?答:視圖是一種虛擬的表,具有和物理表相同的功能。可以對視圖進行增,改,查,操作,試圖通常是有一個表或者多個表的行或列的子集。對視圖的修改不影響基本表。它使得我們獲取數據更容易,相比多表查詢。游標:是對查詢出來的結果集作為一個單元來有效的解決。游標可以定在該單元中的特定行,從結果集的當前行檢索一行或多行??梢詫Y果集當前行做修改。一般不使用游標,但是需要逐條解決數據的時候,游標顯得十分重要。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#,snfromswhereS#in(selectS#fromc,scwherec.c#=sc.c#andcn=’稅收基礎’)(2)使用標準SQL嵌套語句查詢選修課程編號為’C2’的學員姓名和所屬單位?答:selectsn,sdfroms,scwheres.s#=sc.s#andsc.c#=’c2’(3)使用標準SQL嵌套語句查詢不選修課程編號為’C5’的學員姓名和所屬單位?答:selectsn,sdfromswheres#notin(selects#fromscwherec#=’c5’)(4)查詢選修了課程的學員人數答:select學員人數=count(distincts#)fromsc(5)查詢選修課程超過5門的學員學號和所屬單位?答:selectsn,sdfromswheres#in(selects#fromscgroupbys#havingcount(distinctc#)>5)在面試過程中多次碰到兩道SQL查詢的題目,一是查詢A(ID,Name)表中第31至40條記錄,ID作為主鍵也許是不是連續增長的列,完整的查詢語句如下:selecttop10*fromAwhereID>(selectmax(ID)from(selecttop30IDfromAorderbyA)T)orderbyA此外一道題目的規定是查詢表A中存在ID反復三次以上的記錄,完整的查詢語句如下:select*from(selectcount(ID)ascountfromtablegroupbyID)TwhereT.count>3createtabletesttable1(idintIDENTITY,departmentvarchar(12))select*fromtesttable1insertintotesttable1values('設計')insertintotesttable1values('市場')insertintotesttable1values('售后')/*結果iddepartment1設計2市場3售后*/createtabletesttable2(idintIDENTITY,dptIDint,namevarchar(12))insertintotesttable2values(1,'張三')insertintotesttable2values(1,'李四')insertintotesttable2values(2,'王五')insertintotesttable2values(3,'彭六')insertintotesttable2values(4,'陳七')/*用一條SQL語句,怎么顯示如下結果iddptIDdepartmentname11設計張三21設計李四32市場王五43售后彭六54黑人陳七*/答案是:SELECTtesttable2.*,ISNULL(department,'黑人')FROMtesttable1rightjointesttable2ontesttable2.dptID=testtable1.ID在面試應聘的SQLServer數據庫開發人員時,我運用了一套標準的基準技術問題。下面這些問題是我覺得可以真正有助于淘汰不合格應聘者的問題。它們按照從易到難的順序排列。當你問到關于主鍵和外鍵的問題時,后面的問題都十分有難度,由于答案也許會更難解釋和說明,特別是在面試的情形下。你能向我簡要敘述一下SQLServer2023中使用的一些數據庫對象嗎?你希望聽到的答案涉及這樣一些對象:表格、視圖、用戶定義的函數,以及存儲過程;假如他們還可以提到像觸發器這樣的對象就更好了。假如應聘者不能回答這個基本的問題,那么這不是一個好兆頭。NULL是什么意思?NULL(空)這個值是數據庫世界里一個非常難纏的東西,所以有不少應聘者會在這個問題上跌跟頭您也不要覺得意外。NULL這個值表達UNKNOWN(未知):它不表達“”(空字符串)。假設您的SQLServer數據庫里有ANSI_NULLS,當然在默認情況下會有,對NULL這個值的任何比較都會生產一個NULL值。您不能把任何值與一個UNKNOWN值進行比較,并在邏輯上希望獲得一個答案。您必須使用ISNULL操作符。sql5什么是索引?SQLServer2023里有什么類型的索引?任何有經驗的數據庫開發人員都應當可以很容易地回答這個問題。一些經驗不太多的開發人員可以回答這個問題,但是有些地方會說不清楚。簡樸地說,索引是一個數據結構,用來快速訪問數據庫表格或者視圖里的數據。在SQLServer里,它們有兩種形式:聚集索引和非聚集索引。聚集索引在索引的葉級保存數據。這意味著不管聚集索引里有表格的哪個(或哪些)字段,這些字段都會按順序被保存在表格。由于存在這種排序,所以每個表格只會有一個聚集索引。非聚集索引在索引的葉級有一個行標記符。這個行標記符是一個指向磁盤上數據的指針。它允許每個表格有多個非聚集索引。什么是主鍵?什么是外鍵?主鍵是表格里的(一個或多個)字段,只用來定義表格里的行;主鍵里的值總是唯一的。外鍵是一個用來建立兩個表格之間關系的約束。這種關系一般都涉及一個表格里的主鍵字段與此外一個表格(盡管也許是同一個表格)里的一系列相連的字段。那么這些相連的字段就是外鍵。什么是觸發器?SQLServer2023有什么不同類型的觸發器?讓未來的數據庫開發人員知道可用的觸發器類型以及如何實現它們是非常有益的。觸發器是一種專用類型的存儲過程,它被捆綁到SQLServer2023的表格或者視圖上。在SQLServer2023里,有INSTEAD-OF和AFTER兩種觸發器。INSTEAD-OF觸發器是替代數據操控語言(DataManipulationLanguage,DML)語句對表格執行語句的存儲過程。例如,假如我有一個用于TableA的INSTEAD-OF-UPDATE觸發器,同時對這個表格執行一個更新語句,那么INSTEAD-OF-UPDATE觸發器里的代碼會執行,而不是我執行的更新語句則不會執行操作。AFTER觸發器要在DML語句在數據庫里使用之后才執行。這些類型的觸發器對于監視發生在數據庫表格里的數據變化十分您如何確一個帶有名為Fld1字段的TableB表格里只具有Fld1字段里的那些值,而這些值同時在名為TableA的表格的Fld1字段里?這個與關系相關的問題有兩個也許的答案。第一個答案(并且是您希望聽到的答案)是使用外鍵限制。外鍵限制用來維護引用的完整性。它被用來保證表格里的字段只保存有已經在不同的(或者相同的)表格里的另一個字段里定義了的值。這個字段就是候選鍵(通常是此外一個表格的主鍵)。此外一種答案是觸發器。觸發器可以被用來保證以此外一種方式實現與限制相同的作用,但是它非常難設立與維護,并且性能一般都很糟糕。由于這個因素,微軟建議開發人員使用外鍵限制而不是觸發器來維護引用的完整性。對一個投入使用的在線事務解決表格有過多索引需要有什么樣的性能考慮?你正在尋找進行與數據操控有關的應聘人員。對一個表格的索引越多,數據庫引擎用來更新、插入或者刪除數據所需要的時間就越多,由于在數據操控發生的時候索引也必須要維護。你可以用什么來保證表格里的字段只接受特定范圍里的值?這個問題可以用多種方式來回答,但是只有一個答案是“好”答案。您希望聽到的回答是Check限制,它在數據庫表格里被定義,用來限制輸入該列的值。觸發器也可以被用來限制數據庫表格里的字段可以接受的值,但是這種辦法規定觸發器在表格里被定義,這也許會在某些情況下影響到性能。因此,微軟建議使用Check限制而不是其他的方式來限制域的完整性。假如應聘者可以對的地回答這個問題,那么他的機會就非常大了,由于這表白他們具有使用存儲過程的經驗。返回參數總是由存儲過程返回,它用來表達存儲過程是成功還是失敗。返回參數總是INT數據類型。OUTPUT參數明確規定由開發人員來指定,它可以返回其他類型的數據,例如字符型和數值型的值。(可以用作輸出參數的數據類型是有一些限制的。)您可以在一個存儲過程里使用多個OUTPUT參數,而您只可以使用一個返回參數。什么是相關子查詢?如何使用這些查詢?經驗更加豐富的開發人員將可以準確地描述這種類型的查詢。相關子查詢是一種包含子查詢的特殊類型的查詢。查詢里包含的子查詢會真正請求外部查詢的值,從而形成一個類似于循環的狀況。為管理崗位業務培訓信息,建立3個表:S(S#,SN,SD,SA)S#,SN,SD,SA分別代表學號、學員姓名、所屬單位、學員年齡C(C#,CN)C#,CN分別代表課程編號、課程名稱SC(S#,C#,G)S#,C#,G分別代表學號、所選修的課程編號、學習成績1.使用標準SQL嵌套語句查詢選修課程名稱為’稅收基礎’的學員學號和姓名--實現代碼:SELECTSN,SDFROMSWHERE[S#]IN(SELECT[S#]FROMC,SCWHEREC.[C#]=SC.[C#]ANDCN=N'稅收基礎')2.使用標準SQL嵌套語句查詢選修課程編號為’C2’的學員姓名和所屬單位--實現代碼:SELECTS.SN,S.SDFROMS,SCWHERES.[S#]=SC.[S#]ANDSC.[C#]='C2'3.使用標準SQL嵌套語句查詢不選修課程編號為’C5’的學員姓名和所屬單位--實現代碼:SELECTSN,SDFROMSWHERE[S#]NOTIN(SELECT[S#]FROMSCWHERE[C#]='C5')4.使用標準SQL嵌套語句查詢選修所有課程的學員姓名和所屬單位--實現代碼:SELECTSN,SDFROMSWHERE[S#]IN(SELECT[S#]FROMSCRIGHTJOINCONSC.[C#]=C.[C#]GROUPBY[S#]HAVINGCOUNT(*)=COUNT([S#]))5.查詢選修了課程的學員人數--實現代碼:SELECT學員人數=COUNT(DISTINCT[S#])FROMSC6.查詢選修課程超過5門的學員學號和所屬單位--實現代碼:SELECTSN,SDFROMSWHERE[S#]IN(SELECT[S#]FROMSCGROUPBY[S#]HAVINGCOUNT(DISTINCT[C#])>5)5.查詢選修了課程的學員人數--實現代碼:SELECT學員人數=COUNT(DISTINCT[S#])FROMSC6.查詢選修課程超過5門的學員學號和所屬單位--實現代碼:SELECTSN,SDFROMSWHERE[S#]IN(SELECT[S#]FROMSCGROUPBY[S#]HAVINGCOUNT(DISTINCT[C#])>5)題目2問題描述:已知關系模式:S(SNO,SNAME)學生關系。SNO為學號,SNAME為姓名C(CNO,CNAME,CTEACHER)課程關系。CNO為課程號,CNAME為課程名,CTEACHER為任課教師SC(SNO,CNO,SCGRADE)選課關系。SCGRADE為成績1.找出沒有選修過“李明”老師講授課程的所有學生姓名--實現代碼:SELECTSNAMEFROMSWHERENOTEXISTS(SELECT*FROMSC,CWHERESC.CNO=C.CNOANDCNAME='李明'ANDSC.SNO=S.SNO)2.列出有二門以上(含兩門)不及格課程的學生姓名及其平均成績--實現代碼:SELECTS.SNO,S.SNAME,AVG_SCGRADE=AVG(SC.SCGRADE)FROMS,SC,(SELECTSNOFROMSCWHERESCGRADE<60GROUPBYSNOHAVINGCOUNT(DISTINCTCNO)>=2)AWHERES.SNO=A.SNOANDSC.SNO=A.SNOGROUPBYS.SNO,S.SNAME3.列出既學過“1”號課程,又學過“2”號課程的所有學生姓名--實現代碼:SELECTS.SNO,S.SNAMEFROMS,(SELECTSC.SNOFROMSC,CWHERESC.CNO=C.CNOANDC.CNAMEIN('1','2')GROUPBYSNOHAVINGCOUNT(DISTINCTCNO)=2)SCWHERES.SNO=SC.SNO4.列出“1”號課成績比“2”號同學該門課成績高的所有學生的學號--實現代碼:SELECTS.SNO,S.SNAMEFROMS,(SELECTSC1.SNOFROMSCSC1,CC1,SCSC2,CC2WHERESC1.CNO=C1.CNOANDC1.NAME='1'ANDSC2.CNO=C2.CNOANDC2.NAME='2'ANDSC1.SCGRADE>SC2.SCGRADE)SCWHERES.SNO=SC.SNO5.列出“1”號課成績比“2”號課成績高的所有學生的學號及其“1”號課和“2”號課的成績--實現代碼:SELECTS.SNO,S.SNAME,SC.[1號課成績],SC.[2號課成績]FROMS,(SELECTSC1.SNO,[1號課成績]=SC1.SCGRADE,[2號課成績]=SC2.SCGRADEFROMSCSC1,CC1,SCSC2,CC2WHERESC1.CNO=C1.CNOANDC1.NAME='1'ANDSC2.CNO=C2.CNOANDC2.NAME='2'ANDSC1.SCGRADE>SC2.SCGRADE)SCWHERES.SNO=SC.SNOcreatetabledept(deptnovarchar(10)primarykey,dnamevarchar(10));createtableemp(empnovarchar(10)primarykey,enamevarchar(10),jobvarchar(10),mgrvarchar(10),salvarchar(10),deptnovarchar(10)referencesdept(deptno));droptabledept;droptableemp;insertintodeptvalues('1','事業部');insertintodeptvalues('2','銷售部');insertintodeptvalues('3','技術部');insertintoempvalues('01','jacky','clerk','tom','1000','1');insertintoempvalues('02','tom','clerk','','2023','1');insertintoempvalues('07','biddy','clerk','','2023','1');insertintoempvalues('03','jenny','sales','pretty','600','2');insertintoempvalues('04','pretty','sales','','800','2');insertintoempvalues('05','buddy','jishu','canndy','1000','3');insertintoempvalues('06','canndy','jishu','','1500','3');select*fromdept;select*fromemp;--1列出emp表中各部門的部門號,最高工資,最低工資selectdeptnoas部門號,max(sal)as最高工資,min(sal)as最低工資fromempgroupbydeptno;--2列出emp表中各部門job為'CLERK'的員工的最低工資,最高工資selectmax(sal)as最高工資,min(sal)as最低工資,deptnoas部門號fromempwherejob='clerk'groupbydeptno;--3對于emp中最低工資小于2023的部門,列出job為'CLERK'的員工的部門號,最低工資,最高工資selectb.deptnoas部門號,max(sal)as最高工資,min(sal)as最低工資fromempasbwherejob='clerk'and(selectmin(sal)fromempasawherea.deptno=b.deptno)<2023groupbyb.deptno;--4根據部門號由高而低,工資有低而高列出每個員工的姓名,部門號,工資selectenameas姓名,deptnoas部門號,salas工資fromemporderbydeptnodesc,salasc;--5列出'buddy'所在部門中每個員工的姓名與部門號selectb.enameas姓名,b.deptnoas部門號fromempasbwhereb.deptno=(selecta.deptnofromempasawherea.ename='buddy');--6列出每個員工的姓名,工作,部門號,部門名selectenameas姓名,jobas工作,dept.deptnoas部門號,dept.dnameas部門名fromemp,deptwhereemp.deptno=dept.deptno;--7列出emp中工作為'CLERK'的員工的姓名,工作,部門號,部門名selectenameas姓名,jobas工作,dept.deptnoas部門號,dept.dnameas部門名fromemp,deptwhereemp.deptno=dept.deptnoandjob='clerk';--8對于emp中有管理者的員工,列出姓名,管理者姓名(管理者外鍵為mgr)selecta.deptnoas部門號,a.enameas員工,b.enameas管理者fromempasa,empasbwherea.mgrisnotnullanda.mgr=b.ename;--9對于dept表中,列出所有部門名,部門號,同時列出各部門工作為'CLERK'的員工
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2019-2025年試驗檢測師之道路工程通關提分題庫及完整答案
- 2017年廣東省中考數學試卷(含解析版)
- 2025《工程承包合同》
- 財務數據保密管理計劃
- 適應市場變化的管理策略計劃
- 2025建筑工程承包合同安全生產附件
- 個人入股建筑公司合同樣本
- 人工帶料合同范例
- 2025出口退稅賬戶托管借款合同范本
- 確立班級學習核心價值觀的計劃
- 縱隔腫瘤護理查房
- 眼鏡店銷售培訓課件
- 中小學學校落實中央八項規定自查報告
- 宜賓市屬國有企業人力資源中心宜賓臨港投資建設集團有限公司下屬子公司2025年第一批項目制員工公開招聘筆試參考題庫附帶答案詳解
- 2025年山東魯泰控股集團有限公司下屬駐陜西煤礦企業招聘(150人)筆試參考題庫附帶答案詳解
- 2025屆上海市浦東新區高三二模英語試卷(含答案)
- 2024-2025學年高一政治統編版下學期期中考試測試卷B卷(含解析)
- 內蒙古自治區呼和浩特市2025屆高三第一次模擬考試物理答案
- 倉庫管理獎懲制度
- 中級銀行管理-2025中級銀行從業資格考試《銀行管理》點睛提分卷1
- 開曼群島公司法2024版中文譯本(含2024年修訂主要內容)
評論
0/150
提交評論