第五章數(shù)據(jù)查詢與更新詳解演示文稿_第1頁
第五章數(shù)據(jù)查詢與更新詳解演示文稿_第2頁
第五章數(shù)據(jù)查詢與更新詳解演示文稿_第3頁
第五章數(shù)據(jù)查詢與更新詳解演示文稿_第4頁
第五章數(shù)據(jù)查詢與更新詳解演示文稿_第5頁
已閱讀5頁,還剩69頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第五章數(shù)據(jù)查詢與更新詳解演示文稿當(dāng)前1頁,總共74頁。優(yōu)選第五章數(shù)據(jù)查詢與更新當(dāng)前2頁,總共74頁。5.1.1SELECT和FROM子句1、指定返回列名【例5.1】返回XS表中所有的記錄的XH(學(xué)號(hào))、XM(姓名)、CSRQ(出生日期)列。SELECTXH,XM,CSRQFROMXS當(dāng)前3頁,總共74頁。5.1.1SELECT和FROM子句

2、返回所有列 SELECT* FROMXS當(dāng)前4頁,總共74頁。5.1.1SELECT和FROM子句3、在SELECT子句后加入計(jì)算列(1)SELECTXH,XM+'('+XB+')',CSRQ FROMXS(2)SELECTXH,XM,GETDATE(),10, CSRQ FROMXS當(dāng)前5頁,總共74頁。5.1.2列別名和表別名1、原始列名AS別名。SELECTXHAS學(xué)號(hào),XM+'('+XB+')'AS姓名性別,CSRQAS出生日期FROMXS當(dāng)前6頁,總共74頁。5.1.2列別名和表別名2、原始列名別名 SELECTXH學(xué)號(hào),XM姓名,CSRQ出生日期 FROMXS3、別名=原始列名 SELECT學(xué)號(hào)=XH,姓名=XM,出生日期=CSRQ FROMXS當(dāng)前7頁,總共74頁。5.1.2列別名和表別名表別名:1、“始表名AS別名”SELECTXH,XM,CSRQFROMXSa

2、“原始表名別名”SELECTXH,XM,CSRQFROMXSASa當(dāng)前8頁,總共74頁。5.1.3WHERE子句例:從XS表中查找姓名為“曹敏”的同學(xué)的學(xué)號(hào),姓名,性別。SELECTXH,XM,XBFROMXSWHEREXM='曹敏'當(dāng)前9頁,總共74頁。5.1.3WHERE子句NULL值參與的比較: 當(dāng)字段未設(shè)置值或變量未設(shè)值時(shí),其值為NULL,即不包含任何值(1)、當(dāng)ANSI_NULLS為OFF時(shí)(默認(rèn)),任何與NULL值的運(yùn)算結(jié)果都為NULL,任何與NULL的比較結(jié)果都為UNKNOW(不確定)。(2)當(dāng)ANSI_NULLS為ON時(shí),除了=和!=或者<>比較運(yùn)算符外,其他比較運(yùn)算符和NULL比較也會(huì)得到UNKNOWN值。當(dāng)前10頁,總共74頁。5.1.3WHERE子句例1:SELECT*FROMXSWHERESFZ=NULLORSFZ!=NULL結(jié)果:空例2:SELECT*FROMXSWHERESFZisNULL當(dāng)前11頁,總共74頁。5.1.3WHERE子句例3:SETANSI_NULLSOFFSELECT*FROMXSWHERESFZ=NULL當(dāng)前12頁,總共74頁。5.1.4ORDERBY子句1、單個(gè)字段排序SELECT*FROMXSORDERBYXH--按學(xué)號(hào)進(jìn)行排序NULL排最前面當(dāng)前13頁,總共74頁。5.1.4ORDERBY子句2、多字段排序ORDERBY后面可以指定多個(gè)排序字段,字段之間以“,”分隔。在指定了多列情況下,首先按第一列排序,在第一列相同的情況下按第二列排序,以此類推。當(dāng)前14頁,總共74頁。5.1.4ORDERBY子句例: SELECTXH,XM,XB,DATEDIFF(DAY,CSRQ,GETDATE())/365ASNLFROMXSORDERBYXM,NL注意:漢字按拼音首字母排序此處有空格當(dāng)前15頁,總共74頁。5.1.4ORDERBY子句降序排序:如果沒有特別說明,值是以升序序列進(jìn)行排序的。你也可以選擇使用ASC關(guān)鍵字指定升序排序。如果你希望以降序排列,則在ORDERBY后面使用DESC關(guān)鍵字。例:SELECT*FROMXSORDERBYCSRQDESC

當(dāng)前16頁,總共74頁。5.1.5TOP子句TOP子句用來返回排在前面特定數(shù)量的記錄,而不管符合條件的行是多少。有兩種方式用來指定返回的行:指定排在前面的絕對(duì)記錄數(shù),如:SELECTTOP(5)*FROMXSORDERBYCSRQDESC指定排在前面的記錄數(shù)占總行數(shù)的百分比SELECTTOP(0.1)PERCENT*FROMXSORDERBYCSRQDESC當(dāng)前17頁,總共74頁。5.1.5TOP子句WITHTIES子句 WITHTIES子句用來解決在使用TOP子句按百分比返回后,與最后一名數(shù)據(jù)相同的記錄不能出現(xiàn)在結(jié)果集中的問題。例:SELECTTOP(5)WITHTIES*FROMXSORDERBYCSRQDESC當(dāng)前18頁,總共74頁。5.1.6DISTINCT關(guān)鍵字DISTINCT用來從結(jié)果集中去除重復(fù)的記錄。例:統(tǒng)計(jì)學(xué)生共來自于哪些民族。語句1:SELCETMZFROMXS語句2:SELCETDISTINCTMZFROMXS當(dāng)前19頁,總共74頁。5.2分組查詢5.2.1聚合函數(shù) 特點(diǎn):作用在多條記錄上。換句話說,函數(shù)的返回值建立在對(duì)多條記錄進(jìn)行統(tǒng)計(jì)的基礎(chǔ)上。 常用聚合函數(shù): SUM,COUNT,MAX,MIN,AVG1、計(jì)算總分SELECTSUM(FS)FROMCJWHEREXQDM=21ANDXSDM=20當(dāng)前20頁,總共74頁。5.2.1聚合函數(shù)2、計(jì)算最高分、最低分和平均分:

SELECTMAX(FS)最高分,MIN(FS)最低分,AVG(FS)平均分 FROMCJ WHEREXQDM=5ANDXSDM=163483、統(tǒng)計(jì)班級(jí)人數(shù)SELECTCOUNT(*)FROMXSWHEREBJDM=30當(dāng)前21頁,總共74頁。5.2.2GROUPBY子句GROUPBY子句將查詢結(jié)果按某一列或多列值分組輸出,值相等的為一組。對(duì)查詢結(jié)果分組的目的是使集函數(shù)作用于每一個(gè)組,即每一個(gè)組都有一個(gè)函數(shù)值。當(dāng)前22頁,總共74頁。5.2.2GROUPBY子句例:查詢每個(gè)同學(xué)的最高分、最低分和平均分。SELECTXSDM,MAX(FS)最高分,MIN(FS)最低分,AVG(FS)平均分FROMCJGROUPBYXSDM當(dāng)前23頁,總共74頁。5.2.2GROUPBY子句例:每個(gè)同學(xué)在不同學(xué)期的最高分、最低分、平均分:SELECTXSDM,XQDM,MAX(FS)最高分,MIN(FS)最低分,AVG(FS)平均分FROMCJGROUPBYXSDM,XQDM當(dāng)前24頁,總共74頁。5.2.2GROUPBY子句注意:出現(xiàn)在GROUPBY子句后面的字段列表應(yīng)該也出現(xiàn)在SELECT子句中,否則獲得的數(shù)據(jù)可能沒有意義。如:SELECTMAX(FS)最高分,MIN(FS)最低分,AVG(FS)平均分FROMCJGROUPBYXSDM上述語句執(zhí)行后的結(jié)果集中你將無法確定成績屬于哪位學(xué)生當(dāng)前25頁,總共74頁。5.2.2GROUPBY子句出現(xiàn)在SELECT子句中的字段列表除了聚合函數(shù)外,都必須出現(xiàn)在GROUPBY子句后面。例如,下面的語句將會(huì)報(bào)錯(cuò):SELECTXSDM,XQDM,MAX(FS)最高分,MIN(FS)最低分,AVG(FS)平均分FROMCJGROUPBYXSDM當(dāng)前26頁,總共74頁。5.2.3HAVING子句HAVING子句用來對(duì)分組后的數(shù)據(jù)進(jìn)行篩選例:查詢平均成績大于65分的學(xué)生的最高分、最低分和平均成績。SELECTXSDM,MAX(FS)最高分,MIN(FS)最低分,AVG(FS)平均分FROMCJGROUPBYXSDMHAVINGAVG(FS)>65當(dāng)前27頁,總共74頁。5.2.3HAVING子句HAVING子句和WHERE子句很相似,均用于設(shè)置數(shù)據(jù)篩選條件。WHERE子句對(duì)分組前的數(shù)據(jù)進(jìn)行篩選,條件中不能包含聚合函數(shù);HAVING子句對(duì)分組過后的數(shù)據(jù)進(jìn)行篩選,條件中經(jīng)常包含聚合函數(shù)。HAVING子句必須和GROUPBY子句聯(lián)合使用當(dāng)前28頁,總共74頁。5.3聯(lián)接查詢當(dāng)返回的數(shù)據(jù)集中需要包含位于多個(gè)表中的數(shù)據(jù)時(shí),需要用到聯(lián)接查詢。及聯(lián)接查詢用于在一個(gè)查詢語句中同時(shí)返回多個(gè)表中的數(shù)據(jù)當(dāng)前29頁,總共74頁。5.3.1交叉聯(lián)接(CROSSJOIN)交叉聯(lián)接返回兩個(gè)表的笛卡爾積。即:返回的數(shù)據(jù)集為一個(gè)表中的每一行與另一個(gè)表中每一行的組合。例:簡單交叉聯(lián)接SELECT*FROMKCCROSSJOINXQ返回的記錄數(shù)量為兩個(gè)表記錄數(shù)的乘積上面語句可以省略CROSSJOIN關(guān)鍵字,用“,”將兩個(gè)表連接起來,即:SELECT*FROMKC,XQ該返回結(jié)果和交叉聯(lián)接是基本是一致的,只是沒有重復(fù)的字段。當(dāng)前30頁,總共74頁。5.3.2內(nèi)聯(lián)接(INNERJOIN)內(nèi)聯(lián)接是聯(lián)接兩個(gè)表最常用的方法,使用比較運(yùn)算符進(jìn)行表間某(些)列數(shù)據(jù)的比較操作,并列出這些表中與聯(lián)接條件相匹配的數(shù)據(jù)行。內(nèi)聯(lián)接可以理解為從兩個(gè)表的笛卡爾積中篩選出完全符合聯(lián)接條件的記錄例:顯示成績表中的所有數(shù)據(jù),要求包含學(xué)生學(xué)號(hào)和姓名。SELECTXS.XH學(xué)號(hào),XS.XM姓名,KCDM課程代碼,FS分?jǐn)?shù),CJ.XSDM,XS.XSDMFROMXSINNERJOINCJONCJ.XSDM=XS.XSDM當(dāng)前31頁,總共74頁。5.3.3外聯(lián)接外聯(lián)接分為三種:左外聯(lián)接(LEFTOUTERJOIN或LEFTJOIN)右外聯(lián)接(RIGHTOUTERJOIN或RIGHTJOIN)全外聯(lián)接(FULLOUTERJOIN或FULLJOIN)與內(nèi)聯(lián)接不同,外聯(lián)接不僅列出與聯(lián)接條件相匹配的行,還會(huì)顯示左表(左外聯(lián)接時(shí))、右表(右外聯(lián)接時(shí))或兩個(gè)表(全外聯(lián)接時(shí))中所有符合搜索條件的記錄。當(dāng)前32頁,總共74頁。5.3.3外聯(lián)接1、左外聯(lián)接 左邊表中的行都會(huì)出現(xiàn)在結(jié)果數(shù)據(jù)集中,如果左邊表中的某一行在右邊表中沒有匹配的行(不滿足聯(lián)接條件),則以空值取代右邊表中的值。例:查看每個(gè)專業(yè)有哪些班級(jí)。使用外聯(lián)接:SELECTa.ZYDM,a.ZYMC,b.BJDM,b.ZYDMASExpr1,b.BJMCFROMZYASaLEFTJOINBJASbONa.ZYDM=b.ZYDM使用內(nèi)聯(lián)接:SELECTa.ZYDM,a.ZYMC,b.BJDM,b.ZYDMASExpr1,b.BJMCFROMZYASaJOINBJASbONa.ZYDM=b.ZYDM當(dāng)前33頁,總共74頁。5.3.3外聯(lián)接2、右外聯(lián)接 右外聯(lián)接和左外聯(lián)接類似,不同的是把右邊的表作為外部表(所有右邊表中的行包含在結(jié)果數(shù)據(jù)集中)。例:查看每個(gè)專業(yè)有哪些班級(jí)。SELECTa.ZYDM,a.ZYMC,b.BJDM,b.ZYDMASExpr1,b.BJMCFROMZYASaRIGHTJOINBJASbONa.ZYDM=b.ZYDM當(dāng)前34頁,總共74頁。5.3.3外聯(lián)接3、全外聯(lián)接在全外聯(lián)接中,位于FULLJOIN兩邊的表中的行都會(huì)包含在結(jié)果數(shù)據(jù)集中。當(dāng)前35頁,總共74頁。5.3.4自聯(lián)接列名說明YGDM員工代碼YGXM員工姓名SJLD該員工上級(jí)領(lǐng)導(dǎo)代碼員工表自聯(lián)接所聯(lián)接的兩個(gè)表在物理上為同一張表,但在邏輯上可看作兩個(gè)表,用不同的表別名加以區(qū)分當(dāng)前36頁,總共74頁。5.3.4自聯(lián)接例:查詢每位員工上級(jí)領(lǐng)導(dǎo)SELECTA.*,B.YGXMFROMYGALEFTJOINYGBONA.SJLD=B.YGDM當(dāng)前37頁,總共74頁。5.3.5多表聯(lián)接例:顯示學(xué)生信息,包括學(xué)生所在班級(jí)名稱、專業(yè)名稱和和系部名稱SELECTXB.XBMC,ZY.ZYMC,BJ.BJMC,XS.*FROMXSINNERJOINBJONBJ.BJDM=XS.BJDMINNERJOINZYONBJ.ZYDM=ZY.ZYDMINNERJOINXBONZY.XBDM=XB.XBDM當(dāng)前38頁,總共74頁。5.4子查詢有兩種子查詢類型:標(biāo)準(zhǔn)子查詢和相關(guān)子查詢。標(biāo)準(zhǔn)子查詢執(zhí)行一次,結(jié)果反饋給外層查詢,它的返回值跟其外層查詢沒有聯(lián)系(不相關(guān))。相關(guān)子查詢?cè)谧硬樵冎幸昧送鈱硬樵冎械谋恚虼怂膱?zhí)行次數(shù)取決于其外層查詢的查詢次數(shù)。當(dāng)前39頁,總共74頁。5.4.1標(biāo)準(zhǔn)子查詢與相關(guān)子查詢1、標(biāo)準(zhǔn)子查詢例:查詢與學(xué)號(hào)為“0630160219”的同學(xué)同班的學(xué)生信息。步驟1:我們先求這個(gè)同學(xué)所在班級(jí)的班級(jí)代碼:SELECTBJDMFROMXSWHEREXH='0630160219‘步驟2:面語句查詢結(jié)果為23。從XS表中查詢BJDM為23的學(xué)生信息:SELECT*FROMXSWHEREBJDM=23當(dāng)前40頁,總共74頁。5.4.1標(biāo)準(zhǔn)子查詢與相關(guān)子查詢步驟3:將前兩個(gè)語句整合:SELECT*FROMXSWHEREBJDM=(SELECTBJDMFROMXSWHEREXH='0630160219')注意事項(xiàng):1、必須用“(”和“)”將子查詢擴(kuò)起來。2、處于比較運(yùn)算符其中一邊的子查詢,其返回值應(yīng)該只能有一行、一列,其返回值的數(shù)據(jù)類型應(yīng)該和運(yùn)算符另一邊的值(列)是一致或可以被系統(tǒng)自動(dòng)轉(zhuǎn)換的。3、子查詢中不能檢索包含數(shù)據(jù)類型為text和image的列。當(dāng)前41頁,總共74頁。5.4.1標(biāo)準(zhǔn)子查詢與相關(guān)子查詢2、相關(guān)子查詢例:查詢存在同名的學(xué)生信息1):語句基本形式:

SELECT*FROMXSWHERE該同學(xué)存在同名 2)判斷指定學(xué)生是否重名: (SELECTCOUNT(*)FROMXSWHEREXM='XXX')>1 3)將2)代入1),并給xs表別名SELECT*FROMXSaWHERE((SELECTCOUNT(*)FROMXSb WHERE(b.XM='XXX'))>1)當(dāng)前42頁,總共74頁。5.4.1標(biāo)準(zhǔn)子查詢與相關(guān)子查詢 4)將指定學(xué)生xxx替換為外層被查詢的學(xué)生SELECT*FROMXSaWHERE((SELECTCOUNT(*)FROMXSb WHERE(b.XM=a.XM))>1)當(dāng)前43頁,總共74頁。5.4.2使用ALL、ANY、SOME關(guān)鍵字ALL在條件語句中,表示必須滿足每一個(gè)條件項(xiàng)例:查詢XS表中年齡最大的學(xué)生。SELECT*FROMXSWHERECSRQ<=ALL(SELECTCSRQFROMXS)當(dāng)前44頁,總共74頁。5.4.2使用ALL、ANY、SOME關(guān)鍵字ANY(SOME)在條件語句中,表示滿足其中任何一個(gè)條件項(xiàng)例:取要出生日期不是最小的學(xué)生信息SELECT*FROMXSWHERECSRQ<ANY(SELECTCSRQFROMXS)當(dāng)前45頁,總共74頁。5.4.3EXISTS和IN子查詢EXISTS子查詢被稱為“存在子查詢”,它用來判斷子查詢相關(guān)表中是否存在滿足子查詢條件的行,而對(duì)于這些行的具體數(shù)據(jù),子查詢并不關(guān)心也不會(huì)被返回。當(dāng)內(nèi)層查詢結(jié)果為“存在”滿足子查詢條件的行,則外層的WHERR子句返回真值,否則返回假值。由于EXISTS子查詢并不返回滿足條件的數(shù)據(jù),因此SELECT子句后的字段列表并無多大意義,通常將通過EXISTS引入的子查詢的字段列表設(shè)為“*”,而不使用具體列名。EXISTS子查詢語法如下:[NOT]EXISTS(子查詢)當(dāng)前46頁,總共74頁。5.4.3EXISTS和IN子查詢例:查詢XS表中曾參加過考試的學(xué)生信息。SELECT*FROMXSWHEREEXISTS(SELECT*FROMCJWHEREXSDM=XS.XSDM)當(dāng)前47頁,總共74頁。5.4.3EXISTS和IN子查詢IN關(guān)鍵字用來確定給定的值(測試表達(dá)式)是否與子查詢或列表中的值相匹配,它的作用相當(dāng)于“=ANY”。IN子查詢語法如下: 測試表達(dá)式[NOT]IN(子查詢或者表達(dá)式列表)當(dāng)前48頁,總共74頁。5.4.3EXISTS和IN子查詢例:查詢位于班級(jí)代碼為22、23或24的班級(jí)中所有學(xué)生的信息。SELECT*FROMXSWHEREBJDMIN(22,23,24)例:查詢屬于計(jì)算機(jī)信息管理專業(yè)(專業(yè)代碼為6)所有學(xué)生的信息。SELECT*FROMXSWHEREBJDMIN (SELECTBJDM FROMBJ WHEREZYDM=6)當(dāng)前49頁,總共74頁。5.4.4派生表一個(gè)子查詢能夠返回一個(gè)由行和列構(gòu)成的數(shù)據(jù)集,我們可以將這個(gè)數(shù)據(jù)集再看作一個(gè)表來處理,這個(gè)由子查詢得出的新表就是我們說的“派生表”派生表有利于提高查詢速度、簡化操作派生表不是存儲(chǔ)在數(shù)據(jù)庫中的對(duì)象,它只在查詢期間有效。當(dāng)前50頁,總共74頁。5.4.4派生表例查詢班級(jí)代碼為22的班級(jí)(06級(jí)商務(wù)英語1班)在學(xué)期代碼為5的學(xué)期(2006~2007學(xué)年第1期)所有學(xué)生的考試成績,包含學(xué)號(hào),姓名,課程名稱和分?jǐn)?shù)。步驟1:我們從CJ表中取出符合條件的記錄SELECT*FROMCJWHEREXQDM=5ANDXSDMIN(SELECTXSDMFROMXSWHEREBJDM=22)當(dāng)前51頁,總共74頁。5.4.4派生表步驟2:將上步結(jié)果集當(dāng)作虛擬表a使用,并與KC、XS表聯(lián)接以獲取姓名、課程名稱等信息SELECTXS.XH,XS.XM,KC.KCMC,a.FSFROMaJOINXSONXS.XSDM=a.XSDMJOINKCONa.KCDM=KC.KCDM當(dāng)前52頁,總共74頁。5.4.4派生表步驟3:將第一步的語句替換第二步中虛擬表aSELECTXS.XH,XS.XM,KC.KCMC,a.FSFROM

(SELECTXSDM,KCDM,XQDM,FSFROMCJWHEREXQDM=5ANDXSDMIN(SELECTXSDMFROMXSWHEREBJDM=22))ASaJOINXSONXS.XSDM=a.XSDMJOINKCONa.KCDM=KC.KCDM當(dāng)前53頁,總共74頁。5.5聯(lián)合查詢UNION關(guān)鍵字可以將兩個(gè)或更多相互獨(dú)立的SELECT語句的查詢結(jié)果合并成一個(gè)集合,即執(zhí)行聯(lián)合查詢。聯(lián)合查詢要求合并的幾個(gè)數(shù)據(jù)集之間應(yīng)該具有相同的字段數(shù)目和類型。

例:在同一個(gè)數(shù)據(jù)集中返回賀清青同學(xué)所有科目的考試成績和平均成績。當(dāng)前54頁,總共74頁。5.5聯(lián)合查詢第一步,返回賀清青同學(xué)所有科目的成績:SELECTKC.KCMC科目,ABS(CJ.FS)成績FROMCJINNERJOINKCONCJ.KCDM=KC.KCDMINNERJOINXSONCJ.XSDM=XS.XSDMWHEREXS.XM='賀清青‘第二步,返回賀清青同學(xué)所有科目的平均分:SELECTAVG(ABS(CJ.FS))FROMCJINNERJOINXSONCJ.XSDM=XS.XSDMWHEREXS.XM='賀清青'當(dāng)前55頁,總共74頁。5.5聯(lián)合查詢第三步,為了滿足兩個(gè)結(jié)果集具有相同類型的字段,我們對(duì)上一語句改為下面這種形式:SELECT科目='平均分',成績=(SELECTAVG(ABS(CJ.FS))FROMCJINNERJOINXSONCJ.XSDM=XS.XSDMWHEREXS.XM='賀清青')第四部,將第一步和第三步的結(jié)果用UNION關(guān)鍵字集合并:SELECTKC.KCMC科目,ABS(CJ.FS)成績FROMCJINNERJOINKCONCJ.KCDM=KC.KCDMINNERJOINXSONCJ.XSDM=XS.XSDMWHEREXS.XM='賀清青'UNIONSELECT科目='平均分',成績=(SELECTAVG(ABS(CJ.FS))FROMCJINNERJOINXSONCJ.XSDM=XS.XSDMWHEREXS.XM='賀清青')當(dāng)前56頁,總共74頁。5.6通用表表達(dá)式CTECTE與派生表類似,不存儲(chǔ)為數(shù)據(jù)庫對(duì)象,并且只在查詢期間有效。與派生表的不同,CTE可在同一查詢中引用多次,可自引用。使用CTE可以獲得提高可讀性和輕松維護(hù)復(fù)雜查詢的優(yōu)點(diǎn)。CTE由表示CTE的表達(dá)式名稱、可選列列表和定義CTE的查詢組成。CTE的基本語法結(jié)構(gòu)如下:WITHCTE_NAME[(列名1[,...n])]AS(CTE查詢語句)運(yùn)行CTE的語句為:SELECT*FROMCTE_NAME當(dāng)前57頁,總共74頁。5.6通用表表達(dá)式CTE例查詢班級(jí)代碼為22的班級(jí)(06級(jí)商務(wù)英語1班)在學(xué)期代碼為5的學(xué)期(2006~2007學(xué)年第1期)所有學(xué)生的考試成績,包含學(xué)號(hào),姓名,課程名稱和分?jǐn)?shù)。WITHCTE_CJAS(SELECT*FROMCJWHEREXQDM=5ANDXSDMIN(SELECTXSDMFROMXSWHEREBJDM=22))SELECTXS.XH,XS.XM,KC.KCMC,a.FSFROMCTE_CJASaJOINXSONXS.XSDM=a.XSDMJOINKCONa.KCDM=KC.KCDM當(dāng)前58頁,總共74頁。5.8排名函數(shù)5.8.1ROW_NUMBERROW_NUMBER函數(shù)用來返回結(jié)果集內(nèi)每行的行號(hào),第一行從1開始。其語法為:ROW_NUMBER()OVER(<order_by_clause>)位于OVER后的括號(hào)中需要一個(gè)ORDERBY子句,該子句用來確定為行分配唯一ROW_NUMBER的順序。例:查詢06級(jí)商務(wù)英語1班(班級(jí)代碼為22)的所有學(xué)生的學(xué)號(hào)、姓名、出生日期、家庭是地址,要求第一列為行號(hào),并按學(xué)號(hào)排序。SELECTROW_NUMBER()OVER(ORDERBYXH)行號(hào),XH學(xué)號(hào),XM姓名,CSRQ出生日期,JTDZ家庭地址FROMXSWHEREBJDM=22當(dāng)前59頁,總共74頁。5.8.2RANK與DENSE_RANKRANK與DENSE_RANK函數(shù)都用來進(jìn)行名次的排列。RANK函數(shù)在排定名次時(shí)會(huì)以排在前面的記錄數(shù)為依據(jù),而DENSE_RANK在排定名次時(shí)只考慮排在前面的不同數(shù)值的個(gè)數(shù)作為依據(jù)。RANK與DENSE_RANK的語法和ROW_NUMBER函數(shù)相似,即:RANK()OVER(<order_by_clause>)或DENSE_RANK()OVER(<order_by_clause>)當(dāng)前60頁,總共74頁。5.8.2RANK與DENSE_RANK例查詢班級(jí)代碼為22的班級(jí)(06級(jí)商務(wù)英語1班)在學(xué)期代碼為5的學(xué)期(2006~2007學(xué)年第1期)所有學(xué)生的總分和名次。步驟1:查詢學(xué)生的總分信息:SELECTXS.XH學(xué)號(hào),XS.XM姓名,SUM(CJ.FS)總分FROMCJINNERJOINXSONXS.XSDM=CJ.XSDMINNERJOINKCONCJ.KCDM=KC.KCDMGROUPBYXS.XH,XS.XMORDERBY總分當(dāng)前61頁,總共74頁。5.8.2RANK與DENSE_RANK步驟2:在SELECT子句中添加RANK函數(shù),并在ORDERBY子句中指定排名的依據(jù):RANK()OVER(ORDERBYSUM(CJ.FS))最終結(jié)果如下:SELECTXS.XH學(xué)號(hào),XS.XM姓名,SUM(CJ.FS)總分,RANK()OVER(ORDERBYSUM(CJ.FS))名次FROMCJINNERJOINXSONXS.XSDM=CJ.XSDMINNERJOINKCONCJ.KCDM=KC.KCDMGROUPBYXS.XH,XS.XM當(dāng)前62頁,總共74頁。5.8.2RANK與DENSE_RANK將上述語句中RANK替換為DENSE_RANK,則執(zhí)行結(jié)果為:當(dāng)前63頁,總共74頁。5.9數(shù)據(jù)更新5.9.1使用INSERT語句插入數(shù)據(jù)1、簡單數(shù)據(jù)插入使用INSERT語句向表中插入單行數(shù)據(jù)的語法如下:INSERT[INTO]<表名>(字段列表)VALUES(值列表)例學(xué)生李金龍剛轉(zhuǎn)到我校06級(jí)經(jīng)濟(jì)信息管理班(BJDM=26),請(qǐng)將該生數(shù)據(jù)添加到向XS表中。該生的登記信息如下:姓名:李金龍,性別:男,出生日期:1982-2-1。INSERTINTOXS(XM,XB,CSRQ,BJDM)VALUES('李金龍','男','1982-2-1',26)當(dāng)前64頁,總共74頁。5.9.1使用INSERT語句插入數(shù)據(jù) 如果需要給每個(gè)字段指定值,則可省略字段列表,但要保證值列表與表中字段一一對(duì)應(yīng)例BJ表中包括BJDM(班級(jí)代碼),ZYDM(專業(yè)代碼),BJMC(班級(jí)名稱),NJ(年級(jí)),ZT(狀態(tài))四個(gè)字段。新增班級(jí)07軟件技術(shù)4班,專業(yè)代碼13,年級(jí)2007,狀態(tài)值為0。INSERTINTOBJVALUES(1001,13,'07軟件技術(shù)班',2007,0)當(dāng)前65頁,總共74頁。5.9.1使用INSERT語句插入數(shù)據(jù)2、批量數(shù)據(jù)插入在INSERT語句中使用一個(gè)SELECT查詢將一個(gè)查詢結(jié)果的內(nèi)容添加到表中。其語法格式為:INSERTINTO<表名>(字段列表)<查詢語句>例在數(shù)據(jù)庫中新建表XS_2,用來存放已畢業(yè)學(xué)生信息,其結(jié)構(gòu)和XS表完全相同。請(qǐng)將2006級(jí)所有學(xué)生學(xué)號(hào)、班級(jí)、姓名、出生日期、家庭地址信息插入到XS_2中,并將ZT(狀態(tài))值設(shè)為1。年級(jí)信息保存在BJ表中,所以要知道學(xué)生所在年級(jí),需要將BJ表和XS表聯(lián)接。INSERTINTOXS_2(XH,BJDM,XM,CSRQ,JTDZ,ZT)SELECTXH,BJ.BJDM,XM,CSRQ,JTDZ,1FROMXSINNERJOINBJONXS.BJDM=BJ.BJDMWHEREBJ.NJ=2006當(dāng)前66頁,總共74頁。5.9.1使用INSERT語句插入數(shù)據(jù)3、將數(shù)據(jù)插入新表可以使用如下語法將查詢到的數(shù)據(jù)插入到一個(gè)新表中:SELECT<字段列表>INTO<新表名>FROM表名例將CJ表中KCDM為6的數(shù)據(jù)插入到新表CJ_2中:SELECT*INTOCJ_2FROMCJWHEREKCDM=6當(dāng)前67頁,總共74頁。5.9.2使用UPDATE語句修改數(shù)據(jù)UPDATE語法如下:UPDATE<表名>SET 字段1=字段值1, 字段2=字段值2, ……WHERE<搜索條件表達(dá)式>例XS表中有些學(xué)生民族為“漢”,有些為“漢族”,將表中民族為“漢族”的數(shù)據(jù)統(tǒng)一改為民族為“漢”。UPDATEXSSETMZ='漢'WHEREMZ='漢族'當(dāng)前68頁,總共74頁。5.9.3使用DELETE刪除數(shù)據(jù)DELETE語句基本語法如下:DELETE[FROM]<表名>WHERE<搜索條件表達(dá)式>例ZY表中,如果一個(gè)專業(yè)沒有任何班級(jí)屬

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論