




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、第十章,T-SQL編程,目標(biāo),掌握如何定義變量并賦值 掌握如何輸出顯示數(shù)據(jù) 掌握IF、WHILE、CASE邏輯控制語句 理解SQL中批處理的概念,使用變量,變量分為: 局部變量: 局部變量必須以標(biāo)記作為前綴 ,如age 局部變量的使用也是先聲明,再賦值 全局變量: 全局變量必須以標(biāo)記 作為前綴,如version 全局變量由系統(tǒng)定義和維護(hù),我們只能讀取,不能修改全局變量的值,局部變量,例如: DECLARE name varchar(8) DECLARE seat int,聲明局部變量 DECLARE 變量名 數(shù)據(jù)類型,賦值 SET 變量名 =值 SELECT 變量名 = 值,例如: SET n
2、ame=張三 SELECT name=stuName FROM stuInfo WHERE stuNo=s25302,必須確保篩選出的記錄只有1條,或,局部變量示例,問題: 編寫T-SQL查找李文才的左右同桌 ?,學(xué)員信息表,分析: 第一步,找出“李文才“的座位號; 第二步,李文才的座位號加1或減1,局部變量示例,/*-查找李文才的信息-*/ DECLARE name varchar(8) -學(xué)員姓名 SET name=李文才 -使用SET賦值 SELECT * FROM stuInfo WHERE stuName = name /*-查找李文才的左右同桌-*/ DECLARE seat in
3、t -座位號 SELECT seat=stuSeat FROM stuInfo -使用SELECT賦值 WHERE stuName=name SELECT * FROM stuInfo WHERE (stuSeat = seat+1) OR (stuSeat = seat-1) GO,演示:使用局部變量,參考語句,全局變量,全局變量都使用兩個標(biāo)志作為前綴,全局變量示例,print SQL Server的版本+VERSION print 服務(wù)器的名稱: +SERVERNAME INSERT INTO stuInfo(stuName,stuNo,stuSex,stuAge) VALUES(武松,s
4、25328,男,23) -如果大于0表示上一條語句執(zhí)行有錯誤 print 當(dāng)前錯誤號+convert(varchar(5),ERROR) print 剛才報名的學(xué)員,座位號為: +convert(varchar(5),IDENTITY ) UPDATE stuinfo SET stuAge=85 WHERE stuName=李文才 print 當(dāng)前錯誤號+convert(varchar(5),ERROR) GO,演示:使用全局變量,參考語句,SQL Server的版本,服務(wù)器名稱,座位號(自動編號),錯誤號,錯誤號,邏輯控制語句,T-SQL語言提供了一些可用于改變語句執(zhí)行順序的命令,稱為流程控
5、制語句. 流程控制語句與常見的程序設(shè)計語言類似,主要包括以下幾種:,beginend ifelse case while . continue.break goto,邏輯控制語句,IFELSE語句,SQL中的IF-ELSE語句 IF (條件) BEGIN 語句1 語句2 END ELSE BEGIN 語句1; 語句2; END,ELSE是可選部分 如果有多條語句,才需要BEGIN-END語句塊,IF-ELSE示例,問題: 統(tǒng)計并顯示本班筆試平均分,如果平均分在70以上,顯示“成績優(yōu)秀“,并顯示前三名學(xué)員的考試信息;如果在70以下,顯示“本班成績較差“,并顯示后三名學(xué)員的考試信息 。,學(xué)員成績表
6、,分析: 第一步,統(tǒng)計平均成績存入臨時變量; 第二步,用IFELSE判斷;,IF-ELSE示例,設(shè)置輸出結(jié)果的格式,為了文本消息和輸出結(jié)果顯示在同一窗口,需要設(shè)置輸出結(jié)果的格式,邏輯控制語句,WHILE循環(huán)語句,SQL中的WHILE語句 WHILE (條件) BEGIN 語句1 語句2 BREAK END,BREAK表示退出循環(huán) 如果有多條語句,才需要BEGIN-END語句塊,WHILE示例,問題:本次考試成績較差,假定要提分,確保每人筆試都通過。提分規(guī)則很簡單,先每人都加2分,看是否都通過,如果沒有全部通過,每人再加2分,再看是否都通過,如此反復(fù)提分,直到所有人都通過為止 。,學(xué)員成績表,分
7、析:第一步,統(tǒng)計沒通過的人數(shù) ;第二步,如果有人沒通過,加分;第三步,循環(huán)判斷。,DECLARE n int WHILE(1=1) -條件永遠(yuǎn)成立 BEGIN SELECT n=COUNT(*) FROM stuMarks WHERE writtenExam0) UPDATE stuMarks -每人加2分 SET writtenExam=writtenExam+2 ELSE BREAK -退出循環(huán) END print 加分后的成績?nèi)缦拢?SELECT * FROM stuMarks,WHILE示例,參考語句,邏輯控制語句,CASEEND多分支語句,CASE WHEN 條件1 THEN 結(jié)果1
8、 WHEN 條件2 THEN 結(jié)果2 ELSE 其他結(jié)果 END,CASE-END示例,問題: 采用美國的ABCDE五級打分制來顯示筆試成績。 A級: 90分以上 B級: 8089分 C級: 7079分 D級: 6069分 E級: 60分以下,學(xué)員成績表,print ABCDE五級顯示成績?nèi)缦拢?SELECT stuNo, 成績= CASE WHEN writtenExam60 THEN E WHEN writtenExam BETWEEN 60 AND 69 THEN D WHEN writtenExam BETWEEN 70 AND 79 THEN C WHEN writtenExam B
9、ETWEEN 80 AND 89 THEN B ElSE A END FROM stuMarks,CASEEND示例,參考語句,CASE-END課堂練習(xí),課堂練習(xí):請根據(jù)平均分和下面的評分規(guī)則,編寫T-SQL語句查詢學(xué)員的成 績,如上圖所示。 優(yōu) :90分以上 良 :8089分 中 :7079分 差 :6069分 不及格 :60分以下,學(xué)員成績分析,CASE-END練習(xí)答案,USE stuDB GO SELECT 考號=ExamNo,學(xué)號=stuNo,筆試=writtenExam,機(jī)試=labExam, 平均分=(writtenExam+labExam)/2, 等級=CASE WHEN (wr
10、ittenExam+labExam)/260 THEN 不及格 WHEN (writtenExam+labExam)/2 BETWEEN 60 AND 69 THEN 差 WHEN (writtenExam+labExam)/2 BETWEEN 70 AND 79 THEN 中 WHEN (writtenExam+labExam)/2 BETWEEN 80 AND 89 THEN 良 ElSE 優(yōu) END FROM stuMarks,批處理語句,批處理是包含一個或多個 SQL 語句的組,從應(yīng)用程序一次性地發(fā)送到SQL Server執(zhí)行 SQL Server 將批處理語句編譯成一個可執(zhí)行單元,此
11、單元稱為執(zhí)行計劃。執(zhí)行計劃中的語句每次執(zhí)行一條,客戶端應(yīng)用程序,SQL Server服務(wù)器,批處理語句: 語句1 語句2 GO,批處理語句示例,SELECT * FROM stuInfo SELECT * FROM stuMarks UPDATE stuMarks SET writtenExam=writtenExam+2 GO,GO是批處理的標(biāo)志,表示SQL Server將這些T-SQL語句編譯為一個執(zhí)行單元,提高執(zhí)行效率 一般是將一些邏輯相關(guān)的業(yè)務(wù)操作語句,放置在同一批中,這完全由業(yè)務(wù)需求和代碼編寫者決定,批處理語句示例,-例如建表語句的末尾必須添加GO CREATE TABLE stuI
12、nfo ( . ) GO,SQLServer規(guī)定:如果是建庫、建表語句、以及我們后面學(xué)習(xí)的存儲過程和視圖等,則必須在語句末尾添加 GO 批處理標(biāo)志,課堂綜合練習(xí),課堂練習(xí): 則根據(jù)如下規(guī)則對機(jī)試成績進(jìn)行反復(fù)加分,直到平均分超過85分為止。請編寫T-SQL語句實(shí)現(xiàn)。 90分以上: 不加分 8089分: 加1分 7079分: 加2分 6069分: 加3分 60分以下: 加5分,加分前,加分后,課堂綜合練習(xí)答案,SELECT * FROM stuMarks -原始成績 DECLARE labAvg INT WHILE(1=1) BEGIN UPDATE stuMarks SET labExam= C
13、ASE WHEN labExam=85 BREAK END SELECT * FROM stuMarks -加分后的成績,聲明變量,用戶臨時存放平均分,循環(huán)加分,根據(jù)機(jī)試成績酌情加分,整個是一個UPDATE語句,獲取目前的平均分,判斷是否還繼續(xù)加分,T-SQL語句的綜合應(yīng)用,學(xué)員信息表和成績表,應(yīng)到人數(shù):5人,實(shí)到人數(shù)4人,缺考1人,T-SQL語句的綜合應(yīng)用,如何實(shí)現(xiàn)?,本次考試的缺考情況,比較筆試平均分和機(jī)試平均分,較低者進(jìn)行循環(huán)提分,但提分后最高分不能超過97分 。加分后重新統(tǒng)計通過情況,統(tǒng)計通過率,T-SQL語句的綜合應(yīng)用,1.提示: 使用子查詢統(tǒng)計缺考情況: 應(yīng)到人數(shù):SELECT c
14、ount(*) FROM stuInfo 實(shí)到人數(shù):SELECT count(*) FROM stuMarks,2.提取學(xué)員的成績信息并保存結(jié)果,包括學(xué)員姓名、學(xué)號、筆試成績、機(jī)試成績、是否通過 1)提取的成績信息包含兩表的數(shù)據(jù),所以考慮兩表連接,使用左連接( LEFT JOIN ); SELECT stuNameFROM stuInfo LEFT JOIN stuMarks 2)要求新加一列“是否通過(isPass)”,可采用CASE END。為了便于后續(xù)的通過率統(tǒng)計,通過則為1,沒通過為0 SELECT isPass=CASE WHEN writtenExam=60 THEN 1 ELSE
15、 0 END 3)要求保存提?。ú樵儯┑慕Y(jié)果,可以使用我們曾學(xué)習(xí)過的SELECT INTO newTable語句,生成新表并保存數(shù)據(jù),T-SQL語句的綜合應(yīng)用,3.比較筆試平均分和機(jī)試平均分,對較低者進(jìn)行循環(huán)提分,但提分后最高分不能超過97分: 1) 使用IF語句判斷筆試還是機(jī)試偏低,決定對筆試還是機(jī)試提分; 2) 使用WHILE循環(huán)給每個學(xué)員加分,缺考的除外,當(dāng)最高分超過97分時退出循環(huán); 3)因?yàn)榻o每位學(xué)員的筆試或機(jī)試提分了,有的學(xué)員可能提分后剛好通過了,所以需要更新isPass(是否通過)列。 UPDATE newTable SET isPass=CASE WHEN writtenExa
16、m=60 and labExam=60 THEN 1 ELSE 0 END,T-SQL語句的綜合應(yīng)用,4.提分后,統(tǒng)計學(xué)員的成績和通過情況: 1)使用別名實(shí)現(xiàn)中文字段名,即SELECT 姓名=stuName,學(xué)號=stuNo 2)如果某個學(xué)員的成績?yōu)镹ULL(空),則替換為”缺考”,否則原樣顯示; 3)isPass列中的1替換為是,0替換為否; SELECT ,機(jī)試成績=CASE WHEN labExam IS NULL THEN 缺考 ELSE convert(varchar(5),labExam) END ,是否通過=CASE WHEN isPass=1 THEN 是 ELSE 否 END
17、,T-SQL語句的綜合應(yīng)用,5.提分后統(tǒng)計學(xué)員的通過率情況: 1)通過人數(shù):因?yàn)橥ㄟ^用1表示,沒通過用0表示,所以isPass列的累加和即是通過人數(shù); 2)通過率:同理,isPass列的平均值*100即是通過率;,T-SQL參考語句,/*-本次考試的原始數(shù)據(jù)-*/ -SELECT * FROM stuInfo -SELECT * FROM stuMarks /*-統(tǒng)計考試缺考情況-*/ SELECT 應(yīng)到人數(shù)=(SELECT count(*) FROM stuInfo) , -應(yīng)到人數(shù)為子查詢表達(dá)式的別名 實(shí)到人數(shù)=(SELECT count(*) FROM stuMarks) , 缺考人數(shù)=
18、(SELECT count(*) FROM stuInfo)-(SELECT count(*) FROM stuMarks),T-SQL參考語句,/*-統(tǒng)計考試通過情況,并將結(jié)果存放在新表newTable中-*/ IF EXISTS(SELECT * FROM sysobjects WHERE name=newTable) DROP TABLE newTable SELECT stuName,stuInfo.stuNo,writtenExam ,labExam , isPass=CASE WHEN writtenExam=60 and labExam=60 THEN 1 ELSE 0 END
19、INTO newTable FROM stuInfo LEFT JOIN stuMarks ON stuInfo.stuNo=stuMarks.stuNo -SELECT * FROM newTable -查看統(tǒng)計結(jié)果,可用于調(diào)試,T-SQL參考語句,/*-酌情加分:比較筆試和機(jī)試平均分,決定加哪門-*/ DECLARE avgWritten numeric(4,1) DECLARE avgLab numeric(4,1) SELECT avgWritten=AVG(writtenExam) FROM newTable WHERE writtenExam IS NOT NULL SELECT avgLab=AVG(labExam)FROM newTable WHERE labExam IS NOT NULL IF avgWritten=97 BREAK END ELSE 略 -循環(huán)給筆試加分,最高分不能超過97分,T-SQL參考語句,-因?yàn)樘岱?,所以需要?/p>
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 剪紙課題立項(xiàng)申報書
- 事故車交易合同范本
- 上海嘉善房屋出租合同范本
- 高中課題申報書
- 課題申報書亮點(diǎn)
- 臨時用工勞務(wù)合同范本 三
- 勞務(wù)拆遷采購合同范本
- 合同范本 材料價差調(diào)整
- 勞務(wù)公司包工合同范本
- 與中介簽買房合同范本
- 血透患者敘事護(hù)理故事
- 醫(yī)療安全(不良)事件報告制度培訓(xùn)課件
- 中華醫(yī)學(xué)會肺癌臨床診療指南
- 廣告經(jīng)營與管理教學(xué)大綱
- DB34-T 4859-2024 農(nóng)村河道清淤規(guī)范
- 醫(yī)院消防安全培訓(xùn)課件(完美版)
- 《大學(xué)生創(chuàng)新創(chuàng)業(yè)教程》高職大學(xué)生創(chuàng)新創(chuàng)業(yè)課程全套教學(xué)課件
- 2024-2030年中國換電柜行業(yè)發(fā)展環(huán)境與競爭格局分析研究報告
- 中醫(yī)肝與膽課件
- 部編版(統(tǒng)編版)五年級語文下冊語文書電子版(可下載打印)
- 2024年中北大學(xué)招考聘用博士研究生(高頻重點(diǎn)復(fù)習(xí)提升訓(xùn)練)共500題附帶答案詳解
評論
0/150
提交評論