資源描述:
《sql server 查詢)09》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、目標(biāo)掌握簡單子查詢的用法掌握IN子查詢的用法掌握EXISTS子查詢的用法應(yīng)用T-SQL進(jìn)行綜合查詢1什么是子查詢3-1學(xué)員信息表問題:編寫T-SQL語句,查看年齡比“李斯文”大的學(xué)員,要求顯示這些學(xué)員的信息?分析:第一步:求出“李斯文”的年齡;第二步:利用WHERE語句,篩選年齡比“李斯文”大的學(xué)員;2什么是子查詢3-2實(shí)現(xiàn)方法一:采用T-SQL變量實(shí)現(xiàn)DECLARE@ageINT--定義變量,存放李斯文的年齡SELECT@age=stuAgeFROMstuInfoWHEREstuName=‘李斯文’--求出李斯文的年齡-
2、-篩選比李斯文年齡大的學(xué)員SELECT*FROMstuInfoWHEREstuAge>@ageGO3什么是子查詢3-3實(shí)現(xiàn)方法二:采用子查詢實(shí)現(xiàn)SELECT*FROMstuInfoWHEREstuAge>(SELECTstuAgeFROMstuInfowherestuName='李斯文')GO子查詢子查詢在WHERE語句中的一般用法:SELECT…FROM表1WHERE字段1>(子查詢)外面的查詢稱為父查詢,括號中嵌入的查詢稱為子查詢UPDATE、INSERT、DELETE一起使用,語法類似于SELECT語句將子查詢和比較
3、運(yùn)算符聯(lián)合使用,必須保證子查詢返回的值不能多于一個(gè)4使用子查詢替換表連接3-1問題:查詢筆試剛好通過(60分)的學(xué)員。學(xué)員信息表和成績表5使用子查詢替換表連接3-2實(shí)現(xiàn)方法一:采用表連接SELECTstuNameFROMstuInfoINNERJOINstuMarksONstuInfo.stuNo=stuMarks.stuNoWHEREwrittenExam=60GO內(nèi)連接(等值連接)6使用子查詢替換表連接3-3實(shí)現(xiàn)方法二:采用子查詢SELECTstuNameFROMstuInfoWHEREstuNo=(SELECTstu
4、NoFROMstuMarksWHEREwrittenExam=60)GO子查詢一般來說,表連接都可以用子查詢替換,但有的子查詢卻不能用表連接替換子查詢比較靈活、方便,常作為增刪改查的篩選條件,適合于操縱一個(gè)表的數(shù)據(jù)表連接更適合于查看多表的數(shù)據(jù)7IN子查詢4-1問題:查詢筆試剛好通過的學(xué)員名單。如何解決?8IN子查詢4-2解決方法:采用IN子查詢SELECTstuNameFROMstuInfoWHEREstuNoIN(SELECTstuNoFROMstuMarksWHEREwrittenExam=60)GO將=號改為ININ
5、后面的子查詢可以返回多條記錄常用IN替換等于(=)的比較子查詢9IN子查詢4-3問題:查詢參加考試的學(xué)員名單學(xué)員信息表和成績表(重抓本圖)分析:判斷一個(gè)學(xué)員是否參加考試其實(shí)很簡單,只需要查看該學(xué)員對應(yīng)的學(xué)號是否在考試成績表stuMarks中出現(xiàn)即可10IN子查詢4-4/*--采用IN子查詢參加考試的學(xué)員名單--*/SELECTstuNameFROMstuInfoWHEREstuNoIN(SELECTstuNoFROMstuMarks)GO演示:使用IN子查詢參考語句11NOTIN子查詢問題:查詢未參加考試的學(xué)員名單分析:加
6、上否定的NOT即可12EXISTS子查詢4-1例如:數(shù)據(jù)庫的存在檢測IFEXISTS(SELECT*FROMsysDatabasesWHEREname=’stuDB’)DROPDATABASEstuDBCREATEDATABASEstuDB…….—建庫代碼略13EXISTS子查詢4-2IFEXISTS(子查詢)語句EXISTS子查詢的語法:如果子查詢的結(jié)果非空,即記錄條數(shù)1條以上,則EXISTS(子查詢)將返回真(true),否則返回假(false)EXISTS也可以作為WHERE語句的子查詢,但一般都能用IN子查詢替換1
7、4EXISTS子查詢4-3問題:檢查本次考試,本班如果有人筆試成績達(dá)到80分以上,則每人提2分;否則,每人允許提5分分析:是否有人筆試成績達(dá)到80分以上,可以采用EXISTS檢測15EXISTS子查詢4-4/*--采用EXISTS子查詢,進(jìn)行酌情加分--*/IFEXISTS(SELECT*FROMstuMarksWHEREwrittenExam>80)BEGINprint'本班有人筆試成績高于80分,每人加2分,加分后的成績?yōu)椋?UPDATEstuMarksSETwrittenExam=writtenExam+2SELEC
8、T*FROMstumarksENDELSEBEGINprint'本班無人筆試成績高于80分,每人可以加5分,加分后的成績:'UPDATEstuMarksSETwrittenExam=writtenExam+5SELECT*FROMstumarksENDGO演示:使用EXISTS子查詢參考語句16NOTE