




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
回顧數(shù)據(jù)完整性約束有幾種?建立數(shù)據(jù)庫(kù)表之間的主外鍵關(guān)系是為了維護(hù)數(shù)據(jù)庫(kù)的哪種完整性?年齡信息、性別信息分別采用哪種數(shù)據(jù)類型存儲(chǔ)?限制年齡在18-40歲之間的檢查約束表達(dá)式如何寫?完整地設(shè)置數(shù)據(jù)庫(kù)表的一個(gè)字段需要哪幾個(gè)步驟?回顧添加各種約束一般在什么時(shí)候完成?
可以在創(chuàng)建表的時(shí)候添加
也可以在表創(chuàng)建完成以后添加。SQLServer中約束包括哪些?
空值(NULL)約束
主鍵(PRIMARYKEY)約束
外鍵(FOREIGNKEY)約束
默認(rèn)值(DEFAULT)約束
唯一性(UNIQUE)約束和檢查(CHECK)約束??梢詫?duì)已創(chuàng)建的表進(jìn)行哪些修改?
添加、修改列和刪除列。操作表單數(shù)據(jù)第4,5章Page4/31學(xué)習(xí)目標(biāo)了解使用SQLServer中的邏輯表達(dá)式、函數(shù)和運(yùn)算符掌握向表中插入數(shù)據(jù)掌握更新表中的數(shù)據(jù)掌握刪除表中的數(shù)據(jù)理解查詢的機(jī)制掌握使用SELECT語(yǔ)句進(jìn)行基本查詢掌握多表聯(lián)合查詢掌握子查詢Page5/31重點(diǎn)對(duì)數(shù)據(jù)表的添加、修改、刪除和查詢操作SQLServer2008中函數(shù)的應(yīng)用Page6/31難點(diǎn)表中數(shù)據(jù)的查詢函數(shù)的使用Page7/31條件運(yùn)算符及表達(dá)式常量:表示單個(gè)指定數(shù)據(jù)值的符號(hào)。一個(gè)常量由一個(gè)或多個(gè)字母、數(shù)字字符(字母a~z、A~Z、數(shù)字0~9)或符號(hào)(!、@、#等)組成。字符和datetime需要用引號(hào)括起來(lái),而二進(jìn)制字符串和數(shù)字常量則不需要。Page8/31條件運(yùn)算符運(yùn)算符含義=等于>大于<小于>=大于或等于<=小于或等于<>或者!=不等于!非Page9/31條件運(yùn)算符及表達(dá)式通配符解釋示例_一個(gè)字符ALIKE'C_'%任意長(zhǎng)度的字符串BLIKE'CO%'[]括號(hào)中所指定范圍內(nèi)的一個(gè)字符CLIKE'9W0[1-2]'[^]不在括號(hào)中所指定范圍內(nèi)的一個(gè)字符DLIKE'%[A-D][^1-2]'通配符使用說(shuō)明通常與LIKE關(guān)鍵字一起來(lái)使用可以用在檢查約束中使用LIKE在后面的查詢語(yǔ)句中還會(huì)經(jīng)常使用到身份證號(hào)碼的約束表達(dá)式怎么寫?邏輯表達(dá)式邏輯表運(yùn)算符說(shuō)明AND邏輯與OR邏輯或NOT邏輯非NOT(付款方式=‘信用卡’)OR(信用卡<>‘陽(yáng)光卡’)這個(gè)表達(dá)式的含義是什么?邏輯表達(dá)式ABAANDBAORBNOTANOTBTRUETRUETRUETRUEFALSEFALSEFALSETRUEFALSETRUETRUEFALSETRUEFALSEFALSETRUEFALSETRUEFALSEFALSEFALSEFALSETRUETRUEPage13/31使用工具管理表中數(shù)據(jù)查看記錄添加記錄修改記錄刪除記錄Page14/31Transact-SQL語(yǔ)句可以實(shí)現(xiàn)數(shù)據(jù)的查詢和數(shù)據(jù)的更改等操作SELECTINSERTUPDATEDELETE講述T-SQL之前…語(yǔ)法檢查數(shù)據(jù)庫(kù)對(duì)象執(zhí)行選擇數(shù)據(jù)庫(kù)T-SQL執(zhí)行結(jié)果插入數(shù)據(jù)行4-1INSERT[INTO]<表名>[列名]VALUES<值列表>insertintostudents
(sname,ssex,saddress,sbirthday,semail)values
(‘張無(wú)忌’,'','','1998-12-09','zwj@126.com')插入數(shù)據(jù)行4-2注意事項(xiàng)1:每次插入一行數(shù)據(jù),不能只插入半行或者幾列數(shù)據(jù)。如果違反字段的非空約束,那么插入語(yǔ)句會(huì)失敗檢驗(yàn)。插入的數(shù)據(jù)是否有效將按照整行的完整性的要求來(lái)檢驗(yàn)insertintostudents
(sname,ssex,saddress,sbirthday,semail)values
(‘張無(wú)忌’)代碼錯(cuò)誤插入數(shù)據(jù)行4-3注意事項(xiàng)2:數(shù)據(jù)值的數(shù)目必須與列數(shù)相同,每個(gè)數(shù)據(jù)值的數(shù)據(jù)類型、精度和小數(shù)位數(shù)必須與相應(yīng)的列匹配insertintostudents(sname,ssex,saddress,sbirthday,semail)values(‘張無(wú)忌’,1,‘河南許昌','1998-12-09','zwj@126.com')代碼錯(cuò)誤插入數(shù)據(jù)行4-4注意事項(xiàng)3:不能為標(biāo)識(shí)列指定值insertintostudents(sid,sname,ssex,saddress,sbirthday,semail)Values(23,'趙敏','女','','1998-12-09','zwj@126.com')代碼錯(cuò)誤插入數(shù)據(jù)行4-5注意事項(xiàng)4:
如果在設(shè)計(jì)表的時(shí)候就指定了某列不允許為空,則必須插入數(shù)據(jù)insertintostudents(sname,ssex,saddress,sbirthday,semail)values(NULL,'女','','1998-12-09','zwj@126.com')代碼錯(cuò)誤插入數(shù)據(jù)行4-6注意事項(xiàng)5:
插入的數(shù)據(jù)項(xiàng),要求符合檢查約束的要求insertintostudents(sname,ssex,saddress,sbirthday,semail)Values('趙敏','女','','1998-12-09','')代碼錯(cuò)誤插入數(shù)據(jù)行4-7注意事項(xiàng)6:具有缺省值的列,可以使用DEFAULT(缺?。╆P(guān)鍵字來(lái)代替插入的數(shù)值insertintostudents(sname,ssex,saddress,sbirthday,semail)Values('謝遜',default,default,'1978-12-09','zxiexun@126.com')插入數(shù)據(jù)行4-8注意事項(xiàng)7:盡管可以不指定列名,但是最好明確指定插入的列和對(duì)應(yīng)的值insertintostudentsValues('殷天正',default,'1975-12-09','zxiexun@126.com',default)插入數(shù)據(jù)行4-8注意事項(xiàng)7:對(duì)字符類型的列,當(dāng)插入數(shù)據(jù)的時(shí)候,最好用單引號(hào)將其引起來(lái),因?yàn)樽址邪藬?shù)字的時(shí)候特別容易出錯(cuò)insertintostudents(sname,ssex,saddress,sbirthday,semail)Values('周芷若',0,default,'1988-12-09','zhouzhiruo@126.com')容易產(chǎn)生代碼錯(cuò)誤插入多行數(shù)據(jù)4-1實(shí)例:INSERTINTO
TongXunLu
(姓名,地址,電子郵件)SELECTSName,SAddress,SEmailFROMStudents格式:INSERTINTO<表名>(列名)SELECT<列名>FROM<源表名>1、通過(guò)INSERT…SELECT語(yǔ)句將現(xiàn)有表中的數(shù)據(jù)添加到新表該語(yǔ)句可以執(zhí)行兩次嗎?插入多行數(shù)據(jù)4-1注意:(1)被插入數(shù)據(jù)的tongxunlu表必需先創(chuàng)建好結(jié)構(gòu)。(2)查詢得到的數(shù)據(jù)個(gè)數(shù)、順序、數(shù)據(jù)類型等,必須與插入的項(xiàng)保持一致。插入多行數(shù)據(jù)4-2實(shí)例:SELECT
Students.SName,Students.SAddress,Students.SemailINTO TongXunFROMStudents格式:SELECT(列名)INTO<新表名>FROM<源表名>2、通過(guò)SELECT…INTO
語(yǔ)句將現(xiàn)有表中的數(shù)據(jù)添加到新表結(jié)論:將創(chuàng)建TongXun表,把Students表中的sName、sAddress、sEmail作為TongXun表的新列,并把查詢到的數(shù)據(jù)全部添加到新表中。插入多行數(shù)據(jù)4-3實(shí)例:SELECTStudents.SName,Students.SAddress,Students.SEmail,IDENTITY(int,1,1)AsStIDINTONewTongXunFROMStudentsSELECTINTO插入多行數(shù)據(jù)的時(shí)候,如何插入新的標(biāo)識(shí)列?格式:SELECTIDENTITY(數(shù)據(jù)類型,標(biāo)識(shí)種子,標(biāo)識(shí)增長(zhǎng)量)AS列名INTO新表FROM原始表插入多行數(shù)據(jù)4-4實(shí)例:INSERTSTUDENTS(SName,SSex)SELECT‘張可’,‘女‘UNIONSELECT'李揚(yáng)',‘男‘UNIONSELECT'楊曉',‘女‘UNIONSELECT'湯美',‘女‘UNIONSELECT'蘇三東',‘男‘UNIONSELECT'王立巖',‘女‘UNIONSELECT'張偉',‘男‘UNIONSELECT'陳剛',‘男‘UNIONSELECT‘王娟娟’,‘男‘格式:INSERTINTO<表名>(列名)SELECT<列名>UNIONSELECT<列名>UNION……3、通過(guò)UNION關(guān)鍵字合并數(shù)據(jù)進(jìn)行插入更新數(shù)據(jù)行格式:UPDATE<表名>SET<列名=更新值>[WHERE<更新條件>]實(shí)例:UPDATEStudentsSETSSEX=‘女’實(shí)例:UPDATEStudentsSETSAddress='北京女子職業(yè)技術(shù)學(xué)校家政班'WHERESAddress='北京女子職業(yè)技術(shù)學(xué)校刺繡班'實(shí)例:UPDATEScoresSETScores=Scores+5WHEREScores<=95刪除數(shù)據(jù)行4-1格式:DELETEFROM<表名>[WHERE<刪除條件>]實(shí)例:DELETEFROMStudentsWHERESName=‘張三豐'1.刪除若干符合條件的記錄刪除數(shù)據(jù)行4-1河南新鄉(xiāng)趙可以0010016河南新鄉(xiāng)張麗鵑0010015江西南昌雷銅0010014湖南新田吳蘭0010013山東定陶李山0010012….地址姓名學(xué)號(hào)980010016數(shù)學(xué)810010013語(yǔ)文670010012語(yǔ)文740010013數(shù)學(xué)880010012數(shù)學(xué)….分?jǐn)?shù)學(xué)號(hào)科目實(shí)例:DELETEFROMStudentsWHERESID=‘0010012'結(jié)論:如果要?jiǎng)h除的行的主鍵被其他表引用,那么刪除被引用的行時(shí),SQLSERVER將報(bào)告與約束沖突的錯(cuò)誤信息。運(yùn)行錯(cuò)誤刪除數(shù)據(jù)行4-2以下的刪除語(yǔ)句可以執(zhí)行嗎?DELETESsexFROMStudents提示:DELETE…FROM…只要?jiǎng)h除就是刪除整條記錄,不會(huì)只刪除單個(gè)字段,所以在DELETE后不能出現(xiàn)字段名。運(yùn)行錯(cuò)誤刪除數(shù)據(jù)行4-32、刪除全部記錄實(shí)例:DELETEFROMstudents說(shuō)明:刪除student表中所有記錄,但是表的結(jié)構(gòu)、列、約束索引等還存在。刪除數(shù)據(jù)行4-4格式:TRUNCATETABLE<表名>實(shí)例:TRUNCATETABLEStudentsDELETEFROMStudents=功能類似注意:1.表結(jié)構(gòu)、列、約束等不被改動(dòng)。2.不能用于有外鍵約束的表。3.標(biāo)識(shí)列重新開(kāi)始編號(hào)。3、使用TRUNCATETABLE刪除數(shù)據(jù)小結(jié)為學(xué)員成績(jī)表中增加一行數(shù)據(jù),學(xué)員張偉的數(shù)據(jù)庫(kù)考試成績(jī)?yōu)?0分,SQL語(yǔ)句怎么寫?更新成績(jī)表,所有低于60分成績(jī)都加5分的SQL語(yǔ)句怎么寫?復(fù)制學(xué)員表Students為StudentsInfo,包含表結(jié)構(gòu)和全部的數(shù)據(jù),SQL語(yǔ)句怎么寫?什么是查詢?客戶程序查詢請(qǐng)求查詢結(jié)果集SQLSERVERABCDEFG
SELECT*FROMSALES查詢產(chǎn)生一個(gè)虛擬表看到的是表形式顯示的結(jié)果,但結(jié)果并不真正存儲(chǔ)每次執(zhí)行查詢只是現(xiàn)從數(shù)據(jù)表中提取數(shù)據(jù),并按照表的形式顯示出來(lái)SELECT語(yǔ)句的完整語(yǔ)法格式為:SELECT<列名選項(xiàng)>[INTOnew_table]FROM<表名>|<視圖名稱>[WHERE<查詢條件>|<聯(lián)接條件>][GROUPBY<分組表達(dá)式>[HAVING<分組統(tǒng)計(jì)表達(dá)式>]][ORDERBY<排序表達(dá)式>[ASC|DESC]]其中的SELECT和FROM語(yǔ)句為必選子句,而WHERE、ORDERBY和GROUPBY子句為可選子句,要根據(jù)查詢的需要去選用。SELECT語(yǔ)法中各參數(shù)進(jìn)行說(shuō)明:SELECT子句:用來(lái)指定由查詢返回的列,并且各列在SELECT子句中的順序決定了它們?cè)诮Y(jié)果表中的順序;FROM子句:用來(lái)指定數(shù)據(jù)來(lái)源的表;WHERE子句:用來(lái)限定返回行的搜索條件;GROUPBY子句:用來(lái)指定查詢結(jié)果的分組條件;ORDERBY子句:用來(lái)指定結(jié)果的排序方式。SELECT語(yǔ)句可以寫在一行中。但對(duì)于復(fù)雜的查詢,SELECT語(yǔ)句隨著查詢子句的增加不斷增長(zhǎng),一行很難寫下,此時(shí)可以采用分行的寫法,即每個(gè)子句分別在不同的行中。需要注意,子句與子句之間不能使用符號(hào)分隔。WHERE子句的運(yùn)算符運(yùn)算符類型運(yùn)算符作用與意義比較運(yùn)算符=,!=,<>,>,>=,!>,<,<=,!<比較兩個(gè)值的大小范圍運(yùn)算符BETWEENAND,NOTBETWEENAND判斷值是否在范圍內(nèi)集合運(yùn)算符IN,NOTIN判斷值是否在列表集合中空值運(yùn)算符ISNULL,ISNOTNULL測(cè)試字段是否為空值字符匹配運(yùn)算符LIKE,NOTLIKE用于模糊查詢邏輯運(yùn)算符AND,OR,NOT用來(lái)構(gòu)造多重復(fù)合條件用于匹配模式串的通配符通配符符號(hào)描述通配符表示的對(duì)象示例(假定查詢的為Readers表)%百分號(hào)代表零個(gè)或多個(gè)任意字符串姓名
LIKE'劉%',查詢姓劉的所有記錄姓名
LIKE'%小%',查詢所有姓名中含“小”字的記錄_下劃線代表一個(gè)任意字符,一個(gè)漢字要對(duì)應(yīng)兩個(gè)下劃線姓名
LIKE'徐__',查詢姓徐且名為單字的所有記錄[]方括號(hào)表示集合或范圍代表方括號(hào)中列出的或?qū)儆谥付ǚ秶鷥?nèi)的任何單一字符姓名
LIKE'[趙孫李]%',查詢姓趙、孫或李的所有記錄[^]括在方括號(hào)中的^代表不在方括號(hào)中列出或不屬于指定范圍內(nèi)的任何單一字符姓名
LIKE'[^馬]%',查詢不姓馬的所有記錄主要的聚合函數(shù)列表函數(shù)名功能應(yīng)用格式COUNT計(jì)算并返回記錄個(gè)數(shù)COUNT(*)計(jì)算并返回指定列或表達(dá)式中值項(xiàng)的個(gè)數(shù)COUNT([ALL|DISTINCT]<列名/表達(dá)式>)SUM計(jì)算并返回指定列或表達(dá)式中值項(xiàng)的總和SUM([ALL|DISTINCT]<列名/表達(dá)式>)AVG計(jì)算并返回指定列或表達(dá)式中值項(xiàng)的平均值A(chǔ)VG([ALL|DISTINCT]<列名/表達(dá)式>)MAX計(jì)算并返回指定列或表達(dá)式中值項(xiàng)的最大值MAX([ALL|DISTINCT]<列名/表達(dá)式>)MIN計(jì)算并返回指定列或表達(dá)式中值項(xiàng)的最小值MIN([ALL|DISTINCT]<列名/表達(dá)式>)VAR計(jì)算并返回給定列或表達(dá)式值的統(tǒng)計(jì)方差VAR([ALL|DISTINCT]<列名/表達(dá)式>)STDEV計(jì)算并返回給定列或表達(dá)式值的統(tǒng)計(jì)標(biāo)準(zhǔn)偏差STDEV([ALL|DISTINCT]<列名/表達(dá)式>)運(yùn)算符+ALL語(yǔ)義運(yùn)算符+ANY
語(yǔ)義=ALL等于子查詢結(jié)果集中的所有值=ANY等于子查詢結(jié)果集中的某個(gè)值!=ALL或<>ALL不等于子查詢結(jié)果集中的所有值!=ANY或<>ANY不等于子查詢結(jié)果集中的某個(gè)值>ALL大于子查詢結(jié)果集中的所有值>ANY大于子查詢結(jié)果集中的某個(gè)值>=ALL大于等于子查詢結(jié)果集中的所有值>=ANY大于等于子查詢結(jié)果集中的某個(gè)值<ALL小于子查詢結(jié)果集中的所有值<ANY小于子查詢結(jié)果集中的某個(gè)值<=ALL小于等于子查詢結(jié)果集中的所有值<=ANY小于等于子查詢結(jié)果集中的某個(gè)值!>ALL不大于子查詢結(jié)果集中的所有值!>ANY不大于子查詢結(jié)果集中的某個(gè)值!<ALL不小于子查詢結(jié)果集中的所有值!<ANY不小于子查詢結(jié)果集中的某個(gè)值A(chǔ)NY/ALL與比較運(yùn)算符組合怎么查的?學(xué)員編號(hào)學(xué)員姓名地址所在班級(jí)…….001張明全湖南長(zhǎng)沙S201002李菲湖北宜昌S202003于寄謙甘肅天水S204004劉國(guó)正山東荷澤S201005周接輪臺(tái)灣新竹S204006鞏小妹香港龍灣S203007鞏大妹香港龍灣S203008張明敏北京順義S202009矛十八四川棉陽(yáng)S204010羅林光陜西臨潼S202011司馬坡新疆喀什S201SELECT*FROMStudentsWHERE所在班級(jí)
='S202'S202陜西臨潼羅林光010…S202湖北宜昌李菲002S202北京順義張明敏008編寫查詢語(yǔ)句之前…查詢語(yǔ)句格式:SELECT<列名>FROM<表名>[WHERE
<查詢條件表達(dá)式>][ORDERBY<排序的列名>[ASC或DESC]]
列名稱SELECT
SCode,SName,SAddress
表名FROMStudents過(guò)濾條件WHERE
SSEX='男'排序條件ORDERBY
Sid實(shí)例:SELECT
SCode,SName,SAddress
FROM StudentsWHERE SSEX='男‘ORDERBY Sid數(shù)據(jù)查詢-基礎(chǔ)1、查詢?nèi)康男泻土袑?shí)例:SELECT*FROMStudents
2、查詢部分行即條件查詢和篩選列實(shí)例:SELECT
Sid,SName,SAddress
FROMStudentsWHERE
SAddress=‘河南許昌'實(shí)例:SELECT
Sid,SName,SAddress
FROMStudentsWHERE
SAddress<>‘河南許昌'數(shù)據(jù)查詢-列名3、使用AS來(lái)命名列實(shí)例:SELECTSid
AS
學(xué)員編號(hào),SName
AS
學(xué)員姓名,Saddress
AS
學(xué)員地址
FROMStudentsWHERE
SAddress<>‘河南許昌'數(shù)據(jù)查詢-列名3.1、計(jì)算、合并得到新列的列名實(shí)例:SELECTFirstName
+'.'
+LastName
AS
'姓名'
FROMEmployees3.2、使用“列”=來(lái)重新命名列實(shí)例:SELECT'姓名'
=
FirstName+'.'+LastName
FROMEmployees注意:1.+連接的數(shù)據(jù)類型必須兼容2.如果+連接字符型數(shù)據(jù),結(jié)果為字符串?dāng)?shù)據(jù)的連接3.如果+連接數(shù)值型數(shù)據(jù),結(jié)果為數(shù)值的和提問(wèn):SELECT姓名
=
FirstName+'.'+LastName
FROMEmployees數(shù)據(jù)查詢-空行、常量列4、查詢空行實(shí)例:SELECT
SName
FROMStudentsWHERE
SEmail
ISNULL5、使用常量列實(shí)例:SELECT姓名=SName,地址=SAddress,'許昌職業(yè)技術(shù)學(xué)院'AS學(xué)校名稱FROMStudents實(shí)例:SELECT
SName
FROMStudentsWHERE
SEmail
ISNOTNULL數(shù)據(jù)查詢-限制行數(shù)6.1、查詢返回限制固定行數(shù)實(shí)例:SELECTTOP5
SName,SAddressFROMStudentsWHERESSex='女'6.2、查詢返回百分之多少行實(shí)例:SELECTTOP20PERCENT
SName,SAddressFROMStudentsWHERESSex='女'數(shù)據(jù)查詢-排序7.1、升序排列實(shí)例:SELECTSIDAS學(xué)員編號(hào),(Score*0.9+5)AS綜合成績(jī)FROMScoreWHERE(Score*0.9+5)>60ORDERBYScore7.2、降序排列實(shí)例:查詢Pubs數(shù)據(jù)庫(kù)中的作者表和雇員表,然后合并查到的所有姓名信息,然后按照姓名降序排列SELECTAu_Lname+'.'+Au_fNameASEMPFROMAuthorsUnionSELECTfName+'.'+LNameASEMPFROMEmployeeORDERBYEMPDESC數(shù)據(jù)查詢-排序7.3、按多列排序?qū)嵗篠ELECTSIDAS
學(xué)員編號(hào),ScoreAS
成績(jī)FROMScoreWHEREScore>60ORDERBYScore,CID排序中的字段,可以使用表達(dá)式嗎?——如果不可以,請(qǐng)說(shuō)明原因——如果可以,請(qǐng)舉例說(shuō)明小結(jié)1
編寫SQL語(yǔ)句:
1、查詢河南的男同學(xué)
2、查詢考試成績(jī)前五名的分?jǐn)?shù)案例分析1—要求在數(shù)據(jù)庫(kù)表中有以下字符數(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)在希望通過(guò)SQL語(yǔ)句進(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ù)庫(kù)表名:SellRecord字段名:ListNumber案例分析2—分析查詢語(yǔ)句:使用SELECT語(yǔ)句排序:ORDERBY在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參考答案:SELECT
ListNumberFROM
SellRecordORDERBY
Convert(int,Left(ListNumber,CharIndex('-',ListNumber)-1)),Convert(int,Stuff(ListNumber,1,Charindex('-',ListNumber),''))回顧代碼改錯(cuò):
SELECTSid,SName,SAddress
FROMStudents ORDERBYSid WHERESSEX='男'查詢?nèi)康哪型瑢W(xué)的SQL語(yǔ)句怎么寫?
SELECT*FROMStudentsWHERESSEX='男'查詢班上考試成績(jī)前三名的成績(jī)的SQL語(yǔ)句怎么寫?
SELECTTOP3Sid,scoreFROMscoreORDERBYscoreDESC如何使用SQL語(yǔ)句得到50天以前的日期信息?SELECTDATEADD(dd,-50,GETDATE())SELECTSid,SName,SAddressFROMStudentsWHERESSEX='男'ORDERBYsid模糊查詢1—LIKE查詢時(shí),字段中的內(nèi)容并不一定與查詢內(nèi)容完全匹配,只要字段中含有這些內(nèi)容SELECT
SName
AS
姓名FROMStudentsWHERE
SName
LIKE'張%'姓名張果老張飛張揚(yáng)出去思考:以下的SQL語(yǔ)句:SELECT*FROM數(shù)據(jù)表WHERE編號(hào)LIKE'00[^8]%[A-C]%‘可能會(huì)查詢出的編號(hào)值為()。A、9890ACDB、007_AFFC、008&DCGD、KK8C模糊查詢—ISNULL把某一字段中內(nèi)容為空的記錄查詢出來(lái)SELECT
SName
AS姓名,SAddress
AS地址FROMStudentsWHERE
SAddress
ISNULL姓名地址張果老NULL李尋歡NULL令狐沖NULL程靈素NULL……猜一猜:把Students表中某些行的SAddress字段值刪掉后:——使用ISNULL能查詢出來(lái)這些數(shù)據(jù)行嗎?——怎么查詢出這些行來(lái)?
SELECTSName
姓名,SAddress
地址
FROMStudentsWHERE
SAddress=''模糊查詢2—BETWEEN把某一字段中內(nèi)容在特定范圍內(nèi)的記錄查詢出來(lái)SELECTSID,ScoreFROMSCore
WHEREScoreBETWEEN60AND80StudentIDScore77786111761764……SELECT*FROMSalesWHEREord_dateNOTBETWEEN'1992-8-1'AND'1993-8-1'模糊查詢3—IN把某一字段中內(nèi)容與所列出的查詢內(nèi)容列表匹配的記錄查詢出來(lái)SELECTSName
AS
學(xué)員姓名,SAddress
As地址FROMStudentsWHERE
SAddress
IN('北京','廣州','上海')學(xué)員姓名地址李揚(yáng)廣州于紫電上海李青霜北京司馬弓上?!瓎?wèn)題成績(jī)表中存儲(chǔ)了所有學(xué)員的成績(jī),想知道:學(xué)員的總成績(jī)、平均成績(jī)、有成績(jī)的學(xué)員總共有多少名?怎么辦?聚合函數(shù)聚合函數(shù)-11、SUM函數(shù):
SUM返回表達(dá)式中所有數(shù)值的總和,只能用于數(shù)字
類型的列,不能夠匯總字符、日期等其它數(shù)值類型。實(shí)例:SELECTSUM(score)as總成績(jī)
FROMscoreWHEREsid=9SELECTSUM(score),sid
FROMscoreWHEREsid=9代碼錯(cuò)誤這種查詢只返回一個(gè)數(shù)值,因此,不能夠直接與返回多行的列一起使用來(lái)進(jìn)行查詢。聚合函數(shù)-12、AVG函數(shù):返回表達(dá)式中所有數(shù)值的平均值,AVG只能用于數(shù)字
型的數(shù)據(jù)列。實(shí)例:SELECTAVG(SCore)AS平均成績(jī)FROMScoreWHERESid=70聚合函數(shù)-23、MAX和MIN函數(shù):分別返回表達(dá)式中的最大值、最小值。它們都可
以用于數(shù)字型、字符型以及日期時(shí)間類型的列。實(shí)例:SELECT
AVG(SCore)平均成績(jī),MAX
(Score)最高分,MIN
(Score)最低分
FROM
ScoreWHERESid>=70聚合函數(shù)-24、COUNT函數(shù):返回表達(dá)式中非空值的計(jì)數(shù),可以用于數(shù)字和字符類
型的列。可以使用星號(hào)(*)作為COUNT函數(shù)的表達(dá)式,使用星號(hào)
可以不必指定特定的列而計(jì)算所有的行數(shù)。實(shí)例:SELECTCOUNT
(*)AS及格人數(shù)FROMScoreWHEREScore>=60
ANDcID=3問(wèn)題如果不是統(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查詢—GROUPBY實(shí)例:SELECT
CID,AVG(Score)AS課程平均成績(jī)FROMScoreGROUPBYCID分組查詢—思考SELECT
SID,CID,AVG(Score)AS課程平均成績(jī)FROMScoreGROUPBY
CID思考:執(zhí)行以下的T-SQL:——
結(jié)果如何?代碼錯(cuò)誤注意:在使用GROUPBY關(guān)鍵字時(shí),SELECT列表中指定的項(xiàng)目中僅允許以下幾項(xiàng):被分組的列。為每個(gè)分組返回一個(gè)值的表達(dá)式。分組查詢—多列分組怎么樣來(lái)統(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è)來(lái)進(jìn)行分組,避免StudentID和CourseID
同時(shí)一樣分組查詢—多列分組SELECTSIDAS學(xué)員編號(hào),CIDAS課程編號(hào),AVG(Score)AS考試平均成績(jī)FROMScoreGROUPBYSID,CID分組查詢—問(wèn)題在以上統(tǒng)計(jì)內(nèi)部測(cè)試成績(jī)的基礎(chǔ)上,如果只想看補(bǔ)考的學(xué)員的成績(jī),怎么辦?對(duì)分組后的條件篩選必須使用HAVING子句實(shí)例:SELECTcIDAS課程編號(hào),AVG(Score)AS平均成績(jī)
FROMScoreGROUPBYcIDHAVINGAVG(Score)>80分組查詢—再看看增加條件:要求該學(xué)員的CID在分組內(nèi)出現(xiàn)過(guò)一次以上……SELECTSIDAS學(xué)員編號(hào),CIDAS課程編號(hào),AVG(Score)AS考試平均成績(jī)FROMScoreGROUPBYSID,CID分組查詢—HAVINGSELECT
StudentIDAS學(xué)員編號(hào),CourseIDAS內(nèi)部測(cè)試,AVG(Score)AS內(nèi)部測(cè)試平均成績(jī)FROMScoreGROUPBYStudentID,CourseIDHAVINGCOUNT(Score)
>
1分組查詢—對(duì)比WHEREGROUPBYHAVINGWHERE子句:從數(shù)據(jù)源中去掉不符合其搜索條件的數(shù)據(jù)GROUPBY子句:搜集數(shù)據(jù)行到各個(gè)組中,統(tǒng)計(jì)函數(shù)為各個(gè)組計(jì)算統(tǒng)計(jì)值HAVING子句:去掉不符合其組搜索條件的各組數(shù)據(jù)行分組查詢—思考SELECTcID
課程編號(hào),count(*)人數(shù)FROMscoreWHEREscore<60GROUPBYcID
HAVINGCOUNT(*)>1思考:分析以下T-SQL的含義按照課程編號(hào)分組統(tǒng)計(jì),要查詢“有考試不及格學(xué)生的科目及不及格的人數(shù)”小結(jié)1以下的查詢語(yǔ)句:
SELECT*FROMA將得到以下的查詢結(jié)果:A1 B1 C11001 P1 701002 P2 601001 P1 1001002 P1 801002 P2 90那么,以下的查詢語(yǔ)句將輸出哪些信息?
SELECTA1,B1,MAX(C1)FROMA多表聯(lián)結(jié)查詢—問(wèn)題學(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é)查詢多表聯(lián)接查詢—分類內(nèi)聯(lián)接(INNERJOIN)外聯(lián)接——左外聯(lián)接(LEFTJOIN)——右外聯(lián)接(RIGHTJOIN)——完整外聯(lián)接(FULLJOIN)交叉聯(lián)接(CROSSJOIN)多表聯(lián)接查詢—分類1、內(nèi)聯(lián)接(INNERJOIN)內(nèi)聯(lián)接是最典型的、最常用的聯(lián)接查詢,它根據(jù)表中共同的列來(lái)進(jìn)行匹配,特別是兩個(gè)表存在主外鍵關(guān)系時(shí)通常會(huì)用到內(nèi)聯(lián)接查詢。內(nèi)聯(lián)接查詢通常會(huì)使用到“=”或“!=”之類的比較運(yùn)算符來(lái)判斷兩列是否相等多表聯(lián)接查詢—分類2.1、左外聯(lián)接(LEFTJOIN或LEFTOUTERJOIN)左外聯(lián)接的結(jié)果集包括LEFTOUTER指定的左表的所有行,而不僅僅是聯(lián)接列所匹配的行。如果左表中的行在右表中沒(méi)有匹配的行,則在相關(guān)聯(lián)的結(jié)果集行中右表的所有選擇列均為空值。多表聯(lián)接查詢—分類2.2、右外聯(lián)接(RIGHTJOIN或RIGHTOUTERJOIN)右外聯(lián)接是左外聯(lián)接的反向聯(lián)接,將返回右表的所有行,如果右表的某行在左表中沒(méi)有匹配的行,則將為左表返回空值。多表聯(lián)接查詢—分類2.3、完全外聯(lián)接(FULLJOIN或者FULLOUTERJOIN)完全外聯(lián)接則返回左表和右表中所有行,當(dāng)某行在另外一個(gè)表中沒(méi)有匹配的行時(shí),則另外一個(gè)表的選擇列包含空值,如果表之間有匹配行則整個(gè)結(jié)果集包含基表的數(shù)據(jù)值。SELECT
S.SName,C.CourseID,C.Score
FROM
ScoreASCINNERJOIN
StudentsASSON
C.StudentID=S.SCodeScoreStudentsIDCourseIDScore122300100100200297896776300381猜一猜:這樣寫,返回的查詢結(jié)果是一樣的嗎?SELECT
S.SName,C.CID,C.Score
FROM
StudentsASSINNERJOIN
ScoreASCON
C.SID=S.Sid再猜一猜:以下返回多少行?SELECT
S.SName,C.CID,C.Score
FROM
StudentsASSINNERJOIN
ScoreASCON
C.SID<>
S.sid多表聯(lián)接查詢—內(nèi)聯(lián)接-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)接查詢—內(nèi)聯(lián)接-2SELECT
Students.SName,Score.CID,Score.ScoreFROM
Students,ScoreWHERE
Students.Sid=Score.SIDSELECT
s.sName,sc.cID,sc.ScoreFROM StudentsASsINNERJOINScoreASscON
s.sID=sc.sID多表聯(lián)接查詢—三表聯(lián)接SELECT
S.sNameAS姓名,C.cNameAS課程,SC.ScoreAS成績(jī)FROMStudentsASSJOINScoreASSCON(S.sID=SC.sID)JOINCourseASCON(SC.cID=C.cID)SELECTS.sNameAS姓名,C.cNameAS課程,SC.ScoreAS成績(jī)FROMStudentsS,ScoreSC,CourseCWHERES.sID=SC.sIDANDSC.cID=C.cIDScoreStudentsIDCourseIDScore122300100100200297896776300381多表聯(lián)接查詢—左外聯(lián)接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)接查詢—左外聯(lián)接SELECT
S.sName,SC.cID,SC.Score
FROM StudentsASS
LEFTJOINScoreASSCON SC.SID=S.SID多表聯(lián)接查詢—右外聯(lián)接實(shí)例:SELECT
Titles.Title_id,Titles.Title,Publishers.Pub_nameFROMtitlesRIGHTOUTERJOINPublishersON
Titles.Pub_id=Publishers.Pub_id1、分組查詢主要解決什么問(wèn)題?2、多表聯(lián)接主要解決什么問(wèn)題?用在什么場(chǎng)合?子查詢問(wèn)題:在學(xué)生信息表(students)和學(xué)生成績(jī)表(score)中查看家庭住址與“趙紅軍”一樣的學(xué)生,要求顯示這些學(xué)生的信息。實(shí)現(xiàn)步驟:第一步:求出“趙紅軍”的家庭住址。第二步:利用WHERE語(yǔ)句篩選家庭住址與“趙紅軍”一樣的學(xué)生。子查詢SELECTsaddressFROMstudentsWHEREsName='趙紅軍'SELECT*FROMstudentsWHEREsAddress='河南許昌'SELECT*FROMstudentsWHEREsAddress=(SELECTsAddressFROMstudentsWHEREsName='趙紅軍')父查詢子查詢提示:將子查詢和比較運(yùn)算符聯(lián)合使用,必須保證子查詢返回的值不能多于一個(gè)SQLServer中的函數(shù)字符串函數(shù)日期函數(shù)數(shù)學(xué)函數(shù)系統(tǒng)函數(shù)字符串函數(shù)SELECTSTUFF('ABCDEFG',2,3,'我的音樂(lè)我的世界')返回:A我的音樂(lè)我的世界EFG在一個(gè)字符串中,刪除指定長(zhǎng)度的字符,并在該位置插入一個(gè)新的字符串STUFFSELECTCHARINDEX('ACCP','My
AccpCourse',1)返回:4用來(lái)尋找一個(gè)指定的字符串在另一個(gè)字符串中的起始位置CHARINDEX舉例描述函數(shù)名SELECTLEN('SQLServer課程')返回:12返回傳遞給它的字符串長(zhǎng)度LENSELECTLOWER('SQLServer課程')返回:sqlserver課程把傳遞給它的字符串轉(zhuǎn)換為小寫LOWERSELECTUPPER('sqlserver課程')返回:SQLSERVER課程把傳遞給它的字符串轉(zhuǎn)換為大寫UPPERSELECTLTRIM('周智宇')返回:周智宇(后面的空格保留)清除字符左邊的空格LTRIMSELECTRTRIM('周智宇')返回:周智宇(前面的空格保留)清除字符右邊的空格RTRIMSELECTRIGHT('買賣提.吐?tīng)査?,3)返回:吐?tīng)査蓮淖址疫叿祷刂付〝?shù)目的字符RIGHTSELECTREPLACE('莫樂(lè)可切.楊可','可','蘭')返回:莫樂(lè)蘭切.楊蘭替換一個(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ù)學(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ù)庫(kù)中返回“dbo”從給定的用戶ID返回用戶名USER_NAMESELECTCONVERT(VARCHAR(5),12345)返回:字符串12345用來(lái)轉(zhuǎn)變數(shù)據(jù)類型CONVERT舉例描述函數(shù)名SELECTCURRENT_USER返回:你登錄的用戶名返回當(dāng)前用戶的名字CURRENT_USERSELECTDATALENGTH('中國(guó)A盟')返回:7返回用于指定表達(dá)式的字節(jié)數(shù)DATALENGTHSELECTHOST_NAME()返回:你所登錄的計(jì)算機(jī)的名字返回當(dāng)前用戶所登錄的計(jì)算機(jī)名字HOST_NAMESELECTSYSTEM_USER返回:你當(dāng)前所登錄的用戶名返回當(dāng)前所登錄的用戶名稱SYSTEM_USER案例分析1—要求某公司印了一批充值卡,卡的密碼是隨機(jī)生成的,現(xiàn)在出現(xiàn)這個(gè)問(wèn)題:
卡里面的“O和0”(哦和零)“i和1”(哎和一),用戶反映說(shuō)看不清楚,公司決定,把存儲(chǔ)在數(shù)據(jù)庫(kù)中的密碼中所有的“哦”都改成“零”,把所有的“i”都改成“1”; 請(qǐng)編寫SQL語(yǔ)句實(shí)現(xiàn)以上要求;數(shù)據(jù)庫(kù)表名:Card密碼字段名:PassWord子查詢SELECTsID,ScoreFROMscore,courseWHEREscore.cID=course.cIDANDcName=‘?dāng)?shù)據(jù)庫(kù)'SELECTsID,ScoreFROMscoreasSCINNERJOINcourseasCONSC.cID=C.cIDWHEREcName=‘?dāng)?shù)據(jù)庫(kù)'SELECTsID,scoreFROMscoreWHEREcID=(SELECTcIDFROMcourseWHEREcName=‘?dāng)?shù)據(jù)庫(kù)')IN和NOTIN子查詢SELECTDISTINCTsNameFROMstudentsASSJOINscoreASSCONS.sID=SC.sIDSELECTDISTINCTsNameFROMstudentsWHEREsIDIN(SELECTsIDFROMscore)SELECTsNameFROMstudentsWHEREsIDNOTI
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 分期購(gòu)車銀行合同范本
- 兼職廚師勞務(wù)合同范本
- 代理建賬合同范本
- 入職各種合同范本
- 2025年湖南a2貨運(yùn)從業(yè)資格證考試
- 介紹客戶返利合同范本
- 農(nóng)村住房建筑合同范本
- 勞務(wù)合同范本英文
- 農(nóng)田托管合同范本
- 凍庫(kù)修理合同范本
- 部編版小學(xué)三年級(jí)語(yǔ)文下冊(cè)作文教學(xué)計(jì)劃
- 中學(xué)生勞動(dòng)安全課件
- 辦公樓維修改造施工方案
- 老年髖部骨折治療指南
- 2024年度教育軟件采購(gòu)合同
- 中華護(hù)理學(xué)會(huì)團(tuán)體標(biāo)準(zhǔn)測(cè)試題庫(kù)含答案
- 防暴隊(duì)形演練和講解
- 2024年醫(yī)療器械經(jīng)營(yíng)質(zhì)量管理規(guī)范培訓(xùn)課件
- 廣電和通信設(shè)備電子裝接工(高級(jí)工)理論考試復(fù)習(xí)題庫(kù)(含答案)
- 2024年河南住戶調(diào)查業(yè)務(wù)題庫(kù)
- 中小企業(yè)(民營(yíng)企業(yè))ESG星級(jí)評(píng)價(jià)
評(píng)論
0/150
提交評(píng)論