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

下載本文檔

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

文檔簡介

第6章 SQL語句,(時間:8次課,16學(xué)時),第6章 SQL語句,學(xué)習(xí)目的與要求: SQL是結(jié)構(gòu)化查詢語言(Stuctured Query Language)的縮寫,其功能包括數(shù)據(jù)查詢、數(shù)據(jù)操縱、數(shù)據(jù)定義和數(shù)據(jù)控制四個部分。SQL語言擁有使用方式靈活、語句簡潔、功能齊全等特點,深受用戶歡迎,已成為目前應(yīng)用最廣泛的關(guān)系數(shù)據(jù)庫語言,幾乎所有的關(guān)系型數(shù)據(jù)庫型系統(tǒng)都支持它。 Visual FoxPro并不支持所有的SQL語句,它只支持其中的子集。本章將介紹常用的SQL語句使用,主要包括數(shù)據(jù)查詢、數(shù)據(jù)定義和數(shù)據(jù)操作功能。要求熟練掌握這些命令的應(yīng)用。,第6章 SQL語句,6.1 數(shù)據(jù)庫的操作語句 6.2 表的創(chuàng)建與刪除語句 6.3 SQL的數(shù)據(jù)操作功能 6.4 SQL的數(shù)據(jù)查詢功能 6.5 本章實訓(xùn) 6.6 本章習(xí)題,6.1 數(shù)據(jù)庫的操作語句,6.1.1 數(shù)據(jù)庫的創(chuàng)建 6.1.2 數(shù)據(jù)庫的刪除,6.1.1 數(shù)據(jù)庫的創(chuàng)建,SQL創(chuàng)建數(shù)據(jù)庫的命令和第三章講的命令一樣,這里只做簡單介紹。 【命令格式】 CREATE DATABASE DatabaseName 【命令說明】 DatabaseName指的是所要創(chuàng)建的數(shù)據(jù)名。 具體應(yīng)用見【例6-1】。,【例6-1】創(chuàng)建名為CJGL的數(shù)據(jù)庫。命令如下: CREATE DATABASE CJGL &在當(dāng)前路徑下創(chuàng)建了名為CJGL的數(shù)據(jù)庫。 MODIFY DATABASE &打開名為CJGL的數(shù)據(jù)庫設(shè)計器,如圖6.1所示。,圖6.1,6.1.2 數(shù)據(jù)庫的刪除,【命令格式】 DELETE DATABASE DatabaseName 【命令說明】 DatabaseName指的是所要刪除的數(shù)據(jù)名。但在刪除數(shù)據(jù)庫之前,必須先關(guān)閉該數(shù)據(jù)庫。 具體應(yīng)用見【例6-2】,【例6-2】刪除名為CJGL的數(shù)據(jù)庫。命令如下: CLOSE DATABASE &關(guān)閉例6-1所建立的數(shù)據(jù)庫。 DELETE DATABASE CJGL &刪除已經(jīng)關(guān)閉的數(shù)據(jù)庫,彈出如圖6.2所示,單擊【是】按鈕就刪除了該數(shù)據(jù)庫。,圖6.2,6.2 表的創(chuàng)建和刪除語句,6.2.1 表的創(chuàng)建 6.2.2 表結(jié)構(gòu)的修改 6.2.3 表的刪除 6.2.4 將表移出數(shù)據(jù)庫 6.2.5 將自由表添加到數(shù)據(jù)庫,6.2.1 表的創(chuàng)建,【一般常用命令格式】 CREATE TABLE|DBF TableName FREE (FieldName1 FieldType (nFieldWidth,nPrecision) NULL|NOT NULL CKECK lExpression1 ERROR cMessagetext1 DEFAULT eExpression1 PRIMARY KEY|UNIQUE ,FieldName2 【命令說明】 (1)TableName指的是所要創(chuàng)建的表名。 (2)FREE指的是要創(chuàng)建一個自由表。 (3)FieldName1指的是新建表的字段名。,(4)FieldType指的是字段的數(shù)據(jù)類型,數(shù)據(jù)類型得用英文表示,具體見第三章所介紹的。 (5)nFieldWidth指的是字段的寬度。 (6)nPrecision指的是數(shù)值型數(shù)據(jù)的小數(shù)位數(shù)。 (7)NULL|NOT NULL指的字段中是否允許保存空值。 (8)CKECK lExpression1 ERROR cMessagetext1指的是驗證字段的值是否符合指定的表達式,不符合可以有錯誤提示信息。 (9)DEFAULT eExpression1指的是給指定字段設(shè)置默認值。 (10)PRIMARY KEY|UNIQUE指的是給指定字段設(shè)置主索引或唯一索引。,【例6-3】在數(shù)據(jù)庫“成績管理”中創(chuàng)建數(shù)據(jù)庫表XS。命令如下: OPEN DATABASE 成績管理 CREATE TABLE XS (XH C(2),XM C(10), XB C(2),CSRQ D, SFTY L,XBBH C(2) &在成績管理數(shù)據(jù)庫中建立表XS,如圖6.3所示。,圖6.3,【例6-4】創(chuàng)建數(shù)據(jù)庫表XS1,要求給XB字段定義規(guī)則:XB的值為“男”或“女”,出錯提示信息為“性別必須為男或者女”;XH為主關(guān)鍵字,不允許為空值;SFTY默認值為.T.。命令如下: CREATE TABLE XS1 (XH C(2) NOT NULL PRIMARY KEY,XM C(10), XB C(2) CHECK XB=”男” OR XB=”女”,CSRQ D, SFTY L DEFAULT .T.,XBBH C(2) 然后查看表XS1的結(jié)構(gòu),如圖6.4所示。,圖6.4,6.2.2 表結(jié)構(gòu)的修改,1. 添加字段 【命令格式】 ALTER TABLE TabelName1 ADD COLUNMN FieldName1 FieldType (nFieldWidth,nPrecision) NULL|NOT NULL CHECK lExpression1 ERROR cMessagetext1 DEFAULT eExpression1 PRIMARY KEY|UNIQUE 【命令說明】 這里的參數(shù)的含義和創(chuàng)建表的含義一致,參照執(zhí)行。,【例6-5】為XS表添加NL字段,NL大于零。命令如下: ALTER TABLE XS ADD NL N(2) CHECK NL0 ERROR ”年齡必須大于零” 命令執(zhí)行后進入表XS的表設(shè)計器,如圖6.5所示。,圖6.5,2. 修改字段 【命令格式】 ALTER TABLE TabelName1 ALTER COLUNMN FieldName1 FieldType (nFieldWidth,nPrecision) NULL|NOT NULL SET CHECK lExpression1 ERROR cMessagetext1 SET DEFAULT eExpression1 DROP CHECK DROP DEFAULT RENAME COLUMN FieldName1 TO FieldName2,【命令說明】 (1)SET CHECK lExpression1 ERROR cMessagetext1指給指定字段增加規(guī)則或修改規(guī)則。 (2)SET DEFAULT eExpression1指給指定字段增加默認值或修改默認值。 (3)DROP CHECK指刪除指定字段的規(guī)則。 (4)DROP DEFAULT指刪除指定字段的默認值。 (5)RENAME COLUMN FieldName1 TO FieldName2指給字段FieldName1重新命名為FieldName2。 其他的參數(shù)的含義和創(chuàng)建表的含義一致,參照執(zhí)行。,【例6-6】為XS表修改NL字段有效性規(guī)則,NL16。命令如下: ATLER TABLE XS ALTER NL N(2) SET CHECK NL16 ERROR ”年齡必須大于16周歲!” 【例6-7】把SP1表中NL字段更改為RXNL。命令如下: ATLER TABLE XS RENAME COLUMN NL TO RXNL 【例6-8】刪除XS表RXNL字段的有效性規(guī)則。命令如下: ATLER TABLE XS ALTER RXNL DROP CHECK,6.2.3 表的刪除,【命令格式】 DROP TABLE TableName 【命令說明】 該命令是直接從磁盤上刪除指定的表名的DBF文件。但該表如果是數(shù)據(jù)庫表,就必須先打開該表所在的數(shù)據(jù)庫,然后使用該命令刪除表,否則數(shù)據(jù)庫中將還保留有該表的信息,會有錯誤提示。 【例6-10】刪除表SP1。 DROP TABLE SP1,6.2.4 將表移出數(shù)據(jù)庫,【命令格式】 REMOVE TABLE TableName|?DELETE 【命令說明】 (1)該命令是把指定數(shù)據(jù)庫表移出數(shù)據(jù)庫。 (2)?指調(diào)出【移去】對話框,從中選擇要移去的表。 (3)DELETE指把指定表移出后,并從磁盤上刪除。 【例6-11】將表XS移出數(shù)據(jù)庫CJGL,但不刪除。命令和操作如下:,【例6-11】將表XS移出數(shù)據(jù)庫CJGL,但不刪除。命令和操作如下: OPEN DATABASE CJGL MODIFY DATABASE REMOVE TABLE XS &該命令執(zhí)行后出現(xiàn)如圖6.6所示的對話框。 在圖6.6中單擊【是】按鈕,就把表XS移出數(shù)據(jù)庫CJGL,但并沒有刪除表XS,數(shù)據(jù)庫設(shè)計器如圖6.7所示。,圖6.6,圖6.7,6.2.5 將自由表添加到數(shù)據(jù)庫,【命令格式】 ADD TABLE TableName|?NAME LongTableName 【命令說明】 (1)該命令是把指定自由表添加到指定的數(shù)據(jù)庫中,成為數(shù)據(jù)庫表。 (2)?:指調(diào)出【打開】對話框,從中選擇要添加的自由表。 (3)NAME LongTableName:指為添加的數(shù)據(jù)庫表指定一個長名。,【例6-12】將表XS添加到數(shù)據(jù)庫CJGL中。命令如下: OPEN DATABASE CJGL MODIFY DATABASE ADD TABLE XS 命令執(zhí)行后數(shù)據(jù)庫設(shè)計器如圖6.8所示。,圖6.8,6.3 SQL的數(shù)據(jù)操作功能,6.3.1 數(shù)據(jù)的插入 6.3.2 數(shù)據(jù)的更新 6.3.3 數(shù)據(jù)的刪除 SQL的數(shù)據(jù)操作功能只要是對已有表中數(shù)據(jù)的操作,主要包括記錄的插入、更新和刪除三大方面的操作。,從本節(jié)開始將要使用“成績管理”數(shù)據(jù)庫中的表的數(shù)據(jù),其具體數(shù)據(jù)如圖6.9所示:,圖6.9,6.3.1 數(shù)據(jù)的插入,Visual FoxPro支持兩種SQL數(shù)據(jù)的插入格式,第一種是標準格式,第二種是特殊格式。一般使用第一種格式。 【第一種命令格式】 INSERT INTO TableName(FieldName1,FieldName2,) VALUES(eExpression1,eExpression2,) 【命令說明】 (1)TableName指所要插入記錄的表名。 (2)FieldName1,FieldName2,指插入記錄所要用到的字段。該參數(shù)可以不選,默認為對所有字段都需要插入值。 (3)eExpression1,eExpression2,指插入記錄對應(yīng)字段的值。 (4)所插入字段的值必須和該對應(yīng)的字段的數(shù)據(jù)要求一致,包括數(shù)據(jù)類型、數(shù)據(jù)長度的范圍、數(shù)據(jù)小數(shù)位數(shù)。 (5)所插入的記錄字段的值必須和字段的個數(shù)保持一致,不能多也不能少,否則會出錯。,【例6-13】給課程表插入一條記錄。命令如下: INSERT INTO 課程(課程號,課程名稱,學(xué)分) VALUES(C6,桌面程序設(shè)計,5) 由于該命令是對表中所有字段都插入一個值,還可以使用下面命令進行操作: INSERT INTO 課程 VALUES(C6,桌面程序設(shè)計,5) 命令執(zhí)行結(jié)果如圖6.10所示。,圖6.10,【第二種命令格式】 INSERT INTO TableName FROM ARRAY AraayName 【命令說明】 (1)該命令是從指定的數(shù)據(jù)組中插入數(shù)據(jù)成為記錄。 (2)AraayName指數(shù)組名。該數(shù)組必須先定義,而且各元素的賦值符合指定表相應(yīng)字段的定義,這樣才可以使用數(shù)組插入記錄。,【例6-14】給課程表插入一條記錄。命令序列如下: DIME X(3) &定義一個一維數(shù)組X,有3個元素。 X(1)=C7 X(2)=專業(yè)英語 X(3)=3 INSERT INTO 課程 FROM ARRAY X 命令執(zhí)行結(jié)果如圖6.11所示。,圖6.11,6.3.2 數(shù)據(jù)的更新,【命令格式】 UPDATE TableName SET ColumnName1=eExpression1,ColumnName2=eExpression2) WHERE Conditon 【命令說明】 (1)ColumnName1、ColumnName2指對所要修改的字段名。 (2)eExpression1、eExpression2指對所要修改字段更新的數(shù)據(jù)值??梢允浅A亢捅磉_式。 (3)WHERE Conditon 指對滿足條件的數(shù)據(jù)進行更新。 (4)所更新字段和新的值必須保持一致。,【例6-15】把課程表中政治課程的課程名更改為“思想道德”,學(xué)分改為4。命令如下: UPDATE 課程; SET 課程名稱=思想道德,學(xué)分=4; WHERE 課程名稱=政治 命令執(zhí)行結(jié)果如圖6.12所示。,圖6.12,6.3.3 數(shù)據(jù)的刪除,【命令格式】 DELETE FROM TableName WHERE Conditon 【命令說明】 (1)該命令是對指定表的記錄進行邏輯刪除,需要物理刪除還要借助PACK命令。 (2)WHERE Conditon 指對滿足條件的數(shù)據(jù)進行刪除。,【例6-16】刪除課程表中課程號為“C6”課程記錄。命令如下: DELETE FROM 課程 WHERE 課程號=C6 命令執(zhí)行結(jié)果如圖6.13所示。圖中的黑色方塊表示作了刪除標記,但記錄并沒有真正刪除,還保留在表中。如果要去掉刪除標記和物理刪除該條記錄,可以參見第三章所講解的表數(shù)據(jù)刪除方法。,圖6.13,6.4 SQL的數(shù)據(jù)查詢功能,6.4.1 數(shù)據(jù)庫的簡單查詢 6.4.2 數(shù)據(jù)庫的復(fù)雜查詢 SQL的數(shù)據(jù)查詢功能是數(shù)據(jù)庫中最常用、最重要的數(shù)據(jù)操作,它可以在指定的表中查詢滿足條件的數(shù)據(jù),該命令應(yīng)用廣泛,但格式比較復(fù)雜。,【命令格式】 SELECT ALL|DISTINCE TOP nExpr PERCENT Alias.Select_Item AS Column_Name, Alias.Select_Item AS Column_Name FROM FORCE DatabaseName!Table AS Local_Alias INNER | LEFT OUTER | RIGHT OUTER | FULL OUTER JOIN DatabaseName!Table AS Local_AliasON JoinCondition INTO Destination| TO FILE FileName ADDITIVE | TO PRINTER PROMPT | TO SCREEN PREFERENCE PreferenceName NOCONSOLEPLAINNOWAIT WHERE JoinCondition AND JoinCondition .AND | OR FilterCondition AND | OR FilterCondition . GROUP BY GroupColumn , GroupColumn .HAVING FilterCondition UNION ALL SELECT命令 ORDER BY Order_Item ASC | DESC , Order_Item ASC | DESC . 由于該命令格式比較復(fù)雜,下面將分別在各種應(yīng)用中進行說明和介紹:,6.4.1 數(shù)據(jù)庫的簡單查詢,數(shù)據(jù)列查詢 條件查詢 簡單計算查詢 分組查詢 查詢結(jié)果排序 查詢結(jié)果保存,【命令格式】 SELECT ALL|DISTINCE Alias.Select_Item1 AS Column1_Name, Alias.Select_Item2 AS Column2_Name FROM DatabaseName!Table AS Local_Alias 【命令說明】 (1)ALL|DISTINCE:指查詢表中所有數(shù)據(jù)或去掉重復(fù)的記錄。 (2)Alias.Select_Item1 AS Column1_Name:從指定的表中(可以使用別名)引用相關(guān)的字段或著表達式,AS Column1_Name對查詢結(jié)果的列名重新命名。 (3)FROM DatabaseName!Table AS Local_Alias:指從指定的表(可以是數(shù)據(jù)庫中的表)查詢數(shù)據(jù),這里可以給表指定一個別名,在所有字句中都可以應(yīng)用。,1 .數(shù)據(jù)列查詢,(4)該命令是從指定表中查詢表中的所有或者部分列的數(shù)據(jù)。 【例6-17】查詢學(xué)生表中所有數(shù)據(jù)。命令如下: SELECT * FROM 學(xué)生 &這里*代表所有字段 結(jié)果如圖6.14所示。 【例6-18】查詢學(xué)生表的學(xué)號和姓名。命令如下: SELECT 學(xué)號 AS 學(xué)生的編號,姓名 AS XM FROM 學(xué)生 結(jié)果如圖6.15所示。,圖6.14,圖6.15,【例6-19】查詢選課表中有選課的學(xué)生的學(xué)號。命令如下: SELECT DISTINCT 學(xué)號 FROM 選課 結(jié)果如圖6.16所示。,圖6.16,【主要命令格式】 SELECT FROM WHERE Condition 【命令說明】 該命令是查詢滿足條件的數(shù)據(jù),Condition為條件表達式。具體應(yīng)用如下: (1)使用關(guān)系和邏輯表達式的條件查詢。 【例6-20】查詢成績不及格的情況。命令如下: SELECT * FROM 選課 WHERE 成績60 結(jié)果如圖6.17所示。,2 .條件查詢,圖6.17,(2) 使用范圍查詢BETWEENAND或者NOT BETWEEN AND。 【例6-21】查詢成績在80到100之間的情況。命令如下: SELECT * FROM 選課 WHERE 成績 BETWEEN 80 AND 100 結(jié)果如圖6.18所示。,圖6.18,(3)使用字符匹配查詢LIKE或NOT LIKE 。 %:代表任意長度的字符串。 _:代表任意單個字符。 【例6-22】查詢所以姓王的學(xué)生情況。命令如下: SELECT * FROM 學(xué)生 WHERE 姓名 LIKE 王% 結(jié)果如圖6.19所示。,圖6.19,(4)空值查詢IS NULL或IS NOT NULL。 【例6-23】查詢學(xué)生表系部編號不為NULL的情況。命令如下: SELECT * FROM 學(xué)生 WHERE 系部編號 IS NOT NULL 結(jié)果如圖6.20所示。,圖6.20,(5)確定集合查詢IN或NOT IN。 【例6-24】查詢系部編號為”2”或”3”的學(xué)生情況。命令如下: SELECT * FROM 學(xué)生 WHERE 系部編號 IN (2,3) 結(jié)果如圖6.21所示。,圖6.21,【主要命令格式】 SELECT . FROM WHERE Condition 【命令說明】 (1)SELECT短語后主要書寫計算表達式和函數(shù)。 (2)計算檢索的函數(shù)主要有: COUNT(DISTINCT|ALL)*)統(tǒng)計記錄個數(shù)。 SUM(DISTINCT|ALL)計算一數(shù)值列的總和。 AVG(DISTINCT|ALL)計算一數(shù)值列的平均值。 MAX(DISTINCT|ALL)求一列的最大值。 MIN(DISTINCT|ALL)求一列的最小值。,3 .簡單計算查詢,【例6-25】統(tǒng)計學(xué)生表中的記錄個數(shù)。命令如下: SELECT COUNT(*) AS 學(xué)生人數(shù) FROM 學(xué)生 結(jié)果如圖6.22所示。 【例6-26】計算選課表的成績總和、平均分、最大分、最小分。命令如下: SELECT SUM(成績) AS 總和,AVG(成績) AS 平均分,MAX(成績) AS最大分,MIN(成績) AS 最小分 FROM 選課 結(jié)果如圖6.23所示。,圖6.22,圖6.23,【主要命令格式】 SELECT FROM . GROUP BY GroupColumn , GroupColumn .HAVING FilterCondition 【命令說明】 (1)GroupColumn是指分組的標志列。 (2)HAVING FilterCondition是指限制分組的條件。 【例6-27】分別統(tǒng)計學(xué)生表中的男女生人數(shù)。命令如下: SELECT 性別,COUNT(*) AS 人數(shù) FROM 學(xué)生 GROUP BY 性別 結(jié)果如圖6.24所示。,4 .分組查詢,【例6-28】統(tǒng)計成績有兩門以上在70分的情況。命令如下: SELECT 學(xué)號,COUNT(課程號) AS 課程門數(shù) FROM 選課; WHERE 成績=70; GROUP BY 學(xué)號 HAVING COUNT(*)=2 結(jié)果如圖6.25所示。,圖6.24,圖6.25,【主要命令格式】、 SELECT TOP nExpr PERCENT FROM . ORDER BY Order_Item ASC | DESC , Order_Item ASC | DESC . 【命令說明】 (1)Order_Item:指的選定的對查詢結(jié)果排序的列。 (2)ASC | DESC:指的是排序的順序。ASC指升序,默認為升序。DESC指的是降序。 (3)TOP nExpr PERCENT:指查詢結(jié)果顯示特定數(shù)目的記錄。TOP nExpr表示現(xiàn)在最前面的N條記錄。TOP nExpr PERCENT表示顯示查詢結(jié)果記錄數(shù)目的百分比。這里必須和排序結(jié)合使用,不能單獨使用。,5 .查詢結(jié)果排序,【例6-29】對學(xué)生表數(shù)據(jù)按出生日期的升序降序排序。命令如下: SELECT * FROM 學(xué)生; ORDER BY 出生日期 DESC ORDER BY 成績 DESC &結(jié)果如圖6.27所示。,圖6.26,圖6.27,【主要命令格式】 SELECT FROM . INTO TABLE|CURSOR Destination| TO FILE FileName ADDITIVE | TO PRINTER PROMPT | TO SCREEN 【命令說明】 (1)INTO TABLE|CURSOR Destination:指查詢結(jié)果保存到新表。將結(jié)果永久保存在表中則使用INTO TABLE;如果接查詢結(jié)果保存到臨時表中則使用INTO CURSOR,臨時表的不永久保存,關(guān)閉后不在存在。 (2)TO FILE FileName: ADDITIVE指查詢結(jié)果保存到文本文件。 (3)TO PRINTER PROMPT:指查詢結(jié)果輸出到打印機。 (4)TO SCREEN:指查詢結(jié)果到屏幕。,6 .查詢結(jié)果保存,【例6-31】查詢成績不及格的情況,將結(jié)果保存到表BJGQK。命令如下: SELECT * FROM 選課 ; WHERE 成績60 ; INTO TABLE BJGQK SELECT * FROM BJGQK 表BJGQK的記錄數(shù)據(jù)如圖6.28所示。,圖6.28,6.4.2 數(shù)據(jù)的復(fù)雜查詢,聯(lián)接查詢 子查詢,1)自然聯(lián)接查詢 自然聯(lián)接查詢也叫等值聯(lián)接查詢或者內(nèi)聯(lián)接查詢,一般用于查詢結(jié)果須從兩個表或兩個以上表中去獲取。 【一般命令格式】 SELECT FROM Table1 INNER JOIN Table2 ON Table1.Column= Table2.Column 或者 SELECT FROM Table1,Table2 WHERE Table1.Column= Table2.Column AND ,1 .聯(lián)接查詢,【命令說明】 (1)命令格式中我們一般使用第二種。指的是從多個表中查詢滿足條件的數(shù)據(jù)。要求多個表中互相之間有聯(lián)系保證有同名字段。 (2)Table1.Column= Table2.Column指兩個有聯(lián)系的表中具有的相同字段名。這是建立聯(lián)接查詢的基本條件。 (3)該命令給多表建立連接后,可以和前面所有講的簡單查詢一起結(jié)合使用,查詢滿足條件的數(shù)據(jù)。 【例6-32】查詢學(xué)生李小明所選課的情況。命令如下: SELECT A.學(xué)號,姓名,課程名稱,成績 FROM 學(xué)生 A,選課 B,課程 C; WHERE A.學(xué)號=B.學(xué)號 AND C.課程號=B.課程號 AND 姓名=”李小明” 結(jié)果如圖6.29所示。,【例6-33】統(tǒng)計每門課程選課學(xué)生的人數(shù)。命令如下: SELECT 課程.課程號,課程名稱,COUNT(學(xué)號) AS 學(xué)生人數(shù) FROM 課程,選課; WHERE 課程.課程號=選課.課程號 ; GROUP BY 1 結(jié)果如圖6.30所示。命令中的1指的是查詢結(jié)果所包含的第一列,也就是課程.課程號。,圖6.29,圖6.30,2)左聯(lián)接查詢 【一般命令格式】 SELECT FROM Table1 LEFT JOIN Table2 ON Table1.Column= Table2.Column 【命令說明】 (1)該命令指除滿足聯(lián)接條件的記錄出現(xiàn)在查詢結(jié)果外,第一個表不滿足聯(lián)接條件的記錄也出現(xiàn)在查詢結(jié)果中。 (2)查詢結(jié)果的記錄個數(shù)以第一個表的記錄個數(shù)為準,沒有匹配的字段值,自動填寫NULL。,【例6-34】為學(xué)生和選課表建立左聯(lián)接。命令如下: SELECT * FROM 學(xué)生 LEFT JOIN 選課; ON 學(xué)生.學(xué)號=選課.學(xué)號 部分結(jié)果如圖6.31所示。,圖6.31,3)右聯(lián)接查詢 【一般命令格式】 SELECT FROM Table1 RIGHT JOIN Table2 ON Table1.Column= Table2.Column 【命令說明】 (1)該命令指除滿足聯(lián)接條件的記錄出現(xiàn)在查詢結(jié)果外,第二個表不滿足聯(lián)接條件的記錄也出現(xiàn)在查詢結(jié)果中。 (2)查詢結(jié)果的記錄個數(shù)以第二個表的記錄個數(shù)為準,沒有匹配的字段值,自動填寫NULL。,【例6-35】為學(xué)生和選課表建立右聯(lián)接。命令如下: SELECT * FROM 學(xué)生 RIGHT JOIN 選課; ON 學(xué)生.學(xué)號=選課.學(xué)號 部分結(jié)果如圖6.32所示。,圖6.32,4)完全聯(lián)接查詢 【一般命令格式】 SELECT FROM Table1 FULL JOIN Table2 ON Table1.Column= Table2.Column 【命令說明】 該命令指除滿足聯(lián)接條件的記錄出現(xiàn)在查詢結(jié)果外,兩個表不滿足聯(lián)接條件的記錄也出現(xiàn)在查詢結(jié)果中。,【例6-36】為學(xué)生和選課表建立完全聯(lián)接。命令如下: SELECT * FROM 學(xué)生 FULL JOIN 選課; ON 學(xué)生.學(xué)號=選課.學(xué)號 部分結(jié)果如圖6.33所示。,圖6.33,2. 子查詢,【一般命令格式】 SELECT FROM WHERE (SELECT FROM ) 【命令說明】 (1)子查詢適合用于查詢結(jié)果必須先從一個查詢中來得來。 (2)子查詢可以使用IN、NOT IN、關(guān)系運算符等。 【例6-37】查詢沒有選課的學(xué)生情況。命令如下: SELECT * FROM 學(xué)生 WHERE 學(xué)號 NOT IN; (SELECT DIST 學(xué)號 FROM 選課) 結(jié)果如圖6.34所示。,【例6-38】統(tǒng)計學(xué)生表中的記錄個數(shù)。命令如下: SELECT 姓名 FROM 學(xué)生 WHERE 學(xué)號 IN; (SELECT 學(xué)號 FROM 選課 GROUP BY 1 HAVING COUNT(課程號)4) 結(jié)果如圖6.35所示。,圖6.34,圖6.35,6.5 本 章 實 訓(xùn),實驗?zāi)康模?熟悉各語句的命令格式和功能 熟練掌握數(shù)據(jù)定義語句的使用 熟練掌握數(shù)據(jù)操作語句對表中數(shù)據(jù)的靈活操作 重點掌握查詢語句的靈活使用,根據(jù)下面提供的數(shù)據(jù),用SQL完成以下的操作。 1創(chuàng)建數(shù)據(jù)庫TSGL,并打開。建立程序61.prg,并輸入以下命令: create database tsgl open database tsgl 2在數(shù)據(jù)庫TSGL中創(chuàng)建以下表。表的結(jié)構(gòu)如下: TS(SSH C(10),SM C(30),ZZ C(6),TSDJH C(10),CBS C(10),JG N(6.2)) JYZ(JSZH C(5),XM C(10),XBM C(8),BJ C(4)) JYDJ(JSZH C(5),TSDJH C(6),JSRQ D) 建立程序62.prg,并輸入以下命令: create table ts(ssh c(2),sm c(30),zz c(6),tsdjh c(10),cbs c(10),jg n(6.2) create table jyz(jszh c(5) primary key,xm c(10),xbm c(8),bj c(4) create table jydj(jszh c(5),tsdjh c(6),jsrq d),實驗內(nèi)容:,3給數(shù)據(jù)庫TSGL中所創(chuàng)建表輸入數(shù)據(jù),具體數(shù)據(jù)如下: 表TS的數(shù)據(jù)如下表:,表JYZ的數(shù)據(jù)如下表:,表jydj的數(shù)據(jù)如下表:,建立程序63.prg,并輸入以下命令: open database tsgl *給表TS插入數(shù)據(jù)* insert into ts values(“TP311.138“,“Visual FoxPro程序設(shè)計教程“,“匡松“,“T00101“,“川大“,29) insert into ts values(“TP311.138“,“Visual FoxPro程序設(shè)計教程“,“匡松“,“T00102“,“川大“,29) insert into ts values(“TP311.138“,“數(shù)據(jù)庫應(yīng)用基礎(chǔ)“,“周察金“,“T00201“,“高等“,20.90) insert into ts values(“TP311.138“,“ SQL Server2000實例教程“,“楊學(xué)全“,“T00301“,“電子“,25) insert into ts values(“C931.6“,“管理信息系統(tǒng)“,“李永平“,“C00101“,“科學(xué)“,18) *代碼接下頁,*給表JYZ插入數(shù)據(jù)* insert into jyz values(“01001“,“揚揚“,“電子系“,“01-1“) insert into jyz values(“01201“,“田田“,“計算機系“,“02

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論