第4章結構化查詢語言SQL和報表課件_第1頁
第4章結構化查詢語言SQL和報表課件_第2頁
第4章結構化查詢語言SQL和報表課件_第3頁
第4章結構化查詢語言SQL和報表課件_第4頁
第4章結構化查詢語言SQL和報表課件_第5頁
已閱讀5頁,還剩110頁未讀, 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、第4章 結構化查詢語言SQL和報表SQL語言的基本概述數據定義語言DDL數據操縱語言DML查詢和SELECT 命令報表和標簽小結2022/10/21第4章 結構化查詢語言SQL和報表SQL語言的基本概述204.1 SQL語言的基本概述結構化查詢語言(Structured Query Language,簡稱SQL)SQL是用于對存放在計算機數據庫中的數據進行組織、管理和檢索的工具,是一種用于和數據庫進行交互通信的計算機語言。SQL是1974年由Boyce和Chamberlin提出的,并在IBM公司研制的System R上首次實現了這種語言,由于它的功能豐富,使用方式靈活和語言簡潔易學等突出特點,

2、很受計算機界的歡迎?,F在SQL語言已成為關系型數據庫操縱語言的國際標準。 VFP 提供了SQL 語言支持 2022/10/224.1 SQL語言的基本概述結構化查詢語言(Structu4.1.1 SQL語言的基本概念SQL語言支持關系型數據庫的三級模式結構,其中外模式對應于視圖和部分基本表,模式對應于基本表,內模式對應于存儲文件。在SQL語言中,一個關系就對應于一個表,基本表本身是獨立存在的表,對應一個存儲文件;存儲文件的邏輯結構組成了關系型數據庫的內模式。視圖是從基本表或其他視圖導出的表,視圖只是一個虛表。 在用戶看來,視圖和基本表都是關系,而存儲文件對用戶是透明的。 2022/10/234

3、.1.1 SQL語言的基本概念SQL語言支持關系型數據庫4.1.2 SQL的基本功能SQL語言由3部分組成:數據定義語言DDL(Date Definition Language)。數據操縱語言DML(Date Manipulation Language)。數據控制語言DCL(Date Control Language)。其主要命令如表4-1所示。SQL功能命令數據定義語言DDLCreate、Drop、Alter數據操縱語言DMLSelect、Insert、Update、Delete數據控制語言DCLGrant、Revoke其中,數據定義語言DDL提供了完整的定義數據庫所必需的語言工具,用來創建

4、、修改、刪除數據庫對象;數據操縱語言DML用于查詢或者修改數據;數據控制語言DCL用來管理用戶的訪問權限,由于VFP 沒有權限管理功能,所以不支持DCL命令。 2022/10/244.1.2 SQL的基本功能SQL語言由3部分組成:SQL4.2 數據定義語言DDL數據定義語言是對關系模式的一級定義,用來定義被存放數據的結構和組織,以及數據項之間的關系。SQL數據定義語言可以用來定義數據表、視圖和索引。Create語句:用于定義和生成數據對象,比如創建表、視圖和索引。Drop語句:用于刪除一個現有的數據對象,比如視圖、表、索引。Alter語句:用于改變一個數據庫對象。比如對一個表的字段進行刪除、

5、添加和修改,或者修改表的結構。2022/10/254.2 數據定義語言DDL數據定義語言是對關系模式的一級定4.2.1 用Create語句創建基本表命令格式:CREATE TABLE 表名 FREE ( (寬度, 小數) NULLNOT NULL CHECKERROR DEFAULT PRIMARY KEY /UNIQUE , ) 命令功能:創建數據表的結構。 2022/10/264.2.1 用Create語句創建基本表命令格式:20224.2.1 用Create語句創建基本表(續)命令說明:CREATE TABLE表名:指定創建表文件名。FREE:在數據庫打開的情況下創建的是自由表。默認在數

6、據庫未打開時創建的是自由表,在數據庫打開時創建的是數據庫表。CHECK:為字段值指定約束條件;ERROR:用來指定當不滿足約束條件時顯示的出錯信息。DFAULT:指定默認的字段值。PRIMARY KEY:指定當前字段為主索引關鍵字;UNIQUE:指定當前字段為候選索引關鍵字。NULL/NOT NULL:表示該字段是否可以為空。 2022/10/274.2.1 用Create語句創建基本表(續)命令說明:24.2.1 用Create語句創建基本表(續)【例4.1】在圖書館管理系統中創建dzzl(讀者種類)表,包含zlbh(種類編號)、zlmc(種類名稱)、jssl(借書數量)、jsqx(借書期限

7、)、bz(備注)幾個字段。OPEN DATABASE 圖書館管理CTEATE TABLE dzzl(zlbh c(10) not null, zlmc c(10) not null, jssl c(8), jsqx c(8), Bz c(20) 若在命令窗口執行MODIFY STRUCTURE命令,就可以在彈出的對話框中見到dzzl表結構,如圖4-2所示。 圖4-2 創建的dzzl表結構2022/10/284.2.1 用Create語句創建基本表(續)【例4.1】4.2.1 用Create語句創建基本表(續)【例4.2】創建一個名為“通訊錄”的自由表,包含姓名、工作單位、電話號碼、家庭住址4個

8、字段,所得的表預覽如圖4-3所示。CREATE TABLE 通訊錄 FREE(姓名C(10),工作單位C(20), 電話號碼C(12), 家庭住址C(20)BROWSE由于沒有向表中添加任何記錄,所以在預覽時看不見任何的記錄。圖4-3 創建的通訊錄表2022/10/294.2.1 用Create語句創建基本表(續)【例4.2】4.2.1 用Create語句創建基本表(續)【例4.3】創建一個“圖書訂單”的數據庫,并在此數據庫中創建一個“圖書”表,圖書表含有訂單號、圖書編號、書名、單價、數量等字段。CREATE DATEBASE 圖書訂單CREATE TABLE 圖書( 訂單號 C(10);DE

9、FAULT 10001, 圖書編號 C(10) PRIMARY KEY,;書名C(10), 單價 N(8, 2);數量 N(6) CHECK 數量=100 AND 數量=1000;ERROR 數量范圍在100和1000之間)圖4-4 圖書表的索引圖預覽此表的設計器可以看見“圖書編號”已經被設為主索引,如圖4-4所示。 2022/10/2104.2.1 用Create語句創建基本表(續)【例4.3】4.2.1 用Create語句創建基本表(續)【例4.4】在圖書訂單數據庫中建立一個新表“訂單”表,含有訂單編號、圖書編號、客戶編號、訂貨日期、發貨日期幾個字段。OPEN DATABASE 圖書訂單C

10、REATE TABLE 訂單( 訂單編號 C(10) PRIMARY KEY,; 客戶編號 C(10), 訂貨日期 D, 發貨日期D;圖書編號C(10), FOREIGN KEY 圖書編號;TAG 圖書編號 REFERENCES 圖書) 圖4-5 圖書表和訂單表之間的關系在命令窗口中輸入“MODIFY DATABASE 訂數訂單”命令,可在彈出的“數據庫設計器”窗口中見到圖書表和訂單表之間已建立的關系,如圖4-5所示。 2022/10/2114.2.1 用Create語句創建基本表(續)【例4.4】4.2.2 用Alter修改基本表命令格式1:ALTER TABLE ADD/ALTERCOLU

11、MN (字段寬度,小數位數) NULLNOT NULL CHECKERROR DEFAULT PRIMARY KEY/UNIQUE REFERENCESTAG 命令功能:修改表中原有的字段,或者在表中增加新的字段。2022/10/2124.2.2 用Alter修改基本表命令格式1:2022/94.2.2 用Alter修改基本表(續)命令說明:ADD COLUMN(字段寬度,小數位數):增加新字段,并指定新增字段的名稱、類型、字段寬度及小數位數。NULLNOT NULL:指定新字段是否接受空值。ALTER COLUMN (字段寬度,小數位數):修改原有字段,并指定修改后的字段名稱、類型、字段寬度

12、及小數位數。其他的參數含義同 CREATE TABLE。2022/10/2134.2.2 用Alter修改基本表(續)命令說明:20224.2.2 用Alter修改基本表(續)【例4.5】修改在例4.2中創建的通訊錄表,增加一個“性別”字段,SQL 命令如下:ALTER TABLE 通訊錄 ADD COLUMN 性別 C(10)再把表中字段“家庭住址”修改為“工作地址”,SQL命令如下:ALTER TABLE 通訊錄 RENAME COLUMN 家庭住址 TO 工作地址預覽修改后的表如圖4-6所示,與圖4-3對比就可以發現多出了一個字段“性別”,字段“家庭住址”改為了“工作地址”。 圖4-6

13、修改后的通訊錄表2022/10/2144.2.2 用Alter修改基本表(續)【例4.5】修改在4.2.2 用Alter修改基本表(續)【例4.6】修改例4.3中創建的圖書表,將“書名”字段的寬度改為20且不準為空值。SQL命令如下:OPEN DATABASE 圖書訂單ALTER TABLE 圖書 ALTER 書名 C(20) NOT NULL命令格式2:ALTER TABLE ALTER COLUMN NULLNOT NULL SET CHECKERROR SET DEFAULT DROP CHECK DROP DEFAULT 2022/10/2154.2.2 用Alter修改基本表(續)【

14、例4.6】修改例4.2.2 用Alter修改基本表(續)命令功能:刪除或者設置字段的默認值或約束條件。命令說明: SET CHECKERROR:為字段設置約束條件。SET DEFAULT:設置默認值。DROP DEFAULT:刪除默認值。 DROP CHECK:刪除約束條件。 2022/10/2164.2.2 用Alter修改基本表(續)命令功能:刪除或者4.2.2 用Alter修改基本表(續)【例4.7】在例4.3創建的圖書表中,為“圖書編號”字段設置一個默認值200601并刪除數量的約束條件,SQL命令如下:ALTER TABLE 圖書 ALTER 圖書編號 SET DEFAULT 200

15、601ALTER TABLE 圖書 ALTER 數量 DROP CHECK2022/10/2174.2.2 用Alter修改基本表(續)【例4.7】在例44.2.2 用Alter修改基本表(續)命令格式3:ALTER TABLE DROP COLUMN ADD PRIMARY KEY TAG DROP PRIMARY KEY ADD UNIQUE TAG DROP UNIQUE TAG SET CHECK ERROR DROP CHECK ADD FOREIGN KEYTAGREFERENCESTAG DROP FOREIGN KEY TAG SAVE RENAME COLUMN TO 202

16、2/10/2184.2.2 用Alter修改基本表(續)命令格式3:2024.2.2 用Alter修改基本表(續)命令功能:刪除表中的字段、設置或刪除表的主索引、候選索引、對字段重新命名或者刪除指定的字段的約束條件。命令說明:DROP COLUMN:刪除指定的字段。ADD PRIMARY KEY TAG:建立主索引。DROP PRIMARY KEY:刪除主索引。ADD UNIQUE TAG :建立候選索引。DROP UNIQUE TAG:刪除候選索引。ADD FOREIGN KEYTAG:建立外索引。REFERENCESTAG:指定建立關聯的父表。 DROP FOREIGN KEY TAG S

17、AVE:刪除外索引。RENAME COLUMN TO:對字段重新命名。 2022/10/2194.2.2 用Alter修改基本表(續)命令功能:刪除表中4.2.2 用Alter修改基本表(續)【例4.8】在例4.3創建的圖書表中,為“書名”創建一個候選索引,并且刪除“數量”字段,如圖4-7所示。SQL語句如下:ALTER TABLE 圖書 ADD UNIQUE 書名;ALTER TABLE 圖書 DROP COLUMN 數量圖4-7 例4.8圖在圖4-7中,字段“數量”被刪除,并創建候選索引“書名”。 2022/10/2204.2.2 用Alter修改基本表(續)【例4.8】在例44.2.2

18、用Alter修改基本表(續)【例4.9】在第1章創建的“圖書管理系統”的dzzl中,為jssl創建一個默認值15,當輸入有錯誤時就會顯示“值為15”,刪除表中的候選索引。SQL語句如下:ALETER TABLE dzzl ALTER jssl SET DEFAULT 15;ERROR“值為15”;ALETER TABLE dzzl DROP UNIQUE TAG zlbh 2022/10/2214.2.2 用Alter修改基本表(續)【例4.9】在第14.2.3 用DROP 命令刪除一個表隨著數據庫設計的變化,數據庫的結構也在不斷的變化,新建的表就會不斷地代替舊表,這時某些舊表就不再需要了,可

19、以用DROP TABLE 命令刪除它。命令格式:DROP TABLE 命令功能:刪除一個表,包括在這個表上建立的索引。命令說明:指定被刪除的表。【例4.10】刪除在例4.2中創建的通訊錄表,SQL 命令如下:DROP TABLE 通訊錄 2022/10/2224.2.3 用DROP 命令刪除一個表隨著數據庫設計的變化4.3 數據操縱語言DML數據操縱實際上就是管理數據,這也是創建表的基本目的,主要是對關系中的具體數據進行查詢、更新、刪除和插入,但不能夠改變數據的結構。DML命令如表4-2所示。命令功能UPDATE更新數據庫中的已有數據DELETE 用于從數據表中刪除數據INSERT增加一個新的

20、數據到表中SELECT 數據查詢表4-2 DML的命令及功能2022/10/2234.3 數據操縱語言DML數據操縱實際上就是管理數據,這也4.3.1 INSERT 命令用CREATE TABLE 命令創建一個表后,創建的表中沒有具體的數據,可以用INSERT命令向表中插入數據。命令格式:INSERT INTO 表名 (列名1, 列名2, )VALUES( , ,)命令說明:INTO 表名:指定接受新數據的目標表。VALUES:指明增加記錄的字段值。向表中添加的數據必須與指定字段名的類型相匹配。字符串要用單引號或者雙引號括起來,日期型可用CTOD函數處理或者直接引用。2022/10/2244.

21、3.1 INSERT 命令用CREATE TABLE 4.3.1 INSERT 命令(續)【例4.11】在例4.4創建的訂單表中插入一個新的記錄:訂單編號:200601讀者編號:10001訂貨日期:2006-02-1發貨日期:2006-02-10圖書編號:100012使用INSERT 語句把該記錄插入到訂單表中,SQL語句如下:INSERT INTO 訂單(訂單編號, 讀者編號, 訂貨日期, 發貨日期, 圖書編號);VALUES (200601, 10001, CTOD(02-1-06), CTOD(02-10-06),100012) 2022/10/2254.3.1 INSERT 命令(續)

22、【例4.11】在例4.4.3.2 UPDATE命令UPDATE語句用來更新表中的記錄。 命令格式:UPDATE SET =,=WHERE 命令說明:UPDATE:指明要修改的記錄的表的名稱。SET:指明更新的字段名和字段值。WHERE:限定要修改的行,如果沒有WHERE子句,該字段下的所有字段值都將被新值替換。2022/10/2264.3.2 UPDATE命令UPDATE語句用來更新表中的4.3.2 UPDATE命令(續)【例4.12】把第1章中創建的SJ表中“價格”大于30元且“頁數”大于300的圖書的“備注”改為“珍貴圖書”,SQL命令如下:UPDATE SJ SET BZ=珍貴圖書 WH

23、ERE JG30 AND YS300若把價格大于30元的或頁數大于300頁的圖書的備注(bz)改為珍貴圖書,SQL命令如下:UPDATE SJ SET BZ=珍貴圖書 WHERE JG30 OR YS300 2022/10/2274.3.2 UPDATE命令(續)【例4.12】把第1章中4.3.3 DELETE 命令DELETE 命令用來刪除一行或者多行記錄。命令格式:DELETE FROM WHERE 命令說明:FROM 子句:指出將刪除的目標表。WHERE :指明被刪除的記錄滿足的條件,若沒有WHERE子句則刪除所有記錄。【例4.13】在第1章創建的SJ表中,把“價格”大于30元且“頁數”

24、大于300的圖書記錄刪掉,SQL語句如下:DELETE FROM SJ WHERE JG30 AND YS300 2022/10/2284.3.3 DELETE 命令DELETE 命令用來刪除一4.4 查詢和SELECT 命令SELECT 是數據查詢命令。SELECT命令雖然屬于數據操縱范圍,但它是SQL的核心,在SQL命令中使用的是最多的,我們將它和查詢單獨作為一節。VFP 6.0的查詢設計器或SELECT-SQL語句可用來方便地檢索存儲在表或者視圖中的信息。利用查詢設計器可以搜索滿足條件的記錄,并且可將查詢保存在.qpr文件中。2022/10/2294.4 查詢和SELECT 命令SELE

25、CT 是數據查詢命4.4.1 創建和添加查詢1啟動查詢設計器若要打開查詢設計器,應首先打開一個要查詢的數據庫,然后采用以下方式之一:(1)“文件”菜單啟動查詢設計器(2)從“工具”菜單啟動查詢設計器(3)使用CREATE QUERY命令打開查詢設計器2022/10/2304.4.1 創建和添加查詢1啟動查詢設計器2022/9/(1)“文件”菜單啟動查詢設計器從“文件”菜單中選擇“打開”命令,啟動“打開”對話框,并在對話框的“文件類型”中選擇“項目”類型,再選取要打開的項目名稱,最后單擊“確定”按鈕,出現項目管理器對話框。在項目管理器中選擇“數據”選項卡,再選取“查詢”選項。單擊“新建”按鈕,此

26、時出現“添加表或視圖”對話框,然后從數據庫下拉列表框中選擇待查詢的數據庫名稱。再從“選定”欄中選擇“表”或“視圖”,本例選擇了“表”。從“數據庫中的表”列表框中選擇要添加的表。重復這一步驟,直到選取了所需要的全部表。單擊“關閉”按鈕,返回“查詢設計器”窗口,如圖4-8所示。2022/10/231(1)“文件”菜單啟動查詢設計器從“文件”菜單中選擇“打開”(1)“文件”菜單啟動查詢設計器(續)圖4-8 查詢設計器2022/10/232(1)“文件”菜單啟動查詢設計器(續)圖4-8 查詢設計器(2)從“工具”菜單啟動查詢設計器在VFP 6.0主菜單中,選擇“工具”,指向“向導”,選擇“查詢”,彈出

27、“向導選取”對話框,再選擇“查詢向導”,可根據查詢向導的提示創建查詢。(3)使用CREATE QUERY命令打開查詢設計器在命令窗口中輸入CREATE QUERY即可打開查詢設計器。2022/10/233(2)從“工具”菜單啟動查詢設計器在VFP 6.0主菜單中,2創建查詢(1)查詢設計器查詢設計器的窗口如圖4-8所示。在查詢設計器上半部分的窗口中,列出用戶已選定的要查詢的表或視圖。表或視圖之間的連線表示表之間的連接關系。查詢設計器下半部分的窗口中有6個選項卡:“字段”:選定包含在查詢結果中的字段?!奥摻印保捍_定各數據表或視圖之間的連接關系?!昂Y選”:相當于命令SET FILTER TO,利用

28、過濾的方法查找一個特定的數據子集?!芭判蛞罁保簺Q定查詢結果輸出中記錄或行的排列順序“分組依據”:所謂分組就是將一組類似的記錄壓縮成一個結果記錄,這樣就可以完成基于一組的計算。“雜項”:指定是否要對重復記錄進行檢索,同時是否對記錄(返回記錄的最大數目或最大百分比)做限制。 2022/10/2342創建查詢(1)查詢設計器2022/9/2434(2)創建查詢的步驟1)按上面介紹的方法打開查詢設計器。2)添加出現在查詢結果中的表或視圖。如本例已打開“圖書館管理”數據庫,并已選擇添加了Dz.dbf、Jy.dbf和Sj.dbf三個表。3)選定要包含在查詢結果中的字段。在“字段”選項卡中,從可用字段列表

29、框中選擇需要的字段,即單擊需要的字段,再單擊“添加”按鈕;或者雙擊需要的字段。4)如果要“可用字段”列表框中的全部字段都包含在查詢結果中,可單擊“全部添加”按鈕;單擊“全部移去”按鈕,則將已選定的字段(列于選定字段列表框中)全部作廢。此時單擊“運行”按鈕即可看到查詢結果。5)保存查詢。從“文件”菜單中選擇“保存”命令,打開如圖4-9所示的“另存為”對話框中,在“保存類型”下拉框中選擇“查詢”類型,在“保存文檔為:”文本框中輸入查詢文件名,本例取名為“讀者借閱”,然后單擊“保存”按鈕即可。 2022/10/235(2)創建查詢的步驟1)按上面介紹的方法打開查詢設計器。20(2)創建查詢的步驟(續

30、)圖4-9 “另存為”對話框2022/10/236(2)創建查詢的步驟(續)圖4-9 “另存為”對話框202(2)創建查詢的步驟(續)【例4.14】查詢書籍表中的部分信息。將Sj.dbf表添加到查詢設計器中,即只對Sj.dbf表操作。操作如下:1)首先打開“圖書館管理”數據庫,然后打開查詢設計器,添加表Sj.dbf。2)選定要包含在查詢結果中的字段。方法是在“字段”選項卡中,從可用字段列表框中選擇需要的字段,即單擊需要的字段,再單擊“添加”按鈕;或者雙擊需要的字段。圖4-10列出了本例選擇的全部字段。3)單擊“運行”按鈕得到查詢結果,如圖4-11所示。 2022/10/237(2)創建查詢的步

31、驟(續)【例4.14】查詢書籍表中的部分信(2)創建查詢的步驟(續)4)保存查詢結果。單擊“文件”菜單的“保存”命令,打開“保存”對話框,將查詢結果保存。 圖4-10 例4.14圖圖4-11 例4.14的查詢結果2022/10/238(2)創建查詢的步驟(續)4)保存查詢結果。單擊“文件”菜單(2)創建查詢的步驟(續)【例4.15】統計表Sj.dbf中記錄書籍的價格、頁數和書名等信息。為完成統計所有書籍的價格和頁數的查詢,應將Sj.dbf表添加到查詢設計器中。由于本例只要求統計所有書籍的價格和頁數,因此只需要選擇書籍名稱、價格和頁數三個字段即可。選擇所需的字段后,單擊“查詢”按鈕即可看到查詢結

32、果,如圖4-12所示。圖4-12 例4.15 的“書籍價格”查詢結果2022/10/239(2)創建查詢的步驟(續)【例4.15】統計表Sj.dbf中3創建SELECT-SQL語句(1)認識SELECT-SQL語句利用查詢設計器可以方便地創建查詢而SELECT-SQL則是一個功能更強大的查詢工具,它可直接從一個或多個表中檢索數據,其查詢結果可用于創建報表、BROWSE或新的數據庫表或是臨時表,并且SELECT-SQL語句可直接加入到程序中。利用查詢設計器創建查詢時,系統會自動創建相應的SQL查詢語句。單擊“查詢設計器工具欄”上的“顯示SQL窗口”按鈕,如圖4-13所示,可打開SQL窗口,窗口中

33、所列出的語句就是剛剛利用查詢設計器創建的與查詢相對應的SQL語句。 2022/10/2403創建SELECT-SQL語句(1)認識SELECT-SQ3創建SELECT-SQL語句(續)表4-3所列是上兩例使用查詢設計器創建查詢得到的SQL語句。在命令窗口中鍵入MODIFY COMMAND example命令,打開程序編輯窗口,再輸入下述命令,可得到與使用查詢設計器相同的查詢結果。1)在命令窗口中輸入任一SELECT-SQL語句,然后按Ctrl+W鍵保存所輸入的內容。2)DO example例4.14的SELECT SQL語句例4.15的SELECT SQL語句 SELECT sj.sjbh,

34、sj.sjmc, sj.sjzz, sj.cbs; FROM 圖書館管理!sjSELECT sj.sjmc, sj.jg, sj.ys; FROM 圖書館管理!sj表4-3 查詢設計器創建的SELECT SQL語句圖4-13 查詢設計器工具欄2022/10/2413創建SELECT-SQL語句(續)表4-3所列是上兩例使(2)SELECT-SQL語句的語法格式SELECT ALL | DISTINCT TOP nExpr PERCENTAlias. Select_Item AS Column_Name, Alias. Select_Item AS Column_Name .FROM FORCE

35、DatabaseName!Table AS Local_AliasINNER | LEFT OUTER | RIGHT OUTER | FULL OUTER JOIN DatabaseName!Table AS Local_Alias ON JoinCondition INTO Destination | TO FILE FileName ADDITIVE | TO PRINTER PROMPT | TO SCREENPREFERENCE PreferenceNameNOCONSOLEPLAINNOWAITWHERE JoinCondition AND JoinCondition .AND |

36、 OR FilterCondition AND | OR FilterCondition .GROUP BY GroupColumn , GroupColumn .HAVING FilterConditionUNION ALL SELECTCommandORDER BY Order_Item ASC | DESC , Order_Item ASC | DESC .2022/10/242(2)SELECT-SQL語句的語法格式SELECT AL(2)SELECT-SQL語句的語法格式(續)SELECT-SQL語句相當復雜,它既可以用于單表的查詢,也可以用于多表的查詢。1)SELECT子句:在SE

37、LECT子句中指定在查詢結果中包含的字段、表達式。2)FROM 子句:指定所有從中檢索數據的表。如果表沒有打開,VFP 6.0顯示“打開”對話框,以便指定文件位置。表打開以后,直到查詢結束時才關閉。如果包含FORCE關鍵字,則在建立查詢時會嚴格按照FROM子句中描述的順序連接表;若不包含FORCE關鍵字,則對查詢進行優化。使用FORCE關鍵字,可加快查詢速度。DatabaseName!用來指定數據的名稱。當包含表的數據庫不是當前數據庫時,必須指定數據庫名稱,并且應在數據庫名稱之后表名之前加上感嘆號(!)分隔符。例如,“圖書館管理!sj”表示數據管理數據庫的sj表。 2022/10/243(2)

38、SELECT-SQL語句的語法格式(續)SELECT-(2)SELECT-SQL語句的語法格式(續)【例4-16】對圖書館管理數據庫,使用FROM子句,查看所有讀者的編號、姓名和性別。其中,SELECT子句指定要查詢的字段名稱,dz.dzbh、dz.dzxm和dz.dzxb分別對應dz表中的編號、姓名和性別。FROM子句表示要查詢的字段來自“圖書館管理”數據庫的dz表。SELECT dz.dzbh, dz.dzxm, dz.dzxb;FROM dz注意:下面的SELECT語句和上面的語句具有相同的效果:SELECT dz.dzbh, dz.dzxm, dz.dzxb;FROM 圖書館管理!dz

39、 2022/10/244(2)SELECT-SQL語句的語法格式(續)【例4-16】4. 定義查詢結果(1)使用排序選項排序能決定查詢輸出結果中記錄或行的順序。例如,可按書籍的價格以升序或降序方式對書籍記錄進行排序。利用排序依據選項卡可設置查詢的排序次序。在“排序依據”選項卡中,“選定字段”可選擇要用來排序的關鍵字段。選定后,添加到“排序條件”框,“排序條件”框中字段的次序決定了查詢結果排序時的條件,第一個字段決定了主排序次序,其余字段決定了第二排序次序。例如,在“排序條件”框中的字段順序是sj.jg、sj.ys,則查詢結果將首先按sj.jg進行排序,如果sj表中有一個以上的記錄具有同樣的jg

40、字段值,這些記錄則再按ys進行排序。 2022/10/2454. 定義查詢結果(1)使用排序選項2022/9/24454. 定義查詢結果(續)【例4.17】建立查詢按書籍價格從低到高排序。觀察例4.15的查詢結果,可以發現其結果并沒有完全按書籍價格的高低輸出,若要使輸出按書籍價格從低到高排列,可按以下步驟操作:1)打開查詢設計器,首先選擇“排序依據”選項卡。其中,“選定字段”列出了可用來排序的字段,供用戶選擇,“排序條件”是用戶已選擇好的用來排序的字段。2)從“選定字段”框中選定用來排序的字段,由于本例要按書籍價格從小到大的順序排序,所以應選擇字段sj.jg,然后單擊“添加”按鈕,把它移到“排

41、序條件”框中。3)從“排序選項”的兩個單選按鈕“升序”和“降序”中選擇一個,本例選擇“升序”。 4)單擊常用工具欄中的“運行”按鈕。將查詢結果同例4.15比較。2022/10/2464. 定義查詢結果(續)【例4.17】建立查詢按書籍價格從低4. 定義查詢結果(續)對查詢結果進行排序時,在對應的SELECT-SQL命令中可包括ORDER BY子句,它的格式如下:ORDER BY Order_itemASC|DESC其中,Order_item是排序條件框中選定的排序字段,字段間用逗號(,)分隔。另外,Order_item也可以是一個數字表達式,表示查詢結果中列的位置(最左邊列的編號為1)。ASC

42、指定查詢結果根據排序以升序排序,DESC指定以降序排列,缺省時為升序。如果不使用ORDER BY子句指定查詢結果的排列順序,則查詢結果不排序。例4.17對應的SELECT-SQL語句如下:SELECT sj.sjmc, sj.jg, sj.ys;FROM 圖書館管理!sj ORDER BY sj.jg2022/10/2474. 定義查詢結果(續)對查詢結果進行排序時,在對應的SEL(2)給字段添加說明標題為使查詢結果易于閱讀和理解,可以給字段添加說明標題,又稱別名。給前面設計的“書籍價格”添加說明標題,操作步驟如下:1)打開“書籍價格”查詢。2)在“函數和表達式”文本框中鍵入字段名,接著輸入A

43、S和說明標題,如下所示:sj.sjmc AS 書籍名稱3)單擊“添加”按鈕,在“選定字段”框中放置帶有別名的字段。4)重復步驟2)、3),分別給sj.jg和sj.ys添加說明標題“書籍價格”和“書籍頁數”。5)單擊“運行”按鈕,查詢結果中各字段名稱已變成相應的漢字說明。對應的SELECT語句如下:SELECT sj.sjbh AS 書籍編號, sj.jg AS 書籍價格, sj.ys AS 書籍頁數;FROM 圖書館管理!sj2022/10/248(2)給字段添加說明標題為使查詢結果易于閱讀和理解,可以給字(3)使用選擇條件選擇數據庫或表中符合條件的一部分記錄而不是全部記錄是查詢的重要任務。例

44、如,要查詢一定日期范圍內的借書記錄、查詢所有女性讀者的基本情況等。在查詢設計器中,“篩選”選項卡可確定用于選擇記錄的字段和比較準則,以及輸入與該字段進行比較的示例值。設置篩選條件是指設置篩選的邏輯表達式,這個表達式由字段、操作符和數值組成。邏輯表達式主要有下述形式:字段 操作符 表達式其中,字段是要查詢的表中的字段。操作符的含義及使用示例如表4-4所示。2022/10/249(3)使用選擇條件選擇數據庫或表中符合條件的一部分記錄而不是(3)使用選擇條件(續)在表4-4中,Like篩選操作符的含義是查找每個與字符表達式相匹配的字段。在字符串表達式中可使用百分號“%”和下劃線“_”通配符,下劃線表

45、示字符串中的任意一個字符,百分號表示任意長度的字符串。 操作符比較關系舉例=相等xk.cj = 60, xk.kcbm = 02=完全相等xk.cj = 60, xk.kcbm = 02Like不精確匹配xk.xh LIKE 19964%,查詢所有學號前五位是“19964”的學生大于xk.cj 60, xk.kcbm 02=大于等于xk.cj = 60, xk.kcbm = 02小于xk.cj 60, xk.kcbm 02=小于等于xk.cj = 60, xk.kcbm = 30,選擇“否”按鈕后,變為sj.jg =操作符。4)在“實例”文本框中輸入30。對應的SELECT語句如下:SELEC

46、T sj.sjmc AS 書籍名稱, sj.jg AS 書籍價格, sj.ys AS 書籍頁數;FROM 圖書館管理!sj ;WHERE sj.jg= 302022/10/252(3)使用選擇條件(續)【例4.18】在例4.15的“書籍價(3)使用選擇條件(續)【例4.19】在例4.15創建的“書籍價格”查詢中,使用LIKE操作符,篩選出書籍名為軟件工程的記錄。1)打開“統計學生成績”查詢,并選擇“篩選”選項卡。2)在“字段”下拉列表中選擇sj.sjmc字段。3)在“條件”下拉列表中選擇LIKE操作符。4)在“實例”文本框中輸入“軟件工程”。對應的SELECT語句如下:SELECT sj.sj

47、mc, sj.jg, sj.ys;FROM 圖書館管理!sj WHERE sj.sjmc LIKE 軟件工程2022/10/253(3)使用選擇條件(續)【例4.19】在例4.15創建的“書(4)多個篩選條件的組合使用實際使用中,經常需要查詢某一范圍內的記錄。例如,書籍價格在30元以下或者50元以上的所有書籍,或者書籍頁數在300頁以上且價格在40元以上的書籍等。由于可能同時需要輸入兩個篩選條件,因此需要考慮篩選條件之間的關系問題。在VFP中,篩選條件間共有三種關系,即與(and)、或(or)和否(not)。例如,“書籍價格在30元以下或者50元以上”可寫成sj.jg=50,而“書籍頁數在30

48、0頁以上且價格在40元以上的書籍”可寫成sj.ys=300 and sj.jg=40。在“篩選”選項卡中,可同時輸入多個篩選條件,每一個篩選條件占一行,行與行之間的缺省邏輯關系是“與”(AND),當選擇其他關系時,可通過邏輯項對應行的列表來選擇。 2022/10/254(4)多個篩選條件的組合使用實際使用中,經常需要查詢某一范圍(4)多個篩選條件的組合使用(續)【例4.20】設置“與”篩選條件。前面已經分析過,“書籍頁數在300頁以上且價格在40元以上的書籍”,可看成兩個篩選條件的組合,即sj.ys=300 and sj.jg=40。首先建立篩選條件sj.ys=300,然后再建立另一個篩選條件

49、sj.jg=40。由于兩個篩選條件之間是“與”的關系,因此不用設置“邏輯”選項。對應的SELECT語句如下:SELECT sj.sjmc, sj.jg, sj.ys;FROM 圖書館管理!sj WHERE sj.ys=300 and sj.jg=40 2022/10/255(4)多個篩選條件的組合使用(續)【例4.20】設置“與”篩(4)多個篩選條件的組合使用(續)【例4.21】設置“或”(OR)篩選條件。統計“書籍價格在30元以下或者50元以上”的所有書籍,其篩選條件可寫成sj.jg=50。在“篩選”選項卡中首先建立兩個篩選條件,第一個是sj.jg=50。由于兩個篩選條件是“或”關系,因此,

50、還要在第一個篩選條件對應的“邏輯”下拉列表中選擇OR運算符。對應的SELECT語句如下:SELECT sj.sjmc, sj.jg, sj.ys;FROM 圖書館管理!sj WHERE sj.jg=502022/10/256(4)多個篩選條件的組合使用(續)【例4.21】設置“或”(4)多個篩選條件的組合使用(續)【例4.22】設置“非”(NOT)篩選條件。查詢“所有書名不是軟件工程的書籍”??疾臁八袝皇擒浖こ痰臅焙汀八袝擒浖こ痰臅笔腔榉穸ǖ?。“所有書名是軟件工程的書籍”可寫成“LIKE”軟件工程“”,可先設置篩選條件“LIKE”軟件工程“”,然后單擊該篩選條件行對應

51、的“否”按鈕。對應的SELECT語句是:SELECT sj.sjmc, sj.jg, sj.ys;FROM 圖書館管理!sj WHERE sj.sjmc NOT like 軟件工程 2022/10/257(4)多個篩選條件的組合使用(續)【例4.22】設置“非”(5定向輸出查詢結果VFP允許查詢結果以不同的形式輸出。例如,可輸出到文件、打印機、臨時表和屏幕等。缺省形式是將查詢結果顯示在瀏覽窗口中。選擇查詢結果輸出形式的方法是:(1)從“查詢”菜單中選擇“查詢去向”命令,打開“查詢去向”對話框,如圖4-14所示。打開該對話框的另一個方法是在“查詢設計器”工具欄中單擊“查詢去向”按鈕。(2)“查詢

52、去向”對話框中列出了7個查詢結果的輸出形式,且均以按鈕形式給出。選擇需要的按鈕,并單擊“確定”按鈕即可。 圖4-14 “查詢去向”對話框2022/10/2585定向輸出查詢結果VFP允許查詢結果以不同的形式輸出。圖45定向輸出查詢結果(續)定向輸出對應的SELECT子句是INTO Destination子句。表4-5為該子句常用格式。如輸出到臨時表“學生成績清單”中可寫成“INTO CURSOR 學生成績清單”,輸出到活動窗口中,可寫成TO SCREEN。如果只想暫時保存結果,可將它們發送到數組或臨時表中。若要永久保存結果,將它發送到一個表中。查詢結果輸出形式SELECT子句格式獨立的表INT

53、O TABLE 表名稱數組INTO ARRAY 數組名稱臨時表INTO CURSOR 臨時表名稱活動窗口TO SCREEN瀏覽窗口系統缺省值表4-5 定向輸出查詢結果子句形式2022/10/2595定向輸出查詢結果(續)定向輸出對應的SELECT子句是I4.4.2 運行查詢1運行查詢在完成了查詢設計并指定了輸出目的地后,可以單擊“運行”按鈕啟動該查詢,也可以在命令窗口使用DO命令。例如,運行“數籍價格”查詢,可在命令窗口輸入:DO 書籍價格.qpr 2022/10/2604.4.2 運行查詢1運行查詢2022/9/24602分組查詢(1)分組查詢。所謂分組就是將一組類似的記錄壓縮成一個結果記錄

54、,這樣就可以完成基于一組記錄的計算?!纠?.23】將讀者按家庭住址分組。操作步驟如下:1)新建一個“按讀者住址查詢”,選擇讀者表的所有字段。2)選擇“分組依據”選項卡,選擇dz.jtzz,并單擊“添加”按鈕。3)為保證分組正確,在“排序依據”選項卡中設置排序條件。例如dz.dzbh。4)運行查詢,結果如圖4-15所示。 2022/10/2612分組查詢(1)分組查詢。所謂分組就是將一組類似的記錄壓縮(1)分組查詢(續)【例4.24】統計在書籍表中每個出版社出版的書籍的數目。操作步驟如下:1)建立一個查詢,選擇sj表中的所有字段,在“分組依據”選項卡中選擇sj.cbs,在“排序依據”選項卡中選擇

55、sj.sjbh。2)在“字段”選項卡中,在“函數和表達式”框中輸入“count(sj.cbs) as 數量”,并單擊“添加”按鈕。3)運行查詢,其結果如圖4-16所示。圖4-16 統計出版社的出版數量2022/10/262(1)分組查詢(續)【例4.24】統計在書籍表中每個出版社出(2)為查詢增加計算字段【例4.25】統計每個出版社的所出書中價格最低的書籍,可按如下步驟操作:1)創建一個查詢,選擇書籍表中的sj.sjmc、sj.sjzz、sj.jg, sj.ys。2)選擇“字段”選項卡,在“函數和表達式”文本框中輸入“MIN(sj.jg) AS最便宜的圖書”。3)單擊“添加”按鈕。4)選擇“分

56、組依據”選項卡,選擇sj.cbs,并單擊“添加”按鈕。5)若需要排序,此時可在“排序依據”選項卡中設置排序條件,如sj.ys。 “MIN(sj.jg) AS 最便宜的圖書”是一個函數表達式,在查詢結果中以“最便宜的圖書”名稱給出。此列不是表中原有的字段,而是在生成查詢的過程中經過計算得到的,又稱為計算列或計算字段。2022/10/263(2)為查詢增加計算字段【例4.25】統計每個出版社的所出書(2)為查詢增加計算字段(續)VFP提供了“字符串、數學、邏輯和日期”4類函數。表4-6列出了在SELECT-SQL中經常使用的列函數。列函數均產生一個單值,因此以下查詢求出所有圖書的總價格。SELEC

57、T sj.mc sj.jg sj.sjbh SUM(sj.jg) AS 總價格;FROM sj函數功能AVG(列名)求出指定列上的平均值,只適用于數字類型的列SUM(列名)求出指定列上的和。只適用于數字類型的列MIN(列名)求出指定列上的最小值。列可以是數字型、字符型或日期型MAX(列名)求出指定列上的最大值,列可以是數字型、字符型或日期型COUNT(列名)求出指定列上的值的出現個數表4-6 常用列函數2022/10/264(2)為查詢增加計算字段(續)VFP提供了“字符串、數學、邏(2)為查詢增加計算字段(續)在“函數和表達式”文本框中輸入函數可以使用表達式生成器,單擊“函數和表達式”文本框

58、旁的“.”按鈕可啟動表達式生成器,如圖4-17所示。在表達式生成器中,有“字符串、數學、邏輯和日期”4類函數,每一類函數對應一個下拉列表,在列表中可選擇相應的函數,然后再輸入相應的變量。圖4-17 表達式生成器2022/10/265(2)為查詢增加計算字段(續)在“函數和表達式”文本框中輸入(2)為查詢增加計算字段(續)例,“SUM (sj.jg) AS 總價格”函數的輸入方法如下:1)在“數學”下拉列表中選擇SUM函數,表達式文本框中出現SUM(expN)。2)選取expN。3)在“字段”列表框中選擇需要的字段變量或從鍵盤輸入相應的表達式,例如si.jg以便代替expN。4)在“表達式”文本

59、框的SUM函數后添加“AS 總價格”,將表達式修改成“SUM(sj.jg) AS 總價格”。5)單擊“檢驗”按鈕可檢驗輸入的表達式的正確性,若正確無誤后,可單擊“確定”按鈕,返回查詢設計器。此時在“函數和表達式”框中出現“SUM(sj.jg) AS 總成績”。6)單擊“添加”按鈕,“總成績”項將出現在查詢結果中。2022/10/266(2)為查詢增加計算字段(續)例,“SUM (sj.jg) (2)為查詢增加計算字段(續)【例4.26】已知sj表,可以使用AVG()列函數求每個出版社的書籍的平均價格。下面給出SELECT語句:SELECT sj.mc,sj.jg, sj.ys, sj.sjzz

60、,;AVG(sj.jg) AS 平均價格;FROM sj;GROUP BY sj.cbs;ORDER BY sj.sjbh【例4.27】在“統計平均價格”查詢中,添加“總價格”列。相應的SELECT語句如下:SELECT sj.mc,sj.jg, sj.ys, sj.sjzz,;AVG(sj.jg) AS 平均價格, SUM(sj.jg);FROM sj;GROUP BY sj.cbs;ORDER BY sj.sjbh 2022/10/267(2)為查詢增加計算字段(續)【例4.26】已知sj表,可以3篩選分組WHERE、HAVING子句都能為查詢提供過濾條件。一般來說,HAVING子句用來過

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論