![數(shù)據(jù)庫設(shè)計(jì)之二SQL語句_第1頁](http://file4.renrendoc.com/view10/M01/3B/16/wKhkGWWgkO6ARF9GAABEs8azZVU895.jpg)
![數(shù)據(jù)庫設(shè)計(jì)之二SQL語句_第2頁](http://file4.renrendoc.com/view10/M01/3B/16/wKhkGWWgkO6ARF9GAABEs8azZVU8952.jpg)
![數(shù)據(jù)庫設(shè)計(jì)之二SQL語句_第3頁](http://file4.renrendoc.com/view10/M01/3B/16/wKhkGWWgkO6ARF9GAABEs8azZVU8953.jpg)
![數(shù)據(jù)庫設(shè)計(jì)之二SQL語句_第4頁](http://file4.renrendoc.com/view10/M01/3B/16/wKhkGWWgkO6ARF9GAABEs8azZVU8954.jpg)
![數(shù)據(jù)庫設(shè)計(jì)之二SQL語句_第5頁](http://file4.renrendoc.com/view10/M01/3B/16/wKhkGWWgkO6ARF9GAABEs8azZVU8955.jpg)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
SQLServer數(shù)據(jù)管理回顧建立數(shù)據(jù)庫表之間的主外鍵關(guān)系是為了維護(hù)數(shù)據(jù)庫的哪種完整性?年齡信息、性別信息分別采用哪種數(shù)據(jù)類型存儲(chǔ)?限制年齡在18-40歲之間的檢查約束表達(dá)式如何寫?完整地設(shè)置數(shù)據(jù)庫表的一個(gè)字段需要哪幾個(gè)步驟?本章任務(wù)使用SQL語句向?qū)W員數(shù)據(jù)庫中增加、修改和刪除數(shù)據(jù)本章目標(biāo)
理解T-SQL及其作用使用SQLServer中的邏輯表達(dá)式和運(yùn)算符使用T-SQL向表中插入數(shù)據(jù)使用T-SQL更新表中數(shù)據(jù)使用T-SQL刪除表中數(shù)據(jù)SQLWHAT(SQL是什么?)——StructuredQueryLanguage:結(jié)構(gòu)化查詢語言WHY(為何要使用SQL?)——難道僅僅使用SQLServerManagementStudio操作數(shù)據(jù)庫?——應(yīng)用程序如何與數(shù)據(jù)庫打交道?WHEN(何時(shí)使用?)——對(duì)SQLServer執(zhí)行所有的操作都可以——程序中的增刪改查HOW(怎么使用?)——…SQL和T-SQLT-SQL=Transact-SQLT-SQL是SQL的加強(qiáng)版對(duì)功能進(jìn)行了擴(kuò)充:如變量說明、流程控制、功能函數(shù)T-SQL的組成DML(數(shù)據(jù)操作語言)——查詢、插入、刪除和修改數(shù)據(jù)庫中的數(shù)據(jù);——SELECT、INSERT、UPDATE、DELETE等;DCL(數(shù)據(jù)控制語言)——用來控制存取許可、存取權(quán)限等;——GRANT、REVOKE等;DDL(數(shù)據(jù)定義語言)——用來建立數(shù)據(jù)庫、數(shù)據(jù)庫對(duì)象和定義其列——CREATETABLE、DROPTABLE等變量說明、流程控制、功能函數(shù)——定義變量、判斷、分支、循環(huán)結(jié)構(gòu)等——日期函數(shù)、數(shù)學(xué)函數(shù)、字符函數(shù)、系統(tǒng)函數(shù)等T-SQL中的運(yùn)算符運(yùn)算符含義=等于>大于<小于>=大于或等于<=小于或等于<>不等于!非(Java語言中為not)大多與Java語言中的一樣,很難寫錯(cuò)通配符通配符解釋示例‘_’一個(gè)字符ALike'C_'%任意長度的字符串BLike'CO_%'[]括號(hào)中所指定范圍內(nèi)的一個(gè)字符CLike'9W0[1-2]'[^]不在括號(hào)中所指定范圍內(nèi)的一個(gè)字符DLike‘%[A-D][^1-2]'通配符使用說明通常與LIKE關(guān)鍵字一起來使用可以用在檢查約束中使用LIKE在后面的查詢語句中還會(huì)經(jīng)常使用到身份證號(hào)碼的約束表達(dá)式怎么寫?邏輯表達(dá)式邏輯表達(dá)式說明示例AND邏輯與1AND1=;1AND0=0;0AND0=0;OR邏輯或1OR1=1;1OR0=1;0OR0=0;NOT邏輯非NOT1=0;NOT0=1;NOT(付款方式=‘信用卡’)OR(信用卡<>‘陽光卡’)這個(gè)表達(dá)式的含義是什么?全局變量SQLServer中的全局變量都用兩個(gè)@標(biāo)記作為前綴??梢允褂煤?jiǎn)單的SELECT查詢語句檢索任意全局變量的值。SELECT@@VERSIONASSQL_SERVER_VERSION_DETAILS全局變量列表1-2變量 含義@@IDENTITY 最后一次插入的標(biāo)識(shí)值@@CPU_BUSY 自SQLServer啟動(dòng)至今,系統(tǒng)持續(xù)運(yùn)行的毫秒數(shù)。@@CURSOR_ROWS 最近打開的游標(biāo)中的行數(shù)@@DATEFIRST SETDATEFIRST參數(shù)的當(dāng)前值,該參數(shù)用于設(shè)置一個(gè)星期的第一天為哪一天。@@ERROR 最后一個(gè)T-SQL錯(cuò)誤的錯(cuò)誤號(hào)@@FETCH_STATUS如果最后一次提取的狀態(tài)為成功狀態(tài),則為0。如果出錯(cuò),則為-1全局變量列表2-2變量含義@@IDENTITY 最后一次插入的標(biāo)識(shí)值@@LANGUAGE 當(dāng)前使用的語言的名稱@@MAX_CONNECTIONS可以創(chuàng)建的同時(shí)連接的最大數(shù)@@ROWCOUNT 受上一個(gè)SQL
語句影響的行數(shù)@@SERVERNAME 本地服務(wù)器的名稱@@SERVICENAME 該計(jì)算機(jī)上的SQL服務(wù)的名稱@@TIMETICKS 當(dāng)前計(jì)算機(jī)上每指令周期的微秒數(shù)@@TRANSCOUNT 當(dāng)前連接打開的事務(wù)數(shù)@@VERSION SQLServer
的版本信息局部變量變量是可以存儲(chǔ)數(shù)據(jù)值的對(duì)象使用局部變量可以將數(shù)據(jù)傳遞到SQL
語句局部變量名必須以'@'
為前綴SET
或SELECT語句用于給局部變量賦值例如:DECLARE@custVARCHAR(20)SET@cust='FRANK'為變量賦值SET語句或SELECT語句用于給局部變量賦值。語法:SET@local_variablename=value或 SELECT@local_variablename=value其中@local_variablename為局部變量名例如,為先前聲明的變量賦值:SET@CUST='FRANK'SELECTCUSTOMERID,COMPANYNAMEFROMCUSTOMERSWHERECUSTOMERID=@CUST局部變量的定義與賦值實(shí)例DECLARE@CUSTVARCHAR(5)SET@CUST='FRANK'SELECTCUSTOMERID,COMPANYNAMEFROMCUSTOMERSWHERECUSTOMERID=@CUST問題1用一個(gè)變量存儲(chǔ)產(chǎn)品名稱konbu,并對(duì)products表執(zhí)行一個(gè)查詢,檢索與此記錄相關(guān)的紀(jì)錄。用一個(gè)變量存儲(chǔ)聯(lián)系人頭銜Owner,并對(duì)Customers表執(zhí)行一個(gè)查詢,檢查與之相關(guān)的紀(jì)錄SQLServer中的函數(shù)相當(dāng)于C語言中的內(nèi)部函數(shù)字符串函數(shù)日期函數(shù)數(shù)學(xué)函數(shù)系統(tǒng)函數(shù)聚合函數(shù)字符串函數(shù)SELECTSTUFF('ABCDEFG',2,3,'我的音樂我的世界')返回:A我的音樂我的世界EFG在一個(gè)字符串中,刪除指定長度的字符,并在該位置插入一個(gè)新的字符串STUFFSELECTCHARINDEX('ACCP','MyAccpCourse',1)返回:4用來尋找一個(gè)指定的字符串在另一個(gè)字符串中的起始位置CHARINDEX舉例描述函數(shù)名SELECTLEN('SQLServer課程')返回:12返回傳遞給它的字符串長度LENSELECTLOWER('SQLServer課程')返回:sqlserver課程把傳遞給它的字符串轉(zhuǎn)換為小寫LOWERSELECTUPPER('sqlserver課程')返回:SQLSERVER課程把傳遞給它的字符串轉(zhuǎn)換為大寫UPPERSELECTLTRIM('周智宇')返回:周智宇(后面的空格保留)清除字符左邊的空格LTRIMSELECTRTRIM('周智宇')返回:周智宇(前面的空格保留)清除字符右邊的空格RTRIMSELECTRIGHT('買賣提.吐爾松',3)返回:吐爾松從字符串右邊返回指定數(shù)目的字符RIGHTSELECTREPLACE('莫樂可切.楊可','可','蘭')返回:莫樂蘭切.楊蘭替換一個(gè)字符串中的字符REPLACE日期函數(shù)SELECTDATEPART(day,’01/15/2000’)返回:15日期中指定日期部分的整數(shù)形式DATEPARTSELECTGETDATE()返回:今天的日期取得當(dāng)前的系統(tǒng)日期GETDATE舉例描述函數(shù)名SELECTDATEADD(mm,4,’01/01/99’)返回:以當(dāng)前的日期格式返回05/01/99將指定的數(shù)值添加到指定的日期部分后的日期DATEADDSELECTDATEDIFF(mm,’01/01/99’,’05/01/99’)返回:4兩個(gè)日期之間的指定日期部分的區(qū)別DATEDIFFSELECTDATENAME(dw,’01/01/2000’)返回:Saturday日期中指定日期部分的字符串形式DATENAME日期函數(shù)-日期部分日期部分縮寫值星期wk1-53星期幾dw 1-7月mm1-12季度qq1-4年yy1753-9999數(shù)學(xué)函數(shù)SELECTSQRT(9)返回:3取浮點(diǎn)表達(dá)式的平方根SqrtSELECTABS(-43)返回:43取數(shù)值表達(dá)式的絕對(duì)值A(chǔ)BS舉例描述函數(shù)名SELECTCEILING(43.5)返回:44返回大于或等于所給數(shù)字表達(dá)式的最小整數(shù)CEILINGSELECTPOWER(5,2)返回:25取數(shù)值表達(dá)式的冪值POWERSELECTROUND(43.543,1)返回:43.5將數(shù)值表達(dá)式四舍五入為指定精度ROUNDSELECTSIGN(-43)返回:-1對(duì)于正數(shù)返回+1,對(duì)于負(fù)數(shù)返回-1,對(duì)于0則返回0SignSELECTFLOOR(43.5)返回:43取小于或等于指定表達(dá)式的最大整數(shù)FLOOR系統(tǒng)函數(shù)SELECTUSER_NAME(1)返回:從任意數(shù)據(jù)庫中返回“dbo”從給定的用戶ID返回用戶名USER_NAMESELECTCONVERT(VARCHAR(5),12345)返回:字符串12345用來轉(zhuǎn)變數(shù)據(jù)類型CONVERT舉例描述函數(shù)名SELECTCURRENT_USER返回:你登錄的用戶名返回當(dāng)前用戶的名字CURRENT_USERSELECTDATALENGTH('中國A盟')返回:7返回用于指定表達(dá)式的字節(jié)數(shù)DATALENGTHSELECTHOST_NAME()返回:你所登錄的計(jì)算機(jī)的名字返回當(dāng)前用戶所登錄的計(jì)算機(jī)名字HOST_NAMESELECTSYSTEM_USER返回:你當(dāng)前所登錄的用戶名返回當(dāng)前所登錄的用戶名稱SYSTEM_USER聚合函數(shù)函數(shù)返回值Sum(col_name)返回一系列值的總和Avg(col_name)返回一系列值的平均值COUNT(*) 其功能是檢索表中滿足給定條件的記錄數(shù)Max(col_name)返回一系列值中的最大值Min(col_name)返回一系列值中的最小值Stdev(express)返回給定表達(dá)式的所有值的統(tǒng)計(jì)標(biāo)準(zhǔn)偏差Stdevp(express)返回給定表達(dá)式的所有值的總體標(biāo)準(zhǔn)偏差var(express)返回給定表達(dá)式的所有值的統(tǒng)計(jì)方差varp(express)返回給定表達(dá)式的所有值的總體變異差案例分析1—要求某公司印了一批充值卡,卡的密碼是隨機(jī)生成的,現(xiàn)在出現(xiàn)這個(gè)問題:卡里面的“O和0”(哦和零)“i和1”(哎和一),用戶反映說看不清楚,公司決定,把存儲(chǔ)在數(shù)據(jù)庫中的密碼中所有的“哦”都改成“零”,把所有的“i”都改成“1”; 請(qǐng)編寫SQL語句實(shí)現(xiàn)以上要求;數(shù)據(jù)庫表名:Card;密碼字段名:PassWord;案例分析1—分析這是更新語句,需要使用UPDATE語句;因?yàn)闋可娴阶址奶鎿Q,需要使用到SQLServer中的函數(shù)Replace;案例分析1—T-SQL兩行SQL語句UpdateCardSetPassWord=Replace(密碼,'O','0')UpdateCardSetPassWord=Replace(密碼,'i','1')一行SQL語句Update CardSet
PassWord=Replace(Replace(密碼,'O','0'),'i','1')案例分析2—要求在數(shù)據(jù)庫表中有以下字符數(shù)據(jù),如:
13-1、13-2、13-3、13-10、13-100、13-108、13-18、13-11、13-15、14-1、14-2
現(xiàn)在希望通過SQL語句進(jìn)行排序,并且首先要按照前半部分的數(shù)字進(jìn)行排序,然后再按照后半部分的數(shù)字進(jìn)行排需,輸出要排成這樣:
13-1、13-2、13-3、13-10、13-11、13-15、13-18、13-100、13-108、14-1、14-2數(shù)據(jù)庫表名:SellRecord;字段名:ListNumber;案例分析2—分析這是查詢語句,需要使用SELECT語句需要使用到ORDERBY進(jìn)行排序,并且在ORDERBY的排序列中,也需要重新計(jì)算出排序的數(shù)字來前半部分的數(shù)字,可以從先找到“-”符號(hào)的位置,然后,取其左半部分,最后再使用Convert函數(shù)將其轉(zhuǎn)換為數(shù)字:
Convert(int,Left(ListNumber,CharIndex('-',ListNumber)-1))后半部分的數(shù)字,可以先找到“-”符號(hào)的位置,然后把從第一個(gè)位置到該位置的全部字符替換為空格,最后再使用Convert函數(shù)將其轉(zhuǎn)換為數(shù)字:
Convert(int,Stuff(ListNumber,1,Charindex('-',ListNumber),''))案例分析2—T-SQL,,,,,,,,,,,,,,SELECTListNumberFROM
SellRecordORDERBYConvert(int,Left(ListNumber,CharIndex('-',ListNumber)-1)),Convert(int,Stuff(ListNumber,1,Charindex('-',ListNumber),''))思考:還有其他的計(jì)算出排序列方法嗎?講述T-SQL之前…語法檢查數(shù)據(jù)庫對(duì)象執(zhí)行選擇數(shù)據(jù)庫T-SQL執(zhí)行結(jié)果插入數(shù)據(jù)行7-1InSert[INTO]<表名>[列名]Values<值列表>INSERTINTOStudents(SName,SAddress,SGrade,SEmail,SSEX)VALUES('張青裁','上海松江',6,'ZQC@S',0)
插入數(shù)據(jù)行7-2注意事項(xiàng)1:每次插入一行數(shù)據(jù),不可能只插入半行或者幾列數(shù)據(jù),因此,插入的數(shù)據(jù)是否有效將按照整行的完整性的要求來檢驗(yàn);INSERTINTOStudents(SName,SAddress,SGrade,SEmail,SSEX)VALUES('張青裁')代碼錯(cuò)誤插入數(shù)據(jù)行7-3注意事項(xiàng)2:每個(gè)數(shù)據(jù)值的數(shù)據(jù)類型、精度和小數(shù)位數(shù)必須與相應(yīng)的列匹配;INSERTINTOStudents(SName,SAddress,SGrade,SEmail,SSEX)VALUES('張青裁','上海松江',ZQC,'ZQC@S','ZG')代碼錯(cuò)誤插入數(shù)據(jù)行7-4注意事項(xiàng)3:不能為標(biāo)識(shí)列指定值,因?yàn)樗臄?shù)字是自動(dòng)增長的;INSERTINTOStudents(SCode,SName,SAddress,SGrade,SEmail,SSEX)VALUES(32,'張青裁','上海松江',6,'ZQC@S',0)
代碼錯(cuò)誤插入數(shù)據(jù)行7-5注意事項(xiàng)4:如果在設(shè)計(jì)表的時(shí)候就指定了某列不允許為空,則必須插入數(shù)據(jù);INSERTINTOStudents(SAddress,SGrade,SEmail,SSEX)VALUES('上海松江',6,'ZQC@S',0)代碼錯(cuò)誤插入數(shù)據(jù)行7-6注意事項(xiàng)5:插入的數(shù)據(jù)項(xiàng),要求符合檢查約束的要求INSERTINTOStudents(SName,SAddress,SGrade,SEmail,SSEX)VALUES('張青裁','上海松江',6,'ZQC',0)代碼錯(cuò)誤插入數(shù)據(jù)行7-7注意事項(xiàng)6:具有缺省值的列,可以使用DEFAULT(缺?。╆P(guān)鍵字來代替插入的數(shù)值INSERTINTOStudents(SName,SAddress,SGrade,SEmail,SSEX)VALUES('張青裁',DEFAULT,6,'ZQC@S',0)小結(jié)1
編寫SQL語句,把你自己的信息插入到學(xué)員信息表中插入多行數(shù)據(jù)4-1INSERTINTO TongXunLu(姓名,地址,電子郵件)
SELECT SName,SAddress,SEmailFROM StudentsInSertInto
<表名>(列名)Select
<列名>From
<源表名>插入多行數(shù)據(jù)4-2SELECTStudents.SName,Students.SAddress,Students.SEmailINTO TongXunLuFROMStudentsSelect
(列名)Into<表名>From<源表名>該語句可以執(zhí)行兩次嗎?插入多行數(shù)據(jù)4-3SELECTStudents.SName,Students.SAddress,Students.SEmail,IDENTITY(int,1,1)
AsStudentIDINTOTongXunLuEXFROMStudentsSelectInto插入多行數(shù)據(jù)的時(shí)候,如何插入新的標(biāo)識(shí)列?SELECTIDENTITY(數(shù)據(jù)類型,標(biāo)識(shí)種子,標(biāo)識(shí)增長量)AS列名INTO新表FROM原始表插入多行數(shù)據(jù)4-4INSERTSTUDENTS(SName,SGrade,SSex)SELECT'張可',7,1UNIONSELECT'李揚(yáng)',4,0UNIONSELECT'楊曉',2,0UNIONSELECT'湯美',3,0UNIONSELECT'蘇三東',7,1UNIONSELECT'王立巖',3,1UNIONSELECT'張偉',7,1UNIONSELECT'陳剛',4,1UNIONSELECT'王娟娟',7,0InSertInto<表名>(列名)Select<列名>UnionSelect<列名>Union……更新數(shù)據(jù)行Update<表名>Set<列名
=更新值>[Where<更新條件>]UPDATEStudentsSETSSEX=0UPDATEStudentsSETSAddress='北京女子職業(yè)技術(shù)學(xué)校家政班'WHERESAddress='北京女子職業(yè)技術(shù)學(xué)校刺繡班'UPDATEScoresSETScores=Scores+5WHEREScores<=95小結(jié)2
編寫SQL語句,更新學(xué)員信息表中全部女同學(xué)的地址為“北京奧運(yùn)村”刪除數(shù)據(jù)行3-1DeleteFrom<表名>[Where<刪除條件>]DELETEFROMStudentsWHERESName='張青裁'DELETEFROM學(xué)員信息表
WHERE學(xué)號(hào)
='0010012'運(yùn)行錯(cuò)誤河南新鄉(xiāng)趙可以0010016河南新鄉(xiāng)張麗鵑0010015江西南昌雷銅0010014湖南新田吳蘭0010013山東定陶李山0010012….地址姓名學(xué)號(hào)980010016數(shù)學(xué)810010013語文670010012語文740010013數(shù)學(xué)880010012數(shù)學(xué)….分?jǐn)?shù)學(xué)號(hào)科目刪除數(shù)據(jù)行3-2以下的刪除語句可以執(zhí)行嗎?DELETESCodeFROMStudents刪除數(shù)據(jù)行3-3TruncateTable<表名>TRUNCATETABLEStudentsDELETEFROMStudents=總結(jié)為學(xué)員成績(jī)表中增加一行數(shù)據(jù),學(xué)員張偉Java的考試成績(jī)?yōu)?0分,SQL語句怎么寫?更新成績(jī)表,所有低于60分成績(jī)都加5分的SQL語句怎么寫?復(fù)制學(xué)員表Students為StudentsInfo,包含表結(jié)構(gòu)和全部的數(shù)據(jù),SQL語句怎么寫?本章目標(biāo)
理解查詢的機(jī)制使用SELECT語句進(jìn)行條件查詢?cè)诓樵冎蟹祷叵拗菩?、進(jìn)行查詢排序在查詢中使用表達(dá)式、運(yùn)算符和函數(shù)什么是查詢?客戶程序查詢請(qǐng)求查詢結(jié)果集SQLSERVERABCDEFG
SELECT*FROMSALES查詢產(chǎn)生一個(gè)虛擬表,看到的是表形式顯示的結(jié)果,但結(jié)果并不真正存儲(chǔ),每次執(zhí)行查詢只是現(xiàn)從數(shù)據(jù)表中提取數(shù)據(jù),并按照表的形式顯示出來怎么查的?學(xué)員編號(hào)學(xué)員姓名地址所在班級(jí)…….001張明全湖南長沙S201002李菲湖北宜昌S202003于寄謙甘肅天水S204004劉國正山東荷澤S201005周接輪臺(tái)灣新竹S204006鞏小妹香港龍灣S203007鞏大妹香港龍灣S203008張明敏北京順義S202009矛十八四川棉陽S204010羅林光陜西臨潼S202011司馬坡新疆喀什S201SELECT*FROMStudentsHWHERE所在班級(jí)=‘S202’S202陜西臨潼羅林光010…S202湖北宜昌李菲002S202北京順義張明敏008思考既然查詢得到的“結(jié)果集”的結(jié)構(gòu)類似于一張表,那么可以在“結(jié)果集”上繼續(xù)進(jìn)行查詢嗎?編寫查詢語句之前…查詢SELECT<列名>FROM<表名>[WHERE
<查詢條件表達(dá)式>][ORDERBY<排序的列名>[ASC或DESC]]
列名稱SELECT
SCode,SName,SAddress
表名FROMStudents過濾條件WHERE
SSEX=0排序條件ORDERBY
SCodeSELECT SCode,SName,SAddressFROM StudentsWHERE SSEX=0ORDERBY SCode數(shù)據(jù)查詢-基礎(chǔ)查詢?nèi)康男泻土蠸ELECT*FROMStudents
查詢部分行SELECT
SCode,SName,SAddressFROMStudentsWHERE
SAddress='河南新鄉(xiāng)'SELECT
SCode,SName,SAddressFROMStudentsWHERESAddress<>'河南新鄉(xiāng)'數(shù)據(jù)查詢-列名使用AS來命名列SELECTSCode
AS
學(xué)員編號(hào),SNameAS學(xué)員姓名,SAddressAS
學(xué)員地址
FROMStudentsWHERESAddress<>'河南新鄉(xiāng)'SELECTFirstName+'.'
+LastNameAS
'姓名'
FROMEmployees使用=來命名列SELECT'姓名'=
FirstName+'.'+LastName
FROMEmployees數(shù)據(jù)查詢-空行常量列查詢空行SELECTSNameFROMStudentsWHERESEmailISNULL原來有數(shù)據(jù),但數(shù)據(jù)被清除的列這樣能查出來嗎?使用常量列SELECT姓名=SName,地址=SAddress,'河北新龍'AS學(xué)校名稱FROMStudents數(shù)據(jù)查詢-限制行數(shù)限制固定行數(shù)SELECTTOP5SName,SAddressFROMStudentsWHERESSex=0返回百分之多少行SELECTTOP20PERCENTSName,SAddressFROMStudentsWHERESSex=0數(shù)據(jù)查詢-排序2-1升序排列SELECTStudentIDAs學(xué)員編號(hào),(Score*0.9+5)As綜合成績(jī)FROMScoreWHERE(Score*0.9+5)>60ORDERBYScore降序排列SELECTAu_Lname+'.'+Au_fNameASEMPFromAuthorsUnionSELECTfName+'.'+LNameASEMPFromEmployeeORDERBYEMPDESC數(shù)據(jù)查詢-排序2-2按多列排序SELECTStudentIDAs學(xué)員編號(hào),ScoreAs成績(jī)FROMScoreWHEREScore>60ORDERBYScore,CourseID排序中的字段,可以使用表達(dá)式嗎?
——
如果不可以,請(qǐng)說明原因;
——
如果可以,請(qǐng)舉例說明;小結(jié)1
編寫SQL語句:
1、查詢河北的男同學(xué);
2、查詢考試成績(jī)前五名的分?jǐn)?shù);案例分析1—分析這是更新語句,需要使用UPDATE語句;因?yàn)闋可娴阶址奶鎿Q,需要使用到SQLServer中的函數(shù)Replace;模糊查詢—LIKE查詢時(shí),字段中的內(nèi)容并不一定與查詢內(nèi)容完全匹配,只要字段中含有這些內(nèi)容SELECTSNameAS姓名FROMStudentsWHERESNameLIKE'張%'姓名張果老張飛張揚(yáng)出去思考:以下的SQL語句:SELECT*FROM數(shù)據(jù)表WHERE編號(hào)LIKE'00[^8]%[AC]%‘可能會(huì)查詢出的編號(hào)值為()。A、9890ACDB、007_AFFC、008&DCGD、KK8C模糊查詢—ISNULL把某一字段中內(nèi)容為空的記錄查詢出來SELECTSNameAs姓名SAddressAS地址FROMStudentsWHERESAddress
ISNULL姓名地址張果老NULL李尋歡NULL令狐沖NULL程靈素NULL……猜一猜:把Students表中某些行的SAddress字段值刪掉后:——使用ISNULL能查詢出來這些數(shù)據(jù)行嗎?——怎么查詢出這些行來?模糊查詢—BETWEEN把某一字段中內(nèi)容在特定范圍內(nèi)的記錄查詢出來SELECTStudentID,ScoreFROMSCoreWHEREScoreBETWEEN60AND80StudentIDScore77786111761764……模糊查詢—IN把某一字段中內(nèi)容與所列出的查詢內(nèi)容列表匹配的記錄查詢出來SELECTSNameAS學(xué)員姓名,SAddressAs地址FROMStudentsWHERESAddressIN('北京','廣州','上海')學(xué)員姓名地址李揚(yáng)廣州于紫電上海李青霜北京司馬弓上?!瓎栴}成績(jī)表中存儲(chǔ)了所有學(xué)員的成績(jī),我想知道:學(xué)員的總成績(jī)、平均成績(jī)、有成績(jī)的學(xué)員總共有多少名?怎么辦?聚合函數(shù)-1SUMSELECTSUM(ytd_sales)FROMtitlesWHEREtype='business'SELECTSUM(ytd_sales),Price
FROMtitlesWHEREtype='business'AVGSELECTAVG(SCore)AS平均成績(jī)FromScoreWHEREScore>=60代碼錯(cuò)誤聚合函數(shù)-2MAX、MINSELECTAVG(SCore)AS平均成績(jī),
MAX
(Score)AS最高分,MIN
(Score)AS最低分FromScoreWHEREScore>=60COUNTSELECTCOUNT
(*)AS及格人數(shù)FromScoreWHEREScore>=60問題如果不是統(tǒng)計(jì)所有人所有課程的總成績(jī)而是想求每一門課的平均績(jī)或者某個(gè)人的所有課的總成績(jī)?cè)趺崔k?分組匯總第一門課6個(gè)成績(jī)?nèi)∑骄档诙T課6個(gè)成績(jī)?nèi)∑骄档谌T課5個(gè)成績(jī)?nèi)∑骄捣纸M查詢—GROUPBYSELECT
CourseID,AVG(Score)AS課程平均成績(jī)FROMScoreGROUPBYCourseID分組查詢—思考SELECT
StudentID,CourseID,AVG(Score)AS課程平均成績(jī)FROMScoreGROUPBY
CourseID思考:執(zhí)行以下的T-SQL:——
結(jié)果如何?分組查詢—多列分組怎么樣來統(tǒng)計(jì)每次的內(nèi)部測(cè)試不同學(xué)員的成績(jī)?第一次內(nèi)部測(cè)試不及格第二次內(nèi)部測(cè)試不及格第三次內(nèi)部測(cè)試不及格補(bǔ)考成績(jī)分組查詢—再看看內(nèi)部測(cè)試成績(jī)還要把這個(gè)加上取平均StudentID和CourseID的組合存在重復(fù)……需要按照這兩個(gè)來進(jìn)行分組,避免StudentID和CourseID同時(shí)一樣分組查詢—多列分組SELECTStudentIDAS學(xué)員編號(hào),CourseIDAS內(nèi)部測(cè)試,AVG(Score)AS內(nèi)部測(cè)試平均成績(jī)FROMScoreGROUPBYStudentID,CourseID分組查詢—問題在以上統(tǒng)計(jì)內(nèi)部測(cè)試成績(jī)的基礎(chǔ)上,如果只想看補(bǔ)考的學(xué)員的成績(jī),怎么辦分組查詢—再看看增加條件:要求該學(xué)員的CourseID在分組內(nèi)出現(xiàn)過一次以上……SELECTStudentIDAS學(xué)員編號(hào),CourseIDAS內(nèi)部測(cè)試,AVG(Score)AS內(nèi)部測(cè)試平均成績(jī)FROMScoreGROUPBYStudentID,CourseID分組查詢—HAVINGSELECTStudentIDAS學(xué)員編號(hào),CourseIDAS內(nèi)部測(cè)試,AVG(Score)AS內(nèi)部測(cè)試平均成績(jī)FROMScoreGROUPBYStudentID,CourseIDHAVINGCOUNT(Score)>10分組查詢—對(duì)比WHEREGROUPBYHAVINGWHERE子句從數(shù)據(jù)源中去掉不符合其搜索條件的數(shù)據(jù)GROUPBY子句搜集數(shù)據(jù)行到各個(gè)組中,統(tǒng)計(jì)函數(shù)為各個(gè)組計(jì)算統(tǒng)計(jì)值HAVING子句去掉不符合其組搜索條件的各組數(shù)據(jù)行分組查詢—思考SELECT 部門編號(hào),COUNT(*)FROM 員工信息表WHERE 工資>=2000GroupBY 部門編號(hào)HAVING COUNT(*)>1思考:分析以下T-SQL的含義小結(jié)1以下的查詢語句:
Select*FromA將得到以下的查詢結(jié)果:A1 B1 C11001 P1 701002 P2 601001 P1 1001002 P1 801002 P2 90那么,以下的查詢語句將輸出哪些信息?
SelectA1,B1,MAX(C1)FROMA多表聯(lián)結(jié)查詢—問題學(xué)員內(nèi)部測(cè)試成績(jī)查詢的每次顯示的都是學(xué)員的編號(hào)信息,因?yàn)樵摫碇兄淮鎯?chǔ)了學(xué)員的編號(hào);實(shí)際上最好顯示學(xué)員的姓名,而姓名存儲(chǔ)在學(xué)員信息表;如何同時(shí)從這兩個(gè)表中取得數(shù)據(jù)?多表聯(lián)結(jié)查詢—分類內(nèi)聯(lián)結(jié)(INNERJOIN)外聯(lián)結(jié)——左外聯(lián)結(jié)(LEFTJOIN)——右外聯(lián)結(jié)(RIGHTJOIN)——完整外聯(lián)結(jié)(FULLJOIN)交叉聯(lián)結(jié)(CROSSJOIN)SELECT
S.SName,C.CourseID,C.Score
From
ScoreASCINNERJOIN
StudentsASSON
C.StudentID=S.SCodeScoreStudentsIDCourseIDScore122300100100200297896776300381猜一猜:這樣寫,返回的查詢結(jié)果是一樣的嗎?SELECT
S.SName,C.CourseID,C.Score
From
StudentsASSINNERJOIN
ScoreASCON
C.StudentID=S.SCode再猜一猜:以下返回多少行?SELECT
S.SName,C.CourseID,C.Score
From
StudentsASSINNERJOIN
ScoreASCON
C.StudentID<>S.SCode多表聯(lián)結(jié)查詢—內(nèi)聯(lián)結(jié)-1StundentsSName梅超風(fēng)陳玄風(fēng)陸乘風(fēng)曲靈風(fēng)SCode1234查詢結(jié)果SName梅超風(fēng)陳玄風(fēng)陳玄風(fēng)陸乘風(fēng)CourseIDScore00100100200297896776陸乘風(fēng)00381多表聯(lián)結(jié)查詢—內(nèi)聯(lián)結(jié)-2SELECTStudents.SName,Score.CourseID,Score.ScoreFROM Students,ScoreWHEREStudents.SCode=Score.StudentID多表聯(lián)結(jié)查詢—三表聯(lián)結(jié)SELECT
S.SNameAS姓名,CS.CourseNameAS課程,C.ScoreAS成績(jī)FROMStudentsASSINNERJOINScoreASCON(S.SCode=C.StudentID)INNERJOINCourseASCSON(CS.CourseID=C.CourseID)ScoreStudentsIDCourseIDScore122300100100200297896776300381多表聯(lián)結(jié)查詢—左外聯(lián)結(jié)StundentsSName梅超風(fēng)陳玄風(fēng)陸乘風(fēng)曲靈風(fēng)SCode1234查詢結(jié)果SName梅超風(fēng)陳玄風(fēng)陳玄風(fēng)陸乘風(fēng)CourseIDScore00100100200297896776陸乘風(fēng)00381曲靈風(fēng)NULLNULL猜一猜:這樣寫,返回的查詢結(jié)果是一樣的嗎?SELECT
S.SName,C.CourseID,C.Score
From
ScoreASCLEFTJOIN
StudentsASSON
C.StudentID=S.SCodeSELECT
S.SName,C.CourseID,C.Score
From
StudentsASSLEFTJOIN
ScoreASCON
C.StudentID=S.SCode多表聯(lián)結(jié)查詢—右外聯(lián)結(jié)SELECTTitles.Title_id,Titles.Title,Publishers.Pub_nameFROMtitlesRIGHTOUTERJOINPublishersONTitles.Pub_id=Publishers.Pub_id案例分析1—要求在數(shù)據(jù)庫表中,數(shù)據(jù)行位置并不重要,但是一個(gè)單位中要根據(jù)奇數(shù)行和偶數(shù)行的數(shù)據(jù)來匯總,在這個(gè)匯總的基礎(chǔ)上再得到一個(gè)數(shù)值,因此,要查詢數(shù)據(jù)庫表的奇數(shù)行和偶數(shù)行的總數(shù)數(shù)據(jù)庫表名:TBL
字段名:A
主鍵字段:IDKEY(標(biāo)識(shí)列,種子:1;增長量:1)案例分析1—分析只能依靠標(biāo)識(shí)列的值來進(jìn)行判斷和選取因?yàn)閿?shù)據(jù)行可能存在增加、修改和刪除,因此標(biāo)識(shí)列的數(shù)據(jù)值并不“完全可靠”,例如標(biāo)識(shí)列值為3,并不一定是第三行,因?yàn)槿?/p>
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 生態(tài)環(huán)境監(jiān)測(cè)數(shù)據(jù)共享合同(2篇)
- 環(huán)境數(shù)據(jù)共享服務(wù)合同(2篇)
- 小學(xué)二年級(jí)加減乘除口算題
- 蘇教版小學(xué)五年級(jí)上冊(cè)數(shù)學(xué)口算練習(xí)題
- 蘇教版小學(xué)二年級(jí)口算題
- 2025年新型便攜式溫、濕、風(fēng)向風(fēng)速儀合作協(xié)議書
- 智慧城市戰(zhàn)略合作框架協(xié)議書范本
- 安全文明施工現(xiàn)場(chǎng)管理方案協(xié)議書范本
- 學(xué)校食堂合作經(jīng)營協(xié)議書范本
- 人教部編版九年級(jí)歷史下冊(cè):第12課 《亞洲殖民地人民的抗?fàn)帯?聽課評(píng)課記錄
- 電化學(xué)免疫傳感器的應(yīng)用
- 數(shù)據(jù)中心基礎(chǔ)知識(shí)培訓(xùn)-2024鮮版
- 供電企業(yè)輿情的預(yù)防及處置
- 【高中語文】《氓》課件++統(tǒng)編版+高中語文選擇性必修下冊(cè)
- T-WAPIA 052.3-2023 無線局域網(wǎng)設(shè)備技術(shù)規(guī)范 第3部分:接入點(diǎn)和控制器
- 第4課+中古時(shí)期的亞洲(教學(xué)設(shè)計(jì))-【中職專用】《世界歷史》(高教版2023基礎(chǔ)模塊)
- 金點(diǎn)子活動(dòng)總結(jié)匯報(bào)
- 運(yùn)動(dòng)技能學(xué)習(xí)與控制完整
- 原料驗(yàn)收標(biāo)準(zhǔn)知識(shí)培訓(xùn)課件
- Unit4MyfamilyStorytime(課件)人教新起點(diǎn)英語三年級(jí)下冊(cè)
- 物流運(yùn)作管理-需求預(yù)測(cè)
評(píng)論
0/150
提交評(píng)論