《數(shù)據(jù)庫(kù)應(yīng)用基礎(chǔ)與實(shí)訓(xùn)教程VisualFoxPro》第6章SQL語(yǔ)句課件_第1頁(yè)
《數(shù)據(jù)庫(kù)應(yīng)用基礎(chǔ)與實(shí)訓(xùn)教程VisualFoxPro》第6章SQL語(yǔ)句課件_第2頁(yè)
《數(shù)據(jù)庫(kù)應(yīng)用基礎(chǔ)與實(shí)訓(xùn)教程VisualFoxPro》第6章SQL語(yǔ)句課件_第3頁(yè)
《數(shù)據(jù)庫(kù)應(yīng)用基礎(chǔ)與實(shí)訓(xùn)教程VisualFoxPro》第6章SQL語(yǔ)句課件_第4頁(yè)
《數(shù)據(jù)庫(kù)應(yīng)用基礎(chǔ)與實(shí)訓(xùn)教程VisualFoxPro》第6章SQL語(yǔ)句課件_第5頁(yè)
已閱讀5頁(yè),還剩68頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第6章SQL語(yǔ)句

(時(shí)間:8次課,16學(xué)時(shí))第6章SQL語(yǔ)句

(時(shí)間:8次課,16學(xué)時(shí))1第6章SQL語(yǔ)句

學(xué)習(xí)目的與要求:SQL是結(jié)構(gòu)化查詢語(yǔ)言(StucturedQueryLanguage)的縮寫,其功能包括數(shù)據(jù)查詢、數(shù)據(jù)操縱、數(shù)據(jù)定義和數(shù)據(jù)控制四個(gè)部分。SQL語(yǔ)言擁有使用方式靈活、語(yǔ)句簡(jiǎn)潔、功能齊全等特點(diǎn),深受用戶歡迎,已成為目前應(yīng)用最廣泛的關(guān)系數(shù)據(jù)庫(kù)語(yǔ)言,幾乎所有的關(guān)系型數(shù)據(jù)庫(kù)型系統(tǒng)都支持它。VisualFoxPro并不支持所有的SQL語(yǔ)句,它只支持其中的子集。本章將介紹常用的SQL語(yǔ)句使用,主要包括數(shù)據(jù)查詢、數(shù)據(jù)定義和數(shù)據(jù)操作功能。要求熟練掌握這些命令的應(yīng)用。第6章SQL語(yǔ)句

學(xué)習(xí)目的與要求:2第6章SQL語(yǔ)句6.1數(shù)據(jù)庫(kù)的操作語(yǔ)句6.2表的創(chuàng)建與刪除語(yǔ)句6.3SQL的數(shù)據(jù)操作功能6.4SQL的數(shù)據(jù)查詢功能

6.5本章實(shí)訓(xùn)6.6本章習(xí)題第6章SQL語(yǔ)句6.1數(shù)據(jù)庫(kù)的操作語(yǔ)句36.1數(shù)據(jù)庫(kù)的操作語(yǔ)句6.1.1數(shù)據(jù)庫(kù)的創(chuàng)建6.1.2數(shù)據(jù)庫(kù)的刪除6.1數(shù)據(jù)庫(kù)的操作語(yǔ)句6.1.1數(shù)據(jù)庫(kù)的創(chuàng)建46.1.1數(shù)據(jù)庫(kù)的創(chuàng)建

SQL創(chuàng)建數(shù)據(jù)庫(kù)的命令和第三章講的命令一樣,這里只做簡(jiǎn)單介紹?!久罡袷健緾REATEDATABASEDatabaseName【命令說(shuō)明】DatabaseName指的是所要?jiǎng)?chuàng)建的數(shù)據(jù)名。具體應(yīng)用見【例6-1】。6.1.1數(shù)據(jù)庫(kù)的創(chuàng)建5

【例6-1】創(chuàng)建名為CJGL的數(shù)據(jù)庫(kù)。命令如下:CREATEDATABASECJGL &&在當(dāng)前路徑下創(chuàng)建了名為CJGL的數(shù)據(jù)庫(kù)。MODIFYDATABASE &&打開名為CJGL的數(shù)據(jù)庫(kù)設(shè)計(jì)器,如圖6.1所示。圖6.1【例6-66.1.2數(shù)據(jù)庫(kù)的刪除【命令格式】DELETEDATABASEDatabaseName【命令說(shuō)明】DatabaseName指的是所要?jiǎng)h除的數(shù)據(jù)名。但在刪除數(shù)據(jù)庫(kù)之前,必須先關(guān)閉該數(shù)據(jù)庫(kù)。具體應(yīng)用見【例6-2】6.1.2數(shù)據(jù)庫(kù)的刪除【命令格式】7【例6-2】刪除名為CJGL的數(shù)據(jù)庫(kù)。命令如下:CLOSEDATABASE &&關(guān)閉例6-1所建立的數(shù)據(jù)庫(kù)。DELETEDATABASECJGL &&刪除已經(jīng)關(guān)閉的數(shù)據(jù)庫(kù),彈出如圖6.2所示,單擊【是】按鈕就刪除了該數(shù)據(jù)庫(kù)。圖6.2【例6-2】刪除名為CJGL的數(shù)據(jù)庫(kù)。命令如下:圖6.286.2表的創(chuàng)建和刪除語(yǔ)句6.2.1表的創(chuàng)建6.2.2表結(jié)構(gòu)的修改6.2.3表的刪除6.2.4將表移出數(shù)據(jù)庫(kù)6.2.5將自由表添加到數(shù)據(jù)庫(kù)6.2表的創(chuàng)建和刪除語(yǔ)句6.2.1表的創(chuàng)建96.2.1表的創(chuàng)建【一般常用命令格式】CREATETABLE|DBFTableName[FREE](FieldName1FieldType[(nFieldWidth[,nPrecision])][NULL|NOTNULL][CKECKlExpression1[ERRORcMessagetext1]][DEFAULTeExpression1][PRIMARYKEY|UNIQUE][,FieldName2…]【命令說(shuō)明】(1)TableName指的是所要?jiǎng)?chuàng)建的表名。(2)FREE指的是要?jiǎng)?chuàng)建一個(gè)自由表。(3)FieldName1指的是新建表的字段名。6.2.1表的創(chuàng)建【一般常用命令格式】10(4)FieldType指的是字段的數(shù)據(jù)類型,數(shù)據(jù)類型得用英文表示,具體見第三章所介紹的。(5)nFieldWidth指的是字段的寬度。(6)nPrecision指的是數(shù)值型數(shù)據(jù)的小數(shù)位數(shù)。(7)NULL|NOTNULL指的字段中是否允許保存空值。(8)CKECKlExpression1[ERRORcMessagetext1]指的是驗(yàn)證字段的值是否符合指定的表達(dá)式,不符合可以有錯(cuò)誤提示信息。(9)DEFAULTeExpression1指的是給指定字段設(shè)置默認(rèn)值。(10)PRIMARYKEY|UNIQUE指的是給指定字段設(shè)置主索引或唯一索引。

(4)FieldType指的是字段的數(shù)據(jù)類型,數(shù)據(jù)類型得用英11【例6-3】在數(shù)據(jù)庫(kù)“成績(jī)管理”中創(chuàng)建數(shù)據(jù)庫(kù)表XS。命令如下:OPENDATABASE成績(jī)管理CREATETABLEXS(XHC(2),XMC(10),XBC(2),CSRQD,SFTYL,XBBHC(2))&&在成績(jī)管理數(shù)據(jù)庫(kù)中建立表XS,如圖6.3所示。圖6.3【例6-3】在數(shù)據(jù)庫(kù)“成績(jī)管理”中創(chuàng)建數(shù)據(jù)庫(kù)表XS。命令如下12【例6-4】創(chuàng)建數(shù)據(jù)庫(kù)表XS1,要求給XB字段定義規(guī)則:XB的值為“男”或“女”,出錯(cuò)提示信息為“性別必須為男或者女”;XH為主關(guān)鍵字,不允許為空值;SFTY默認(rèn)值為.T.。命令如下:CREATETABLEXS1(XHC(2)NOTNULLPRIMARYKEY,XMC(10),XBC(2)CHECKXB=”男”O(jiān)RXB=”女”,CSRQD,SFTYLDEFAULT.T.,XBBHC(2))然后查看表XS1的結(jié)構(gòu),如圖6.4所示。

圖6.4【例6-4】創(chuàng)建數(shù)據(jù)庫(kù)表XS1,要求給XB字段定義規(guī)則:XB136.2.2表結(jié)構(gòu)的修改1.添加字段【命令格式】ALTERTABLETabelName1ADD[COLUNMN]FieldName1FieldType[(nFieldWidth[,nPrecision])][NULL|NOTNULL][CHECKlExpression1[ERRORcMessagetext1]][DEFAULTeExpression1][PRIMARYKEY|UNIQUE]【命令說(shuō)明】這里的參數(shù)的含義和創(chuàng)建表的含義一致,參照?qǐng)?zhí)行。6.2.2表結(jié)構(gòu)的修改1.添加字段14【例6-5】為XS表添加NL字段,NL大于零。命令如下:ALTERTABLEXSADDNLN(2)CHECKNL>0ERROR”年齡必須大于零”命令執(zhí)行后進(jìn)入表XS的表設(shè)計(jì)器,如圖6.5所示。圖6.5【例6-5】為XS表添加NL字段,NL大于零。命令如下:圖6152.修改字段【命令格式】ALTERTABLETabelName1ALTER[COLUNMN]FieldName1FieldType[(nFieldWidth[,nPrecision])][NULL|NOTNULL][SETCHECKlExpression1[ERRORcMessagetext1]][SETDEFAULTeExpression1][DROPCHECK][DROPDEFAULT][RENAMECOLUMNFieldName1TOFieldName2]2.修改字段16【命令說(shuō)明】(1)SETCHECKlExpression1[ERRORcMessagetext1]指給指定字段增加規(guī)則或修改規(guī)則。(2)SETDEFAULTeExpression1指給指定字段增加默認(rèn)值或修改默認(rèn)值。(3)DROPCHECK指刪除指定字段的規(guī)則。(4)DROPDEFAULT指刪除指定字段的默認(rèn)值。(5)RENAMECOLUMNFieldName1TOFieldName2指給字段FieldName1重新命名為FieldName2。其他的參數(shù)的含義和創(chuàng)建表的含義一致,參照?qǐng)?zhí)行。【命令說(shuō)明】17【例6-6】為XS表修改NL字段有效性規(guī)則,NL>16。命令如下:ATLERTABLEXSALTERNLN(2)SETCHECKNL>16ERROR”年齡必須大于16周歲!”【例6-7】把SP1表中NL字段更改為RXNL。命令如下:ATLERTABLEXSRENAMECOLUMNNLTORXNL【例6-8】刪除XS表RXNL字段的有效性規(guī)則。命令如下:ATLERTABLEXSALTERRXNLDROPCHECK【例6-6】為XS表修改NL字段有效性規(guī)則,NL>16。命令186.2.3表的刪除【命令格式】DROPTABLETableName【命令說(shuō)明】該命令是直接從磁盤上刪除指定的表名的DBF文件。但該表如果是數(shù)據(jù)庫(kù)表,就必須先打開該表所在的數(shù)據(jù)庫(kù),然后使用該命令刪除表,否則數(shù)據(jù)庫(kù)中將還保留有該表的信息,會(huì)有錯(cuò)誤提示?!纠?-10】刪除表SP1。DROPTABLESP16.2.3表的刪除【命令格式】196.2.4將表移出數(shù)據(jù)庫(kù)【命令格式】REMOVETABLETableName|?[DELETE]【命令說(shuō)明】(1)該命令是把指定數(shù)據(jù)庫(kù)表移出數(shù)據(jù)庫(kù)。(2)?指調(diào)出【移去】對(duì)話框,從中選擇要移去的表。(3)DELETE指把指定表移出后,并從磁盤上刪除?!纠?-11】將表XS移出數(shù)據(jù)庫(kù)CJGL,但不刪除。命令和操作如下:6.2.4將表移出數(shù)據(jù)庫(kù)【命令格式】20【例6-11】將表XS移出數(shù)據(jù)庫(kù)CJGL,但不刪除。命令和操作如下:OPENDATABASECJGLMODIFYDATABASEREMOVETABLEXS &&該命令執(zhí)行后出現(xiàn)如圖6.6所示的對(duì)話框。在圖6.6中單擊【是】按鈕,就把表XS移出數(shù)據(jù)庫(kù)CJGL,但并沒(méi)有刪除表XS,數(shù)據(jù)庫(kù)設(shè)計(jì)器如圖6.7所示。

圖6.6圖6.7【例6-11】將表XS移出數(shù)據(jù)庫(kù)CJGL,但不刪除。命令和操216.2.5將自由表添加到數(shù)據(jù)庫(kù)【命令格式】ADDTABLETableName|?[NAMELongTableName]【命令說(shuō)明】(1)該命令是把指定自由表添加到指定的數(shù)據(jù)庫(kù)中,成為數(shù)據(jù)庫(kù)表。(2)?:指調(diào)出【打開】對(duì)話框,從中選擇要添加的自由表。(3)NAMELongTableName:指為添加的數(shù)據(jù)庫(kù)表指定一個(gè)長(zhǎng)名。6.2.5將自由表添加到數(shù)據(jù)庫(kù)【命令格式】22【例6-12】將表XS添加到數(shù)據(jù)庫(kù)CJGL中。命令如下:OPENDATABASECJGLMODIFYDATABASEADDTABLEXS命令執(zhí)行后數(shù)據(jù)庫(kù)設(shè)計(jì)器如圖6.8所示。圖6.8【例6-12】將表XS添加到數(shù)據(jù)庫(kù)CJGL中。命令如下:圖6236.3SQL的數(shù)據(jù)操作功能6.3.1數(shù)據(jù)的插入6.3.2數(shù)據(jù)的更新6.3.3數(shù)據(jù)的刪除SQL的數(shù)據(jù)操作功能只要是對(duì)已有表中數(shù)據(jù)的操作,主要包括記錄的插入、更新和刪除三大方面的操作。6.3SQL的數(shù)據(jù)操作功能6.3.1數(shù)據(jù)的插入24從本節(jié)開始將要使用“成績(jī)管理”數(shù)據(jù)庫(kù)中的表的數(shù)據(jù),其具體數(shù)據(jù)如圖6.9所示:圖6.9從本節(jié)開始將要使用“成績(jī)管理”數(shù)據(jù)庫(kù)中的表的數(shù)據(jù),其具體數(shù)據(jù)256.3.1數(shù)據(jù)的插入

VisualFoxPro支持兩種SQL數(shù)據(jù)的插入格式,第一種是標(biāo)準(zhǔn)格式,第二種是特殊格式。一般使用第一種格式?!镜谝环N命令格式】INSERTINTOTableName[(FieldName1[,FieldName2,…])]VALUES(eExpression1[,eExpression2,…])【命令說(shuō)明】(1)TableName指所要插入記錄的表名。(2)FieldName1[,FieldName2,…]指插入記錄所要用到的字段。該參數(shù)可以不選,默認(rèn)為對(duì)所有字段都需要插入值。(3)eExpression1[,eExpression2,…]指插入記錄對(duì)應(yīng)字段的值。(4)所插入字段的值必須和該對(duì)應(yīng)的字段的數(shù)據(jù)要求一致,包括數(shù)據(jù)類型、數(shù)據(jù)長(zhǎng)度的范圍、數(shù)據(jù)小數(shù)位數(shù)。(5)所插入的記錄字段的值必須和字段的個(gè)數(shù)保持一致,不能多也不能少,否則會(huì)出錯(cuò)。6.3.1數(shù)據(jù)的插入VisualFoxPro支持兩種S26【例6-13】給課程表插入一條記錄。命令如下:INSERTINTO課程(課程號(hào),課程名稱,學(xué)分)VALUES(’C6’,’桌面程序設(shè)計(jì)’,5)由于該命令是對(duì)表中所有字段都插入一個(gè)值,還可以使用下面命令進(jìn)行操作:INSERTINTO課程VALUES(’C6’,’桌面程序設(shè)計(jì)’,5)命令執(zhí)行結(jié)果如圖6.10所示。圖6.10【例6-13】給課程表插入一條記錄。命令如下:圖6.1027【第二種命令格式】INSERTINTOTableNameFROMARRAYAraayName【命令說(shuō)明】(1)該命令是從指定的數(shù)據(jù)組中插入數(shù)據(jù)成為記錄。(2)AraayName指數(shù)組名。該數(shù)組必須先定義,而且各元素的賦值符合指定表相應(yīng)字段的定義,這樣才可以使用數(shù)組插入記錄?!镜诙N命令格式】28【例6-14】給課程表插入一條記錄。命令序列如下:DIMEX(3) &&定義一個(gè)一維數(shù)組X,有3個(gè)元素。X(1)=’C7’X(2)=’專業(yè)英語(yǔ)’X(3)=3INSERTINTO課程FROMARRAYX命令執(zhí)行結(jié)果如圖6.11所示。

圖6.11【例6-14】給課程表插入一條記錄。命令序列如下:圖6.11296.3.2數(shù)據(jù)的更新【命令格式】UPDATETableNameSETColumnName1=eExpression1[,ColumnName2=eExpression2…])][WHEREConditon]【命令說(shuō)明】(1)ColumnName1、ColumnName2…指對(duì)所要修改的字段名。(2)eExpression1、eExpression2…指對(duì)所要修改字段更新的數(shù)據(jù)值??梢允浅A亢捅磉_(dá)式。(3)WHEREConditon指對(duì)滿足條件的數(shù)據(jù)進(jìn)行更新。(4)所更新字段和新的值必須保持一致。6.3.2數(shù)據(jù)的更新【命令格式】30【例6-15】把課程表中政治課程的課程名更改為“思想道德”,學(xué)分改為4。命令如下:UPDATE課程;SET課程名稱=’思想道德’,學(xué)分=4;WHERE課程名稱=’政治’命令執(zhí)行結(jié)果如圖6.12所示。

圖6.12【例6-15】把課程表中政治課程的課程名更改為“思想道德”,316.3.3數(shù)據(jù)的刪除【命令格式】DELETEFROMTableName[WHEREConditon]【命令說(shuō)明】(1)該命令是對(duì)指定表的記錄進(jìn)行邏輯刪除,需要物理刪除還要借助PACK命令。(2)WHEREConditon指對(duì)滿足條件的數(shù)據(jù)進(jìn)行刪除。6.3.3數(shù)據(jù)的刪除【命令格式】32【例6-16】刪除課程表中課程號(hào)為“C6”課程記錄。命令如下:DELETEFROM課程WHERE課程號(hào)=’C6’命令執(zhí)行結(jié)果如圖6.13所示。圖中的黑色方塊表示作了刪除標(biāo)記,但記錄并沒(méi)有真正刪除,還保留在表中。如果要去掉刪除標(biāo)記和物理刪除該條記錄,可以參見第三章所講解的表數(shù)據(jù)刪除方法。

圖6.13【例6-16】刪除課程表中課程號(hào)為“C6”課程記錄。命令如下336.4SQL的數(shù)據(jù)查詢功能6.4.1數(shù)據(jù)庫(kù)的簡(jiǎn)單查詢6.4.2數(shù)據(jù)庫(kù)的復(fù)雜查詢SQL的數(shù)據(jù)查詢功能是數(shù)據(jù)庫(kù)中最常用、最重要的數(shù)據(jù)操作,它可以在指定的表中查詢滿足條件的數(shù)據(jù),該命令應(yīng)用廣泛,但格式比較復(fù)雜。6.4SQL的數(shù)據(jù)查詢功能6.4.1數(shù)據(jù)庫(kù)的簡(jiǎn)單查詢34【命令格式】

SELECT[ALL|DISTINCE][TOPnExpr[PERCENT]][Alias.][Select_Item[ASColumn_Name][,[Alias.][Select_Item[ASColumn_Name]…]FROM[FORCE][DatabaseName!]Table[[AS]Local_Alias][[INNER|LEFT[OUTER]|RIGHT[OUTER]|FULL[OUTER]JOINDatabaseName!]Table[[AS]Local_Alias][ONJoinCondition…][[INTODestination]|[TOFILEFileName[ADDITIVE]|TOPRINTER[PROMPT]|TOSCREEN]][PREFERENCEPreferenceName][NOCONSOLE][PLAIN][NOWAIT][WHEREJoinCondition[ANDJoinCondition...][AND|ORFilterCondition[AND|ORFilterCondition...]]][GROUPBYGroupColumn[,GroupColumn...]][HAVINGFilterCondition][UNION[ALL]SELECT命令][ORDERBYOrder_Item[ASC|DESC][,Order_Item[ASC|DESC]...]]由于該命令格式比較復(fù)雜,下面將分別在各種應(yīng)用中進(jìn)行說(shuō)明和介紹:【命令格式】356.4.1數(shù)據(jù)庫(kù)的簡(jiǎn)單查詢數(shù)據(jù)列查詢條件查詢簡(jiǎn)單計(jì)算查詢分組查詢查詢結(jié)果排序查詢結(jié)果保存6.4.1數(shù)據(jù)庫(kù)的簡(jiǎn)單查詢數(shù)據(jù)列查詢36【命令格式】SELECT[ALL|DISTINCE][Alias.][Select_Item1[ASColumn1_Name][,[Alias.][Select_Item2[ASColumn2_Name]…]FROM[DatabaseName!]Table[[AS]Local_Alias]【命令說(shuō)明】(1)ALL|DISTINCE:指查詢表中所有數(shù)據(jù)或去掉重復(fù)的記錄。(2)[Alias.][Select_Item1[ASColumn1_Name]:從指定的表中(可以使用別名)引用相關(guān)的字段或著表達(dá)式,ASColumn1_Name對(duì)查詢結(jié)果的列名重新命名。(3)FROM[DatabaseName!]Table[[AS]Local_Alias]:指從指定的表(可以是數(shù)據(jù)庫(kù)中的表)查詢數(shù)據(jù),這里可以給表指定一個(gè)別名,在所有字句中都可以應(yīng)用。1.數(shù)據(jù)列查詢【命令格式】1.數(shù)據(jù)列查詢37(4)該命令是從指定表中查詢表中的所有或者部分列的數(shù)據(jù)?!纠?-17】查詢學(xué)生表中所有數(shù)據(jù)。命令如下:SELECT*FROM學(xué)生&&這里*代表所有字段

結(jié)果如圖6.14所示?!纠?-18】查詢學(xué)生表的學(xué)號(hào)和姓名。命令如下:SELECT學(xué)號(hào)AS學(xué)生的編號(hào),姓名ASXMFROM學(xué)生結(jié)果如圖6.15所示。圖6.14圖6.15(4)該命令是從指定表中查詢表中的所有或者部分列的數(shù)據(jù)。圖638【例6-19】查詢選課表中有選課的學(xué)生的學(xué)號(hào)。命令如下:SELECTDISTINCT學(xué)號(hào)FROM選課結(jié)果如圖6.16所示。

圖6.16【例6-19】查詢選課表中有選課的學(xué)生的學(xué)號(hào)。命令如下:圖639【主要命令格式】SELECT…FROM…WHERECondition【命令說(shuō)明】該命令是查詢滿足條件的數(shù)據(jù),Condition為條件表達(dá)式。具體應(yīng)用如下:(1)使用關(guān)系和邏輯表達(dá)式的條件查詢?!纠?-20】查詢成績(jī)不及格的情況。命令如下:SELECT*FROM選課WHERE成績(jī)<60結(jié)果如圖6.17所示。2.條件查詢圖6.17【主要命令格式】2.條件查詢圖6.1740(2)使用范圍查詢BETWEEN…AND…或者NOTBETWEEN…AND…?!纠?-21】查詢成績(jī)?cè)?0到100之間的情況。命令如下:SELECT*FROM選課WHERE成績(jī)BETWEEN80AND100結(jié)果如圖6.18所示。圖6.18(2)使用范圍查詢BETWEEN…AND…或者NOTBE41(3)使用字符匹配查詢LIKE…或NOTLIKE…。%:代表任意長(zhǎng)度的字符串。_:代表任意單個(gè)字符?!纠?-22】查詢所以姓王的學(xué)生情況。命令如下:SELECT*FROM學(xué)生WHERE姓名LIKE'王%'結(jié)果如圖6.19所示。圖6.19(3)使用字符匹配查詢LIKE…或NOTLIKE…。圖642(4)空值查詢ISNULL或ISNOTNULL?!纠?-23】查詢學(xué)生表系部編號(hào)不為NULL的情況。命令如下:SELECT*FROM學(xué)生WHERE系部編號(hào)ISNOTNULL結(jié)果如圖6.20所示。

圖6.20(4)空值查詢ISNULL或ISNOTNULL。圖6.43(5)確定集合查詢IN或NOTIN?!纠?-24】查詢系部編號(hào)為”2”或”3”的學(xué)生情況。命令如下:SELECT*FROM學(xué)生WHERE系部編號(hào)IN('2','3')結(jié)果如圖6.21所示。圖6.21(5)確定集合查詢IN或NOTIN。圖6.2144【主要命令格式】SELECT...FROM…[WHERECondition]【命令說(shuō)明】(1)SELECT短語(yǔ)后主要書寫計(jì)算表達(dá)式和函數(shù)。(2)計(jì)算檢索的函數(shù)主要有:COUNT(DISTINCT|ALL)*)——統(tǒng)計(jì)記錄個(gè)數(shù)。SUM(DISTINCT|ALL)<ColumnName>)——計(jì)算一數(shù)值列的總和。AVG(DISTINCT|ALL)<ColumnName>)——計(jì)算一數(shù)值列的平均值。MAX(DISTINCT|ALL)<ColumnName>)——求一列的最大值。MIN(DISTINCT|ALL)<ColumnName>)——求一列的最小值。3.簡(jiǎn)單計(jì)算查詢【主要命令格式】3.簡(jiǎn)單計(jì)算查詢45【例6-25】統(tǒng)計(jì)學(xué)生表中的記錄個(gè)數(shù)。命令如下:SELECTCOUNT(*)AS學(xué)生人數(shù)FROM學(xué)生結(jié)果如圖6.22所示?!纠?-26】計(jì)算選課表的成績(jī)總和、平均分、最大分、最小分。命令如下:SELECTSUM(成績(jī))AS總和,AVG(成績(jī))AS平均分,MAX(成績(jī))AS最大分,MIN(成績(jī))AS最小分FROM選課結(jié)果如圖6.23所示。圖6.22圖6.23【例6-25】統(tǒng)計(jì)學(xué)生表中的記錄個(gè)數(shù)。命令如下:圖6.22圖46【主要命令格式】SELECT…FROM….GROUPBYGroupColumn[,GroupColumn...][HAVINGFilterCondition]【命令說(shuō)明】(1)GroupColumn是指分組的標(biāo)志列。(2)HAVINGFilterCondition是指限制分組的條件?!纠?-27】分別統(tǒng)計(jì)學(xué)生表中的男女生人數(shù)。命令如下:SELECT性別,COUNT(*)AS人數(shù)FROM學(xué)生GROUPBY性別結(jié)果如圖6.24所示。4.分組查詢【主要命令格式】4.分組查詢47【例6-28】統(tǒng)計(jì)成績(jī)有兩門以上在70分的情況。命令如下:SELECT學(xué)號(hào),COUNT(課程號(hào))AS課程門數(shù)FROM選課;WHERE成績(jī)>=70;GROUPBY學(xué)號(hào)HAVINGCOUNT(*)>=2結(jié)果如圖6.25所示。圖6.24圖6.25【例6-28】統(tǒng)計(jì)成績(jī)有兩門以上在70分的情況。命令如下:圖48【主要命令格式】、SELECT[TOPnExpr[PERCENT]]…FROM….ORDERBYOrder_Item[ASC|DESC][,Order_Item[ASC|DESC]...]【命令說(shuō)明】(1)Order_Item:指的選定的對(duì)查詢結(jié)果排序的列。(2)ASC|DESC:指的是排序的順序。ASC指升序,默認(rèn)為升序。DESC指的是降序。(3)TOPnExpr[PERCENT]:指查詢結(jié)果顯示特定數(shù)目的記錄。TOPnExpr表示現(xiàn)在最前面的N條記錄。TOPnExprPERCENT表示顯示查詢結(jié)果記錄數(shù)目的百分比。這里必須和排序結(jié)合使用,不能單獨(dú)使用。5.查詢結(jié)果排序【主要命令格式】、5.查詢結(jié)果排序49【例6-29】對(duì)學(xué)生表數(shù)據(jù)按出生日期的升序降序排序。命令如下:SELECT*FROM學(xué)生;ORDERBY出生日期DESC&&結(jié)果如圖6.26所示?!纠?-30】查詢課程號(hào)為“C1”,成績(jī)最高的前三名情況。命令如下:SELECT*TOP3FROM選課WHERE課程號(hào)=’C1’;ORDERBY成績(jī)DESC&&結(jié)果如圖6.27所示。

圖6.26圖6.27【例6-29】對(duì)學(xué)生表數(shù)據(jù)按出生日期的升序降序排序。命令如下50【主要命令格式】SELECT…FROM….INTOTABLE[|CURSOR]Destination|TOFILEFileName[ADDITIVE]|TOPRINTER[PROMPT]|TOSCREEN]【命令說(shuō)明】(1)INTOTABLE[|CURSOR]Destination:指查詢結(jié)果保存到新表。將結(jié)果永久保存在表中則使用INTOTABLE;如果接查詢結(jié)果保存到臨時(shí)表中則使用INTOCURSOR,臨時(shí)表的不永久保存,關(guān)閉后不在存在。(2)TOFILEFileName:[ADDITIVE]指查詢結(jié)果保存到文本文件。(3)TOPRINTER[PROMPT]:指查詢結(jié)果輸出到打印機(jī)。(4)TOSCREEN:指查詢結(jié)果到屏幕。6.查詢結(jié)果保存【主要命令格式】6.查詢結(jié)果保存51【例6-31】查詢成績(jī)不及格的情況,將結(jié)果保存到表BJGQK。命令如下:SELECT*FROM選課;WHERE成績(jī)<60;INTOTABLEBJGQKSELECT*FROMBJGQK表BJGQK的記錄數(shù)據(jù)如圖6.28所示。圖6.28【例6-31】查詢成績(jī)不及格的情況,將結(jié)果保存到表BJGQK526.4.2數(shù)據(jù)的復(fù)雜查詢聯(lián)接查詢子查詢6.4.2數(shù)據(jù)的復(fù)雜查詢聯(lián)接查詢531)自然聯(lián)接查詢自然聯(lián)接查詢也叫等值聯(lián)接查詢或者內(nèi)聯(lián)接查詢,一般用于查詢結(jié)果須從兩個(gè)表或兩個(gè)以上表中去獲取?!疽话忝罡袷健縎ELECT…FROMTable1INNERJOINTable2ONTable1.Column=Table2.Column…或者SELECT…FROMTable1,Table2…WHERETable1.Column=Table2.Column[AND…]…1.聯(lián)接查詢1)自然聯(lián)接查詢1.聯(lián)接查詢54【命令說(shuō)明】(1)命令格式中我們一般使用第二種。指的是從多個(gè)表中查詢滿足條件的數(shù)據(jù)。要求多個(gè)表中互相之間有聯(lián)系保證有同名字段。(2)Table1.Column=Table2.Column指兩個(gè)有聯(lián)系的表中具有的相同字段名。這是建立聯(lián)接查詢的基本條件。(3)該命令給多表建立連接后,可以和前面所有講的簡(jiǎn)單查詢一起結(jié)合使用,查詢滿足條件的數(shù)據(jù)?!纠?-32】查詢學(xué)生李小明所選課的情況。命令如下:SELECTA.學(xué)號(hào),姓名,課程名稱,成績(jī)FROM學(xué)生A,選課B,課程C;WHEREA.學(xué)號(hào)=B.學(xué)號(hào)ANDC.課程號(hào)=B.課程號(hào)AND姓名=”李小明”結(jié)果如圖6.29所示?!久钫f(shuō)明】55【例6-33】統(tǒng)計(jì)每門課程選課學(xué)生的人數(shù)。命令如下:SELECT課程.課程號(hào),課程名稱,COUNT(學(xué)號(hào))AS學(xué)生人數(shù)FROM課程,選課;WHERE課程.課程號(hào)=選課.課程號(hào);GROUPBY1結(jié)果如圖6.30所示。命令中的1指的是查詢結(jié)果所包含的第一列,也就是課程.課程號(hào)。圖6.29圖6.30【例6-33】統(tǒng)計(jì)每門課程選課學(xué)生的人數(shù)。命令如下:圖6.2562)左聯(lián)接查詢【一般命令格式】SELECT…FROMTable1LEFTJOINTable2ONTable1.Column=Table2.Column【命令說(shuō)明】(1)該命令指除滿足聯(lián)接條件的記錄出現(xiàn)在查詢結(jié)果外,第一個(gè)表不滿足聯(lián)接條件的記錄也出現(xiàn)在查詢結(jié)果中。

(2)查詢結(jié)果的記錄個(gè)數(shù)以第一個(gè)表的記錄個(gè)數(shù)為準(zhǔn),沒(méi)有匹配的字段值,自動(dòng)填寫NULL。2)左聯(lián)接查詢57【例6-34】為學(xué)生和選課表建立左聯(lián)接。命令如下:SELECT*FROM學(xué)生LEFTJOIN選課;ON學(xué)生.學(xué)號(hào)=選課.學(xué)號(hào)部分結(jié)果如圖6.31所示。圖6.31【例6-34】為學(xué)生和選課表建立左聯(lián)接。命令如下:圖6.31583)右聯(lián)接查詢【一般命令格式】SELECT…FROMTable1RIGHTJOINTable2ONTable1.Column=Table2.Column【命令說(shuō)明】(1)該命令指除滿足聯(lián)接條件的記錄出現(xiàn)在查詢結(jié)果外,第二個(gè)表不滿足聯(lián)接條件的記錄也出現(xiàn)在查詢結(jié)果中。(2)查詢結(jié)果的記錄個(gè)數(shù)以第二個(gè)表的記錄個(gè)數(shù)為準(zhǔn),沒(méi)有匹配的字段值,自動(dòng)填寫NULL。3)右聯(lián)接查詢59【例6-35】為學(xué)生和選課表建立右聯(lián)接。命令如下:SELECT*FROM學(xué)生RIGHTJOIN選課;ON學(xué)生.學(xué)號(hào)=選課.學(xué)號(hào)部分結(jié)果如圖6.32所示。

圖6.32【例6-35】為學(xué)生和選課表建立右聯(lián)接。命令如下:圖6.32604)完全聯(lián)接查詢【一般命令格式】SELECT…FROMTable1FULLJOINTable2ONTable1.Column=Table2.Column【命令說(shuō)明】該命令指除滿足聯(lián)接條件的記錄出現(xiàn)在查詢結(jié)果外,兩個(gè)表不滿足聯(lián)接條件的記錄也出現(xiàn)在查詢結(jié)果中。4)完全聯(lián)接查詢61【例6-36】為學(xué)生和選課表建立完全聯(lián)接。命令如下:SELECT*FROM學(xué)生FULLJOIN選課;ON學(xué)生.學(xué)號(hào)=選課.學(xué)號(hào)部分結(jié)果如圖6.33所示。圖6.33【例6-36】為學(xué)生和選課表建立完全聯(lián)接。命令如下:圖6.3622.子查詢【一般命令格式】SELECT…FROM…WHERE…(SELECT…FROM…)【命令說(shuō)明】(1)子查詢適合用于查詢結(jié)果必須先從一個(gè)查詢中來(lái)得來(lái)。(2)子查詢可以使用IN、NOTIN、關(guān)系運(yùn)算符等。【例6-37】查詢沒(méi)有選課的學(xué)生情況。命令如下:SELECT*FROM學(xué)生WHERE學(xué)號(hào)NOTIN;(SELECTDIST學(xué)號(hào)FROM選課)結(jié)果如圖6.34所示。2.子查詢【一般命令格式】63【例6-38】統(tǒng)計(jì)學(xué)生表中的記錄個(gè)數(shù)。命令如下:SELECT姓名FROM學(xué)生WHERE學(xué)號(hào)IN;(SELECT學(xué)號(hào)FROM選課GROUPBY1HAVINGCOUNT(課程號(hào))>4)結(jié)果如圖6.35所示。圖6.34圖6.35【例6-38】統(tǒng)計(jì)學(xué)生表中的記錄個(gè)數(shù)。命令如下:圖6.34圖646.5本章實(shí)訓(xùn)實(shí)驗(yàn)?zāi)康模菏煜じ髡Z(yǔ)句的命令格式和功能熟練掌握數(shù)據(jù)定義語(yǔ)句的使用熟練掌握數(shù)據(jù)操作語(yǔ)句對(duì)表中數(shù)據(jù)的靈活操作

重點(diǎn)掌握查詢語(yǔ)句的靈活使用

6.5本章實(shí)訓(xùn)實(shí)驗(yàn)?zāi)康模?5根據(jù)下面提供的數(shù)據(jù),用SQL完成以下的操作。1.創(chuàng)建數(shù)據(jù)庫(kù)TSGL,并打開。建立程序61.prg,并輸入以下命令:createdatabasetsglopendatabasetsgl2.在數(shù)據(jù)庫(kù)TSGL中創(chuàng)建以下表。表的結(jié)構(gòu)如下:TS(SSHC(10),SMC(30),ZZC(6),TSDJHC(10),CBSC(10),JGN(6.2))JYZ(JSZHC(5),XMC(10),XBMC(8),BJC(4))JYDJ(JSZHC(5),TSDJHC(6),JSRQD)建立程序62.prg,并輸入以下命令:createtablets(sshc(2),smc(30),zzc(6),tsdjhc(10),cbsc(10),jgn(6.2))createtablejyz(jszhc(5)primarykey,xmc(10),xbmc(8),bjc(4))createtablejydj(jszhc(5),tsdjhc(6),jsrqd)實(shí)驗(yàn)內(nèi)容:根據(jù)下面提供的數(shù)據(jù),用SQL完成以下的操作。實(shí)驗(yàn)內(nèi)容:663.給數(shù)據(jù)庫(kù)TSGL中所創(chuàng)建表輸入數(shù)據(jù),具體數(shù)據(jù)如下:表TS的數(shù)據(jù)如下表:sshsmzztsdjhcbsjgTP311.138VisualFoxPro程序設(shè)計(jì)教程匡松T00101川大29TP311.138VisualFoxPro程序設(shè)計(jì)教程匡松T00102川大29TP311.138數(shù)據(jù)庫(kù)應(yīng)用基礎(chǔ)周察金T00201高等20.90TP311.138SQLServer2000實(shí)例教程楊學(xué)全T00301電子25C931.6管理信息系統(tǒng)李永平C00101科學(xué)18表JYZ的數(shù)據(jù)如下表:jszhxmxbmbj01101揚(yáng)揚(yáng)電子系01-101201田田計(jì)算機(jī)系02-101202同同計(jì)算機(jī)系02-201102天天電子系01-23.給數(shù)據(jù)庫(kù)TSGL中所創(chuàng)建表輸入數(shù)據(jù),具體數(shù)據(jù)如下:ssh67表jydj的數(shù)據(jù)如下表:jszhtsdjhjsrq01201C002012005-03-2001101T001012005-03-1601202T002012005-04-2101102T002012005-03-2001101T002012005-03-1601102T003012005-03-0501101T003012005-04-1601202T001012005-03-0601201T002012005-03-20表jydj的數(shù)據(jù)如下表:jszhtsdjhjsrq0120168建立程序63.prg,并輸入以下命令:opendatabasetsgl*給表TS插入數(shù)據(jù)*insertintotsvalues("TP311.138","VisualFoxPro程序設(shè)計(jì)教程","匡松","T00101","川大",29)insertintotsvalues("TP311.138","VisualFoxPro程序設(shè)計(jì)教程","匡松","T00102","川大",29)insertintotsvalues("TP311.138","數(shù)據(jù)庫(kù)應(yīng)用基礎(chǔ)","周察金","T00201","高等",20.90)insertintotsvalues("TP311.138","SQLServer2000實(shí)例教程","楊學(xué)全","T00301","電子",25)insertintotsvalues("C9

溫馨提示

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

評(píng)論

0/150

提交評(píng)論