數(shù)據(jù)庫設(shè)計(jì)之二SQL語句_第1頁
數(shù)據(jù)庫設(shè)計(jì)之二SQL語句_第2頁
數(shù)據(jù)庫設(shè)計(jì)之二SQL語句_第3頁
數(shù)據(jù)庫設(shè)計(jì)之二SQL語句_第4頁
數(shù)據(jù)庫設(shè)計(jì)之二SQL語句_第5頁
已閱讀5頁,還剩95頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

SQLServer數(shù)據(jù)管理回顧建立數(shù)據(jù)庫表之間的主外鍵關(guān)系是為了維護(hù)數(shù)據(jù)庫的哪種完整性?年齡信息、性別信息分別采用哪種數(shù)據(jù)類型存儲?限制年齡在18-40歲之間的檢查約束表達(dá)式如何寫?完整地設(shè)置數(shù)據(jù)庫表的一個字段需要哪幾個步驟?本章任務(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(何時使用?)——對SQLServer執(zhí)行所有的操作都可以——程序中的增刪改查HOW(怎么使用?)——…SQL和T-SQLT-SQL=Transact-SQLT-SQL是SQL的加強(qiáng)版對功能進(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ù)庫對象和定義其列——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語言中的一樣,很難寫錯通配符通配符解釋示例‘_’一個字符ALike'C_'%任意長度的字符串BLike'CO_%'[]括號中所指定范圍內(nèi)的一個字符CLike'9W0[1-2]'[^]不在括號中所指定范圍內(nèi)的一個字符DLike‘%[A-D][^1-2]'通配符使用說明通常與LIKE關(guān)鍵字一起來使用可以用在檢查約束中使用LIKE在后面的查詢語句中還會經(jīng)常使用到身份證號碼的約束表達(dá)式怎么寫?邏輯表達(dá)式邏輯表達(dá)式說明示例AND邏輯與1AND1=;1AND0=0;0AND0=0;OR邏輯或1OR1=1;1OR0=1;0OR0=0;NOT邏輯非NOT1=0;NOT0=1;NOT(付款方式=‘信用卡’)OR(信用卡<>‘陽光卡’)這個表達(dá)式的含義是什么?全局變量SQLServer中的全局變量都用兩個@標(biāo)記作為前綴。可以使用簡單的SELECT查詢語句檢索任意全局變量的值。SELECT@@VERSIONASSQL_SERVER_VERSION_DETAILS全局變量列表1-2變量 含義@@IDENTITY 最后一次插入的標(biāo)識值@@CPU_BUSY 自SQLServer啟動至今,系統(tǒng)持續(xù)運(yùn)行的毫秒數(shù)。@@CURSOR_ROWS 最近打開的游標(biāo)中的行數(shù)@@DATEFIRST SETDATEFIRST參數(shù)的當(dāng)前值,該參數(shù)用于設(shè)置一個星期的第一天為哪一天。@@ERROR 最后一個T-SQL錯誤的錯誤號@@FETCH_STATUS如果最后一次提取的狀態(tài)為成功狀態(tài),則為0。如果出錯,則為-1全局變量列表2-2變量含義@@IDENTITY 最后一次插入的標(biāo)識值@@LANGUAGE 當(dāng)前使用的語言的名稱@@MAX_CONNECTIONS可以創(chuàng)建的同時連接的最大數(shù)@@ROWCOUNT 受上一個SQL

語句影響的行數(shù)@@SERVERNAME 本地服務(wù)器的名稱@@SERVICENAME 該計(jì)算機(jī)上的SQL服務(wù)的名稱@@TIMETICKS 當(dāng)前計(jì)算機(jī)上每指令周期的微秒數(shù)@@TRANSCOUNT 當(dāng)前連接打開的事務(wù)數(shù)@@VERSION SQLServer

的版本信息局部變量變量是可以存儲數(shù)據(jù)值的對象使用局部變量可以將數(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用一個變量存儲產(chǎn)品名稱konbu,并對products表執(zhí)行一個查詢,檢索與此記錄相關(guān)的紀(jì)錄。用一個變量存儲聯(lián)系人頭銜Owner,并對Customers表執(zhí)行一個查詢,檢查與之相關(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在一個字符串中,刪除指定長度的字符,并在該位置插入一個新的字符串STUFFSELECTCHARINDEX('ACCP','MyAccpCourse',1)返回:4用來尋找一個指定的字符串在另一個字符串中的起始位置CHARINDEX舉例描述函數(shù)名SELECTLEN('SQLServer課程')返回:12返回傳遞給它的字符串長度LENSELECTLOWER('SQLServer課程')返回:sqlserver課程把傳遞給它的字符串轉(zhuǎn)換為小寫LOWERSELECTUPPER('sqlserver課程')返回:SQLSERVER課程把傳遞給它的字符串轉(zhuǎn)換為大寫UPPERSELECTLTRIM('周智宇')返回:周智宇(后面的空格保留)清除字符左邊的空格LTRIMSELECTRTRIM('周智宇')返回:周智宇(前面的空格保留)清除字符右邊的空格RTRIMSELECTRIGHT('買賣提.吐爾松',3)返回:吐爾松從字符串右邊返回指定數(shù)目的字符RIGHTSELECTREPLACE('莫樂可切.楊可','可','蘭')返回:莫樂蘭切.楊蘭替換一個字符串中的字符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兩個日期之間的指定日期部分的區(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á)式的絕對值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對于正數(shù)返回+1,對于負(fù)數(shù)返回-1,對于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)這個問題:卡里面的“O和0”(哦和零)“i和1”(哎和一),用戶反映說看不清楚,公司決定,把存儲在數(shù)據(jù)庫中的密碼中所有的“哦”都改成“零”,把所有的“i”都改成“1”; 請編寫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ù)字,可以從先找到“-”符號的位置,然后,取其左半部分,最后再使用Convert函數(shù)將其轉(zhuǎn)換為數(shù)字:

Convert(int,Left(ListNumber,CharIndex('-',ListNumber)-1))后半部分的數(shù)字,可以先找到“-”符號的位置,然后把從第一個位置到該位置的全部字符替換為空格,最后再使用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ù)庫對象執(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('張青裁')代碼錯誤插入數(shù)據(jù)行7-3注意事項(xiàng)2:每個數(shù)據(jù)值的數(shù)據(jù)類型、精度和小數(shù)位數(shù)必須與相應(yīng)的列匹配;INSERTINTOStudents(SName,SAddress,SGrade,SEmail,SSEX)VALUES('張青裁','上海松江',ZQC,'ZQC@S','ZG')代碼錯誤插入數(shù)據(jù)行7-4注意事項(xiàng)3:不能為標(biāo)識列指定值,因?yàn)樗臄?shù)字是自動增長的;INSERTINTOStudents(SCode,SName,SAddress,SGrade,SEmail,SSEX)VALUES(32,'張青裁','上海松江',6,'ZQC@S',0)

代碼錯誤插入數(shù)據(jù)行7-5注意事項(xiàng)4:如果在設(shè)計(jì)表的時候就指定了某列不允許為空,則必須插入數(shù)據(jù);INSERTINTOStudents(SAddress,SGrade,SEmail,SSEX)VALUES('上海松江',6,'ZQC@S',0)代碼錯誤插入數(shù)據(jù)行7-6注意事項(xiàng)5:插入的數(shù)據(jù)項(xiàng),要求符合檢查約束的要求INSERTINTOStudents(SName,SAddress,SGrade,SEmail,SSEX)VALUES('張青裁','上海松江',6,'ZQC',0)代碼錯誤插入數(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ù)的時候,如何插入新的標(biāo)識列?SELECTIDENTITY(數(shù)據(jù)類型,標(biāo)識種子,標(biāo)識增長量)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é)號

='0010012'運(yùn)行錯誤河南新鄉(xiāng)趙可以0010016河南新鄉(xiāng)張麗鵑0010015江西南昌雷銅0010014湖南新田吳蘭0010013山東定陶李山0010012….地址姓名學(xué)號980010016數(shù)學(xué)810010013語文670010012語文740010013數(shù)學(xué)880010012數(shù)學(xué)….分?jǐn)?shù)學(xué)號科目刪除數(shù)據(jù)行3-2以下的刪除語句可以執(zhí)行嗎?DELETESCodeFROMStudents刪除數(shù)據(jù)行3-3TruncateTable<表名>TRUNCATETABLEStudentsDELETEFROMStudents=總結(jié)為學(xué)員成績表中增加一行數(shù)據(jù),學(xué)員張偉Java的考試成績?yōu)?0分,SQL語句怎么寫?更新成績表,所有低于60分成績都加5分的SQL語句怎么寫?復(fù)制學(xué)員表Students為StudentsInfo,包含表結(jié)構(gòu)和全部的數(shù)據(jù),SQL語句怎么寫?本章目標(biāo)

理解查詢的機(jī)制使用SELECT語句進(jìn)行條件查詢在查詢中返回限制行、進(jìn)行查詢排序在查詢中使用表達(dá)式、運(yùn)算符和函數(shù)什么是查詢?客戶程序查詢請求查詢結(jié)果集SQLSERVERABCDEFG

SELECT*FROMSALES查詢產(chǎn)生一個虛擬表,看到的是表形式顯示的結(jié)果,但結(jié)果并不真正存儲,每次執(zhí)行查詢只是現(xiàn)從數(shù)據(jù)表中提取數(shù)據(jù),并按照表的形式顯示出來怎么查的?學(xué)員編號學(xué)員姓名地址所在班級…….001張明全湖南長沙S201002李菲湖北宜昌S202003于寄謙甘肅天水S204004劉國正山東荷澤S201005周接輪臺灣新竹S204006鞏小妹香港龍灣S203007鞏大妹香港龍灣S203008張明敏北京順義S202009矛十八四川棉陽S204010羅林光陜西臨潼S202011司馬坡新疆喀什S201SELECT*FROMStudentsHWHERE所在班級=‘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é)員編號,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é)員編號,(Score*0.9+5)As綜合成績FROMScoreWHERE(Score*0.9+5)>60ORDERBYScore降序排列SELECTAu_Lname+'.'+Au_fNameASEMPFromAuthorsUnionSELECTfName+'.'+LNameASEMPFromEmployeeORDERBYEMPDESC數(shù)據(jù)查詢-排序2-2按多列排序SELECTStudentIDAs學(xué)員編號,ScoreAs成績FROMScoreWHEREScore>60ORDERBYScore,CourseID排序中的字段,可以使用表達(dá)式嗎?

——

如果不可以,請說明原因;

——

如果可以,請舉例說明;小結(jié)1

編寫SQL語句:

1、查詢河北的男同學(xué);

2、查詢考試成績前五名的分?jǐn)?shù);案例分析1—分析這是更新語句,需要使用UPDATE語句;因?yàn)闋可娴阶址奶鎿Q,需要使用到SQLServer中的函數(shù)Replace;模糊查詢—LIKE查詢時,字段中的內(nèi)容并不一定與查詢內(nèi)容完全匹配,只要字段中含有這些內(nèi)容SELECTSNameAS姓名FROMStudentsWHERESNameLIKE'張%'姓名張果老張飛張揚(yáng)出去思考:以下的SQL語句:SELECT*FROM數(shù)據(jù)表WHERE編號LIKE'00[^8]%[AC]%‘可能會查詢出的編號值為()。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)廣州于紫電上海李青霜北京司馬弓上?!瓎栴}成績表中存儲了所有學(xué)員的成績,我想知道:學(xué)員的總成績、平均成績、有成績的學(xué)員總共有多少名?怎么辦?聚合函數(shù)-1SUMSELECTSUM(ytd_sales)FROMtitlesWHEREtype='business'SELECTSUM(ytd_sales),Price

FROMtitlesWHEREtype='business'AVGSELECTAVG(SCore)AS平均成績FromScoreWHEREScore>=60代碼錯誤聚合函數(shù)-2MAX、MINSELECTAVG(SCore)AS平均成績,

MAX

(Score)AS最高分,MIN

(Score)AS最低分FromScoreWHEREScore>=60COUNTSELECTCOUNT

(*)AS及格人數(shù)FromScoreWHEREScore>=60問題如果不是統(tǒng)計(jì)所有人所有課程的總成績而是想求每一門課的平均績或者某個人的所有課的總成績怎么辦?分組匯總第一門課6個成績?nèi)∑骄档诙T課6個成績?nèi)∑骄档谌T課5個成績?nèi)∑骄捣纸M查詢—GROUPBYSELECT

CourseID,AVG(Score)AS課程平均成績FROMScoreGROUPBYCourseID分組查詢—思考SELECT

StudentID,CourseID,AVG(Score)AS課程平均成績FROMScoreGROUPBY

CourseID思考:執(zhí)行以下的T-SQL:——

結(jié)果如何?分組查詢—多列分組怎么樣來統(tǒng)計(jì)每次的內(nèi)部測試不同學(xué)員的成績?第一次內(nèi)部測試不及格第二次內(nèi)部測試不及格第三次內(nèi)部測試不及格補(bǔ)考成績分組查詢—再看看內(nèi)部測試成績還要把這個加上取平均StudentID和CourseID的組合存在重復(fù)……需要按照這兩個來進(jìn)行分組,避免StudentID和CourseID同時一樣分組查詢—多列分組SELECTStudentIDAS學(xué)員編號,CourseIDAS內(nèi)部測試,AVG(Score)AS內(nèi)部測試平均成績FROMScoreGROUPBYStudentID,CourseID分組查詢—問題在以上統(tǒng)計(jì)內(nèi)部測試成績的基礎(chǔ)上,如果只想看補(bǔ)考的學(xué)員的成績,怎么辦分組查詢—再看看增加條件:要求該學(xué)員的CourseID在分組內(nèi)出現(xiàn)過一次以上……SELECTStudentIDAS學(xué)員編號,CourseIDAS內(nèi)部測試,AVG(Score)AS內(nèi)部測試平均成績FROMScoreGROUPBYStudentID,CourseID分組查詢—HAVINGSELECTStudentIDAS學(xué)員編號,CourseIDAS內(nèi)部測試,AVG(Score)AS內(nèi)部測試平均成績FROMScoreGROUPBYStudentID,CourseIDHAVINGCOUNT(Score)>10分組查詢—對比WHEREGROUPBYHAVINGWHERE子句從數(shù)據(jù)源中去掉不符合其搜索條件的數(shù)據(jù)GROUPBY子句搜集數(shù)據(jù)行到各個組中,統(tǒng)計(jì)函數(shù)為各個組計(jì)算統(tǒng)計(jì)值HAVING子句去掉不符合其組搜索條件的各組數(shù)據(jù)行分組查詢—思考SELECT 部門編號,COUNT(*)FROM 員工信息表WHERE 工資>=2000GroupBY 部門編號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)部測試成績查詢的每次顯示的都是學(xué)員的編號信息,因?yàn)樵摫碇兄淮鎯α藢W(xué)員的編號;實(shí)際上最好顯示學(xué)員的姓名,而姓名存儲在學(xué)員信息表;如何同時從這兩個表中取得數(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成績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ù)行位置并不重要,但是一個單位中要根據(jù)奇數(shù)行和偶數(shù)行的數(shù)據(jù)來匯總,在這個匯總的基礎(chǔ)上再得到一個數(shù)值,因此,要查詢數(shù)據(jù)庫表的奇數(shù)行和偶數(shù)行的總數(shù)數(shù)據(jù)庫表名:TBL

字段名:A

主鍵字段:IDKEY(標(biāo)識列,種子:1;增長量:1)案例分析1—分析只能依靠標(biāo)識列的值來進(jìn)行判斷和選取因?yàn)閿?shù)據(jù)行可能存在增加、修改和刪除,因此標(biāo)識列的數(shù)據(jù)值并不“完全可靠”,例如標(biāo)識列值為3,并不一定是第三行,因?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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論