結構化查詢語言SQL和報表.ppt_第1頁
結構化查詢語言SQL和報表.ppt_第2頁
結構化查詢語言SQL和報表.ppt_第3頁
結構化查詢語言SQL和報表.ppt_第4頁
結構化查詢語言SQL和報表.ppt_第5頁
已閱讀5頁,還剩110頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

2019/6/30,1,第4章 結構化查詢語言SQL和報表,SQL語言的基本概述 數(shù)據(jù)定義語言DDL 數(shù)據(jù)操縱語言DML 查詢和SELECT 命令 報表和標簽 小結,2019/6/30,2,4.1 SQL語言的基本概述,結構化查詢語言(Structured Query Language,簡稱SQL) SQL是用于對存放在計算機數(shù)據(jù)庫中的數(shù)據(jù)進行組織、管理和檢索的工具,是一種用于和數(shù)據(jù)庫進行交互通信的計算機語言。SQL是1974年由Boyce和Chamberlin提出的,并在IBM公司研制的System R上首次實現(xiàn)了這種語言,由于它的功能豐富,使用方式靈活和語言簡潔易學等突出特點,很受計算機界的歡迎?,F(xiàn)在SQL語言已成為關系型數(shù)據(jù)庫操縱語言的國際標準。 VFP 提供了SQL 語言支持,2019/6/30,3,4.1.1 SQL語言的基本概念,SQL語言支持關系型數(shù)據(jù)庫的三級模式結構,其中外模式對應于視圖和部分基本表,模式對應于基本表,內模式對應于存儲文件。 在SQL語言中,一個關系就對應于一個表,基本表本身是獨立存在的表,對應一個存儲文件;存儲文件的邏輯結構組成了關系型數(shù)據(jù)庫的內模式。 視圖是從基本表或其他視圖導出的表,視圖只是一個虛表。 在用戶看來,視圖和基本表都是關系,而存儲文件對用戶是透明的。,2019/6/30,4,4.1.2 SQL的基本功能,SQL語言由3部分組成: 數(shù)據(jù)定義語言DDL(Date Definition Language)。 數(shù)據(jù)操縱語言DML(Date Manipulation Language)。 數(shù)據(jù)控制語言DCL(Date Control Language)。 其主要命令如表4-1所示。,其中,數(shù)據(jù)定義語言DDL提供了完整的定義數(shù)據(jù)庫所必需的語言工具,用來 創(chuàng)建、修改、刪除數(shù)據(jù)庫對象;數(shù)據(jù)操縱語言DML用于查詢或者修改數(shù)據(jù); 數(shù)據(jù)控制語言DCL用來管理用戶的訪問權限,由于VFP 沒有權限管理功能, 所以不支持DCL命令。,2019/6/30,5,4.2 數(shù)據(jù)定義語言DDL,數(shù)據(jù)定義語言是對關系模式的一級定義,用來定義被存放數(shù)據(jù)的結構和組織,以及數(shù)據(jù)項之間的關系。SQL數(shù)據(jù)定義語言可以用來定義數(shù)據(jù)表、視圖和索引。 Create語句:用于定義和生成數(shù)據(jù)對象,比如創(chuàng)建表、視圖和索引。 Drop語句:用于刪除一個現(xiàn)有的數(shù)據(jù)對象,比如視圖、表、索引。 Alter語句:用于改變一個數(shù)據(jù)庫對象。比如對一個表的字段進行刪除、添加和修改,或者修改表的結構。,2019/6/30,6,4.2.1 用Create語句創(chuàng)建基本表,命令格式: CREATE TABLE 表名 FREE ( (寬度, 小數(shù)) NULLNOT NULL CHECKERROR DEFAULT PRIMARY KEY /UNIQUE , ) 命令功能:創(chuàng)建數(shù)據(jù)表的結構。,2019/6/30,7,4.2.1 用Create語句創(chuàng)建基本表(續(xù)),命令說明: CREATE TABLE表名:指定創(chuàng)建表文件名。 FREE:在數(shù)據(jù)庫打開的情況下創(chuàng)建的是自由表。默認在數(shù)據(jù)庫未打開時創(chuàng)建的是自由表,在數(shù)據(jù)庫打開時創(chuàng)建的是數(shù)據(jù)庫表。 CHECK:為字段值指定約束條件; ERROR:用來指定當不滿足約束條件時顯示的出錯信息。 DFAULT:指定默認的字段值。 PRIMARY KEY:指定當前字段為主索引關鍵字;UNIQUE:指定當前字段為候選索引關鍵字。 NULL/NOT NULL:表示該字段是否可以為空。,2019/6/30,8,4.2.1 用Create語句創(chuàng)建基本表(續(xù)),【例4.1】在圖書館管理系統(tǒng)中創(chuàng)建dzzl(讀者種類)表,包含zlbh(種類編號)、zlmc(種類名稱)、jssl(借書數(shù)量)、jsqx(借書期限)、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),若在命令窗口執(zhí)行 MODIFY STRUCTURE 命令,就可以在彈出的 對話框中見到dzzl表結 構,如圖4-2所示。,圖4-2 創(chuàng)建的dzzl表結構,2019/6/30,9,4.2.1 用Create語句創(chuàng)建基本表(續(xù)),【例4.2】創(chuàng)建一個名為“通訊錄”的自由表,包含姓名、工作單位、電話號碼、家庭住址4個字段,所得的表預覽如圖4-3所示。 CREATE TABLE 通訊錄 FREE(姓名C(10),工作單位C(20), 電話號碼C(12), 家庭住址C(20) BROWSE 由于沒有向表中添加任何記錄,所以在預覽時看不見任何的記錄。,圖4-3 創(chuàng)建的通訊錄表,2019/6/30,10,4.2.1 用Create語句創(chuàng)建基本表(續(xù)),【例4.3】創(chuàng)建一個“圖書訂單”的數(shù)據(jù)庫,并在此數(shù)據(jù)庫中創(chuàng)建一個“圖書”表,圖書表含有訂單號、圖書編號、書名、單價、數(shù)量等字段。 CREATE DATEBASE 圖書訂單 CREATE TABLE 圖書( 訂單號 C(10); DEFAULT “10001“, 圖書編號 C(10) PRIMARY KEY,; 書名C(10), 單價 N(8, 2); 數(shù)量 N(6) CHECK 數(shù)量=100 AND 數(shù)量=1000; ERROR “數(shù)量范圍在100和1000之間“),圖4-4 圖書表的索引圖,預覽此表的設計器可 以看見“圖書編號”已 經(jīng)被設為主索引,如 圖4-4所示。,2019/6/30,11,4.2.1 用Create語句創(chuàng)建基本表(續(xù)),【例4.4】在圖書訂單數(shù)據(jù)庫中建立一個新表“訂單”表,含有訂單編號、圖書編號、客戶編號、訂貨日期、發(fā)貨日期幾個字段。 OPEN DATABASE 圖書訂單 CREATE TABLE 訂單( 訂單編號 C(10) PRIMARY KEY,; 客戶編號 C(10), 訂貨日期 D, 發(fā)貨日期D; 圖書編號C(10), FOREIGN KEY 圖書編號; TAG 圖書編號 REFERENCES 圖書),圖4-5 圖書表和訂單表之間的關系,在命令窗口中輸入 “MODIFY DATABASE 訂數(shù)訂單” 命令,可在彈出的“數(shù)據(jù)庫設計器” 窗口中見到圖書表和訂單表之間已 建立的關系,如圖4-5所示。,2019/6/30,12,4.2.2 用Alter修改基本表,命令格式1: ALTER TABLE ADD/ALTERCOLUMN (字段寬度,小數(shù)位數(shù)) NULLNOT NULL CHECKERROR DEFAULT PRIMARY KEY/UNIQUE REFERENCESTAG 命令功能:修改表中原有的字段,或者在表中增加新的字段。,2019/6/30,13,4.2.2 用Alter修改基本表(續(xù)),命令說明: ADD COLUMN(字段寬度,小數(shù)位數(shù)):增加新字段,并指定新增字段的名稱、類型、字段寬度及小數(shù)位數(shù)。 NULLNOT NULL:指定新字段是否接受空值。 ALTER COLUMN (字段寬度,小數(shù)位數(shù)):修改原有字段,并指定修改后的字段名稱、類型、字段寬度及小數(shù)位數(shù)。 其他的參數(shù)含義同 CREATE TABLE。,2019/6/30,14,4.2.2 用Alter修改基本表(續(xù)),【例4.5】修改在例4.2中創(chuàng)建的通訊錄表,增加一個“性別”字段,SQL 命令如下: ALTER TABLE 通訊錄 ADD COLUMN 性別 C(10) 再把表中字段“家庭住址”修改為“工作地址”,SQL命令如下: ALTER TABLE 通訊錄 RENAME COLUMN 家庭住址 TO 工作地址 預覽修改后的表如圖4-6所示,與圖4-3對比就可以發(fā)現(xiàn)多出了一個字段“性別”,字段“家庭住址”改為了“工作地址”。,圖4-6 修改后的通訊錄表,2019/6/30,15,4.2.2 用Alter修改基本表(續(xù)),【例4.6】修改例4.3中創(chuàng)建的圖書表,將“書名”字段的寬度改為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,2019/6/30,16,4.2.2 用Alter修改基本表(續(xù)),命令功能:刪除或者設置字段的默認值或約束條件。 命令說明: SET CHECKERROR:為字段設置約束條件。 SET DEFAULT:設置默認值。 DROP DEFAULT:刪除默認值。 DROP CHECK:刪除約束條件。,2019/6/30,17,4.2.2 用Alter修改基本表(續(xù)),【例4.7】在例4.3創(chuàng)建的圖書表中,為“圖書編號”字段設置一個默認值200601并刪除數(shù)量的約束條件,SQL命令如下: ALTER TABLE 圖書 ALTER 圖書編號 SET DEFAULT 200601 ALTER TABLE 圖書 ALTER 數(shù)量 DROP CHECK,2019/6/30,18,4.2.2 用Alter修改基本表(續(xù)),命令格式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 KEYTAG REFERENCESTAG DROP FOREIGN KEY TAG SAVE RENAME COLUMN TO,2019/6/30,19,4.2.2 用Alter修改基本表(續(xù)),命令功能:刪除表中的字段、設置或刪除表的主索引、候選索引、對字段重新命名或者刪除指定的字段的約束條件。 命令說明: DROP COLUMN:刪除指定的字段。 ADD PRIMARY KEY TAG:建立主索引。 DROP PRIMARY KEY:刪除主索引。 ADD UNIQUE TAG :建立候選索引。 DROP UNIQUE TAG:刪除候選索引。 ADD FOREIGN KEYTAG:建立外索引。 REFERENCESTAG:指定建立關聯(lián)的父表。 DROP FOREIGN KEY TAG SAVE:刪除外索引。 RENAME COLUMN TO:對字段重新命名。,2019/6/30,20,4.2.2 用Alter修改基本表(續(xù)),【例4.8】在例4.3創(chuàng)建的圖書表中,為“書名”創(chuàng)建一個候選索引,并且刪除“數(shù)量”字段,如圖4-7所示。SQL語句如下: ALTER TABLE 圖書 ADD UNIQUE 書名; ALTER TABLE 圖書 DROP COLUMN 數(shù)量,圖4-7 例4.8圖,在圖4-7中,字段“數(shù)量”被刪除, 并創(chuàng)建候選索引“書名”。,2019/6/30,21,4.2.2 用Alter修改基本表(續(xù)),【例4.9】在第1章創(chuàng)建的“圖書管理系統(tǒng)”的dzzl中,為jssl創(chuàng)建一個默認值15,當輸入有錯誤時就會顯示“值為15”,刪除表中的候選索引。SQL語句如下: ALETER TABLE dzzl ALTER jssl SET DEFAULT 15; ERROR“值為15”; ALETER TABLE dzzl DROP UNIQUE TAG zlbh,2019/6/30,22,4.2.3 用DROP 命令刪除一個表,隨著數(shù)據(jù)庫設計的變化,數(shù)據(jù)庫的結構也在不斷的變化,新建的表就會不斷地代替舊表,這時某些舊表就不再需要了,可以用DROP TABLE 命令刪除它。 命令格式: DROP TABLE 命令功能:刪除一個表,包括在這個表上建立的索引。 命令說明:指定被刪除的表。 【例4.10】刪除在例4.2中創(chuàng)建的通訊錄表,SQL 命令如下: DROP TABLE 通訊錄,2019/6/30,23,4.3 數(shù)據(jù)操縱語言DML,數(shù)據(jù)操縱實際上就是管理數(shù)據(jù),這也是創(chuàng)建表的基本目的,主要是對關系中的具體數(shù)據(jù)進行查詢、更新、刪除和插入,但不能夠改變數(shù)據(jù)的結構。 DML命令如表4-2所示。,表4-2 DML的命令及功能,2019/6/30,24,4.3.1 INSERT 命令,用CREATE TABLE 命令創(chuàng)建一個表后,創(chuàng)建的表中沒有具體的數(shù)據(jù),可以用INSERT命令向表中插入數(shù)據(jù)。 命令格式: INSERT INTO 表名 (列名1, 列名2, )VALUES( , ,) 命令說明: INTO 表名:指定接受新數(shù)據(jù)的目標表。 VALUES:指明增加記錄的字段值。 向表中添加的數(shù)據(jù)必須與指定字段名的類型相匹配。 字符串要用單引號或者雙引號括起來,日期型可用CTOD函數(shù)處理或者直接引用。,2019/6/30,25,4.3.1 INSERT 命令(續(xù)),【例4.11】在例4.4創(chuàng)建的訂單表中插入一個新的記錄: 訂單編號:200601 讀者編號:10001 訂貨日期:2006-02-1 發(fā)貨日期:2006-02-10 圖書編號:100012 使用INSERT 語句把該記錄插入到訂單表中,SQL語句如下: INSERT INTO 訂單(訂單編號, 讀者編號, 訂貨日期, 發(fā)貨日期, 圖書編號); VALUES (“200601“, “10001“, CTOD(“02-1-06“), CTOD(“02-10-06“),“100012“),2019/6/30,26,4.3.2 UPDATE命令,UPDATE語句用來更新表中的記錄。 命令格式: UPDATE SET =,= WHERE 命令說明: UPDATE:指明要修改的記錄的表的名稱。 SET:指明更新的字段名和字段值。 WHERE:限定要修改的行,如果沒有WHERE子句,該字段下的所有字段值都將被新值替換。,2019/6/30,27,4.3.2 UPDATE命令(續(xù)),【例4.12】把第1章中創(chuàng)建的SJ表中“價格”大于30元且“頁數(shù)”大于300的圖書的“備注”改為“珍貴圖書”,SQL命令如下: UPDATE SJ SET BZ=“珍貴圖書“ WHERE JG30 AND YS300 若把價格大于30元的或頁數(shù)大于300頁的圖書的備注(bz)改為珍貴圖書,SQL命令如下: UPDATE SJ SET BZ=“珍貴圖書“ WHERE JG30 OR YS300,2019/6/30,28,4.3.3 DELETE 命令,DELETE 命令用來刪除一行或者多行記錄。 命令格式: DELETE FROM WHERE 命令說明: FROM 子句:指出將刪除的目標表。 WHERE :指明被刪除的記錄滿足的條件,若沒有WHERE子句則刪除所有記錄。 【例4.13】在第1章創(chuàng)建的SJ表中,把“價格”大于30元且“頁數(shù)”大于300的圖書記錄刪掉,SQL語句如下: DELETE FROM SJ WHERE JG30 AND YS300,2019/6/30,29,4.4 查詢和SELECT 命令,SELECT 是數(shù)據(jù)查詢命令。SELECT命令雖然屬于數(shù)據(jù)操縱范圍,但它是SQL的核心,在SQL命令中使用的是最多的,我們將它和查詢單獨作為一節(jié)。 VFP 6.0的查詢設計器或SELECT-SQL語句可用來方便地檢索存儲在表或者視圖中的信息。 利用查詢設計器可以搜索滿足條件的記錄,并且可將查詢保存在.qpr文件中。,2019/6/30,30,4.4.1 創(chuàng)建和添加查詢,1啟動查詢設計器 若要打開查詢設計器,應首先打開一個要查詢的數(shù)據(jù)庫,然后采用以下方式之一: (1)“文件”菜單啟動查詢設計器 (2)從“工具”菜單啟動查詢設計器 (3)使用CREATE QUERY命令打開查詢設計器,2019/6/30,31,(1)“文件”菜單啟動查詢設計器,從“文件”菜單中選擇“打開”命令,啟動“打開”對話框,并在對話框的“文件類型”中選擇“項目”類型,再選取要打開的項目名稱,最后單擊“確定”按鈕,出現(xiàn)項目管理器對話框。 在項目管理器中選擇“數(shù)據(jù)”選項卡,再選取“查詢”選項。 單擊“新建”按鈕,此時出現(xiàn)“添加表或視圖”對話框,然后從數(shù)據(jù)庫下拉列表框中選擇待查詢的數(shù)據(jù)庫名稱。再從“選定”欄中選擇“表”或“視圖”,本例選擇了“表”。 從“數(shù)據(jù)庫中的表”列表框中選擇要添加的表。重復這一步驟,直到選取了所需要的全部表。 單擊“關閉”按鈕,返回“查詢設計器”窗口,如圖4-8所示。,2019/6/30,32,(1)“文件”菜單啟動查詢設計器(續(xù)),圖4-8 查詢設計器,2019/6/30,33,(2)從“工具”菜單啟動查詢設計器,在VFP 6.0主菜單中,選擇“工具”,指向“向導”,選擇“查詢”,彈出“向導選取”對話框,再選擇“查詢向導”,可根據(jù)查詢向導的提示創(chuàng)建查詢。 (3)使用CREATE QUERY命令打開查詢設計器 在命令窗口中輸入CREATE QUERY即可打開查詢設計器。,2019/6/30,34,2創(chuàng)建查詢,(1)查詢設計器 查詢設計器的窗口如圖4-8所示。 在查詢設計器上半部分的窗口中,列出用戶已選定的要查詢的表或視圖。 表或視圖之間的連線表示表之間的連接關系。 查詢設計器下半部分的窗口中有6個選項卡: “字段”:選定包含在查詢結果中的字段。 “聯(lián)接”:確定各數(shù)據(jù)表或視圖之間的連接關系。 “篩選”:相當于命令SET FILTER TO,利用過濾的方法查找一個特定的數(shù)據(jù)子集。 “排序依據(jù)”:決定查詢結果輸出中記錄或行的排列順序 “分組依據(jù)”:所謂分組就是將一組類似的記錄壓縮成一個結果記錄,這樣就可以完成基于一組的計算。 “雜項”:指定是否要對重復記錄進行檢索,同時是否對記錄(返回記錄的最大數(shù)目或最大百分比)做限制。,2019/6/30,35,(2)創(chuàng)建查詢的步驟,1)按上面介紹的方法打開查詢設計器。 2)添加出現(xiàn)在查詢結果中的表或視圖。如本例已打開“圖書館管理”數(shù)據(jù)庫,并已選擇添加了Dz.dbf、Jy.dbf和Sj.dbf三個表。 3)選定要包含在查詢結果中的字段。在“字段”選項卡中,從可用字段列表框中選擇需要的字段,即單擊需要的字段,再單擊“添加”按鈕;或者雙擊需要的字段。 4)如果要“可用字段”列表框中的全部字段都包含在查詢結果中,可單擊“全部添加”按鈕;單擊“全部移去”按鈕,則將已選定的字段(列于選定字段列表框中)全部作廢。此時單擊“運行”按鈕即可看到查詢結果。 5)保存查詢。從“文件”菜單中選擇“保存”命令,打開如圖4-9所示的“另存為”對話框中,在“保存類型”下拉框中選擇“查詢”類型,在“保存文檔為:”文本框中輸入查詢文件名,本例取名為“讀者借閱”,然后單擊“保存”按鈕即可。,2019/6/30,36,(2)創(chuàng)建查詢的步驟(續(xù)),圖4-9 “另存為”對話框,2019/6/30,37,(2)創(chuàng)建查詢的步驟(續(xù)),【例4.14】查詢書籍表中的部分信息。 將Sj.dbf表添加到查詢設計器中,即只對Sj.dbf表操作。操作如下: 1)首先打開“圖書館管理”數(shù)據(jù)庫,然后打開查詢設計器,添加表Sj.dbf。 2)選定要包含在查詢結果中的字段。方法是在“字段”選項卡中,從可用字段列表框中選擇需要的字段,即單擊需要的字段,再單擊“添加”按鈕;或者雙擊需要的字段。圖4-10列出了本例選擇的全部字段。 3)單擊“運行”按鈕得到查詢結果,如圖4-11所示。,2019/6/30,38,(2)創(chuàng)建查詢的步驟(續(xù)),4)保存查詢結果。單擊“文件”菜單的“保存”命令,打開“保存”對話框,將查詢結果保存。,圖4-10 例4.14圖,圖4-11 例4.14的查詢結果,2019/6/30,39,(2)創(chuàng)建查詢的步驟(續(xù)),【例4.15】統(tǒng)計表Sj.dbf中記錄書籍的價格、頁數(shù)和書名等信息。 為完成統(tǒng)計所有書籍的價格和頁數(shù)的查詢,應將Sj.dbf表添加到查詢設計器中。 由于本例只要求統(tǒng)計所有書籍的價格和頁數(shù),因此只需要選擇書籍名稱、價格和頁數(shù)三個字段即可。 選擇所需的字段后,單擊“查詢”按鈕即可看到查詢結果,如圖4-12所示。,圖4-12 例4.15 的“書籍價格” 查詢結果,2019/6/30,40,3創(chuàng)建SELECT-SQL語句,(1)認識SELECT-SQL語句 利用查詢設計器可以方便地創(chuàng)建查詢 而SELECT-SQL則是一個功能更強大的查詢工具,它可直接從一個或多個表中檢索數(shù)據(jù),其查詢結果可用于創(chuàng)建報表、BROWSE或新的數(shù)據(jù)庫表或是臨時表,并且SELECT-SQL語句可直接加入到程序中。 利用查詢設計器創(chuàng)建查詢時,系統(tǒng)會自動創(chuàng)建相應的SQL查詢語句。 單擊“查詢設計器工具欄”上的“顯示SQL窗口”按鈕,如圖4-13所示,可打開SQL窗口,窗口中所列出的語句就是剛剛利用查詢設計器創(chuàng)建的與查詢相對應的SQL語句。,2019/6/30,41,3創(chuàng)建SELECT-SQL語句(續(xù)),表4-3所列是上兩例使用查詢設計器創(chuàng)建查詢得到的SQL語句。 在命令窗口中鍵入MODIFY COMMAND example命令,打開程序編輯窗口,再輸入下述命令,可得到與使用查詢設計器相同的查詢結果。 1)在命令窗口中輸入任一SELECT-SQL語句,然后按Ctrl+W鍵保存所輸入的內容。 2)DO example,表4-3 查詢設計器創(chuàng)建的SELECT SQL語句,圖4-13 查詢設計器 工具欄,2019/6/30,42,(2)SELECT-SQL語句的語法格式,SELECT ALL | DISTINCT 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_Alias ON JoinCondition INTO Destination | TO FILE FileName ADDITIVE | TO PRINTER PROMPT | TO SCREEN PREFERENCE PreferenceName NOCONSOLE PLAIN NOWAIT WHERE JoinCondition AND JoinCondition . AND | OR FilterCondition AND | OR FilterCondition . GROUP BY GroupColumn , GroupColumn . HAVING FilterCondition UNION ALL SELECTCommand ORDER BY Order_Item ASC | DESC , Order_Item ASC | DESC .,2019/6/30,43,(2)SELECT-SQL語句的語法格式(續(xù)),SELECT-SQL語句相當復雜,它既可以用于單表的查詢,也可以用于多表的查詢。 1)SELECT子句:在SELECT子句中指定在查詢結果中包含的字段、表達式。 2)FROM 子句:指定所有從中檢索數(shù)據(jù)的表。如果表沒有打開,VFP 6.0顯示“打開”對話框,以便指定文件位置。表打開以后,直到查詢結束時才關閉。 如果包含F(xiàn)ORCE關鍵字,則在建立查詢時會嚴格按照FROM子句中描述的順序連接表;若不包含F(xiàn)ORCE關鍵字,則對查詢進行優(yōu)化。使用FORCE關鍵字,可加快查詢速度。 DatabaseName!用來指定數(shù)據(jù)的名稱。當包含表的數(shù)據(jù)庫不是當前數(shù)據(jù)庫時,必須指定數(shù)據(jù)庫名稱,并且應在數(shù)據(jù)庫名稱之后表名之前加上感嘆號(!)分隔符。 例如,“圖書館管理!sj”表示數(shù)據(jù)管理數(shù)據(jù)庫的sj表。,2019/6/30,44,(2)SELECT-SQL語句的語法格式(續(xù)),【例4-16】對圖書館管理數(shù)據(jù)庫,使用FROM子句,查看所有讀者的編號、姓名和性別。 其中,SELECT子句指定要查詢的字段名稱,dz.dzbh、dz.dzxm和dz.dzxb分別對應dz表中的編號、姓名和性別。FROM子句表示要查詢的字段來自“圖書館管理”數(shù)據(jù)庫的dz表。 SELECT dz.dzbh, dz.dzxm, dz.dzxb; FROM dz 注意:下面的SELECT語句和上面的語句具有相同的效果: SELECT dz.dzbh, dz.dzxm, dz.dzxb; FROM 圖書館管理!dz,2019/6/30,45,4. 定義查詢結果,(1)使用排序選項 排序能決定查詢輸出結果中記錄或行的順序。 例如,可按書籍的價格以升序或降序方式對書籍記錄進行排序。 利用排序依據(jù)選項卡可設置查詢的排序次序。 在“排序依據(jù)”選項卡中,“選定字段”可選擇要用來排序的關鍵字段。選定后,添加到“排序條件”框,“排序條件”框中字段的次序決定了查詢結果排序時的條件,第一個字段決定了主排序次序,其余字段決定了第二排序次序。 例如,在“排序條件”框中的字段順序是sj.jg、sj.ys,則查詢結果將首先按sj.jg進行排序,如果sj表中有一個以上的記錄具有同樣的jg字段值,這些記錄則再按ys進行排序。,2019/6/30,46,4. 定義查詢結果(續(xù)),【例4.17】建立查詢按書籍價格從低到高排序。 觀察例4.15的查詢結果,可以發(fā)現(xiàn)其結果并沒有完全按書籍價格的高低輸出,若要使輸出按書籍價格從低到高排列,可按以下步驟操作: 1)打開查詢設計器,首先選擇“排序依據(jù)”選項卡。其中,“選定字段”列出了可用來排序的字段,供用戶選擇,“排序條件”是用戶已選擇好的用來排序的字段。 2)從“選定字段”框中選定用來排序的字段,由于本例要按書籍價格從小到大的順序排序,所以應選擇字段sj.jg,然后單擊“添加”按鈕,把它移到“排序條件”框中。 3)從“排序選項”的兩個單選按鈕“升序”和“降序”中選擇一個,本例選擇“升序”。 4)單擊常用工具欄中的“運行”按鈕。將查詢結果同例4.15比較。,2019/6/30,47,4. 定義查詢結果(續(xù)),對查詢結果進行排序時,在對應的SELECT-SQL命令中可包括ORDER BY子句,它的格式如下: ORDER BY Order_itemASC|DESC 其中,Order_item是排序條件框中選定的排序字段,字段間用逗號(,)分隔。另外,Order_item也可以是一個數(shù)字表達式,表示查詢結果中列的位置(最左邊列的編號為1)。ASC指定查詢結果根據(jù)排序以升序排序,DESC指定以降序排列,缺省時為升序。 如果不使用ORDER BY子句指定查詢結果的排列順序,則查詢結果不排序。 例4.17對應的SELECT-SQL語句如下: SELECT sj.sjmc, sj.jg, sj.ys; FROM 圖書館管理!sj ORDER BY sj.jg,2019/6/30,48,(2)給字段添加說明標題,為使查詢結果易于閱讀和理解,可以給字段添加說明標題,又稱別名。 給前面設計的“書籍價格”添加說明標題,操作步驟如下: 1)打開“書籍價格”查詢。 2)在“函數(shù)和表達式”文本框中鍵入字段名,接著輸入AS和說明標題,如下所示: sj.sjmc AS 書籍名稱 3)單擊“添加”按鈕,在“選定字段”框中放置帶有別名的字段。 4)重復步驟2)、3),分別給sj.jg和sj.ys添加說明標題“書籍價格”和“書籍頁數(shù)”。 5)單擊“運行”按鈕,查詢結果中各字段名稱已變成相應的漢字說明。 對應的SELECT語句如下: SELECT sj.sjbh AS 書籍編號, sj.jg AS 書籍價格, sj.ys AS 書籍頁數(shù); FROM 圖書館管理!sj,2019/6/30,49,(3)使用選擇條件,選擇數(shù)據(jù)庫或表中符合條件的一部分記錄而不是全部記錄是查詢的重要任務。 例如,要查詢一定日期范圍內的借書記錄、查詢所有女性讀者的基本情況等。 在查詢設計器中,“篩選”選項卡可確定用于選擇記錄的字段和比較準則,以及輸入與該字段進行比較的示例值。 設置篩選條件是指設置篩選的邏輯表達式,這個表達式由字段、操作符和數(shù)值組成。邏輯表達式主要有下述形式: 字段 操作符 表達式 其中,字段是要查詢的表中的字段。操作符的含義及使用示例如表4-4所示。,2019/6/30,50,(3)使用選擇條件(續(xù)),在表4-4中,Like篩選操作符的含義是查找每個與字符表達式相匹配的字段。在字符串表達式中可使用百分號“%”和下劃線“_”通配符,下劃線表示字符串中的任意一個字符,百分號表示任意長度的字符串。,表4-4 操作符及其舉例,2019/6/30,51,(3)使用選擇條件(續(xù)),在“實例”文本框中,輸入比較條件時需要注意以下幾點: 1)僅當字符串與待查詢表中字段名相同時,用引號括起字符串;否則,無需用引號括起字符串。 2)日期也不必用花括號括起來。 3)邏輯值的前后必須使用句點號,如.T.。 4)若輸入查詢中表的字段名,VFP就將它識別為一個字段。 在搜索字符型數(shù)據(jù)時,如果想忽略大小寫匹配,應選擇“大小寫”下面的按鈕。 當需要多個篩選條件時,需要在“篩選”卡中加進多個語句(多個行)。各個篩選條件之間使用.AND.和.OR.連接,即“篩選”選項卡中的“邏輯”下拉列表。 當有多個篩選條件且“邏輯”選項設置為“無”時,系統(tǒng)自動加入.AND.值。 當想否定設置的篩選條件時,選擇“否”按鈕。 例如,篩選條件 sj.jg = 30,選擇“否”按鈕后,變?yōu)閟j.jg 30。,2019/6/30,52,(3)使用選擇條件(續(xù)),【例4.18】在例4.15的“書籍價格”查詢中,篩選出價格在30元以上的書籍。 1)打開“書籍價格”查詢,并選擇“篩選”選項卡。 2)在“字段”下拉列表中選擇sj.jg 字段。 3)在“條件”下拉列表中選擇=操作符。 4)在“實例”文本框中輸入30。 對應的SELECT語句如下: SELECT sj.sjmc AS 書籍名稱, sj.jg AS 書籍價格, sj.ys AS 書籍頁數(shù); FROM 圖書館管理!sj ; WHERE sj.jg= 30,2019/6/30,53,(3)使用選擇條件(續(xù)),【例4.19】在例4.15創(chuàng)建的“書籍價格”查詢中,使用LIKE操作符,篩選出書籍名為軟件工程的記錄。 1)打開“統(tǒng)計學生成績”查詢,并選擇“篩選”選項卡。 2)在“字段”下拉列表中選擇sj.sjmc字段。 3)在“條件”下拉列表中選擇LIKE操作符。 4)在“實例”文本框中輸入“軟件工程”。 對應的SELECT語句如下: SELECT sj.sjmc, sj.jg, sj.ys; FROM 圖書館管理!sj WHERE sj.sjmc LIKE “軟件工程“,2019/6/30,54,(4)多個篩選條件的組合使用,實際使用中,經(jīng)常需要查詢某一范圍內的記錄。 例如,書籍價格在30元以下或者50元以上的所有書籍,或者書籍頁數(shù)在300頁以上且價格在40元以上的書籍等。 由于可能同時需要輸入兩個篩選條件,因此需要考慮篩選條件之間的關系問題。 在VFP中,篩選條件間共有三種關系,即與(and)、或(or)和否(not)。 例如,“書籍價格在30元以下或者50元以上”可寫成sj.jg=50,而“書籍頁數(shù)在300頁以上且價格在40元以上的書籍”可寫成sj.ys=300 and sj.jg=40。 在“篩選”選項卡中,可同時輸入多個篩選條件,每一個篩選條件占一行,行與行之間的缺省邏輯關系是“與”(AND),當選擇其他關系時,可通過邏輯項對應行的列表來選擇。,2019/6/30,55,(4)多個篩選條件的組合使用(續(xù)),【例4.20】設置“與”篩選條件。前面已經(jīng)分析過,“書籍頁數(shù)在300頁以上且價格在40元以上的書籍”,可看成兩個篩選條件的組合,即sj.ys=300 and sj.jg=40。 首先建立篩選條件sj.ys=300,然后再建立另一個篩選條件sj.jg=40。由于兩個篩選條件之間是“與”的關系,因此不用設置“邏輯”選項。 對應的SELECT語句如下: SELECT sj.sjmc, sj.jg, sj.ys; FROM 圖書館管理!sj WHERE sj.ys=300 and sj.jg=40,2019/6/30,56,(4)多個篩選條件的組合使用(續(xù)),【例4.21】設置“或”(OR)篩選條件。統(tǒng)計“書籍價格在30元以下或者50元以上”的所有書籍,其篩選條件可寫成sj.jg=50。 在“篩選”選項卡中首先建立兩個篩選條件,第一個是sj.jg=50。 由于兩個篩選條件是“或”關系,因此,還要在第一個篩選條件對應的“邏輯”下拉列表中選擇OR運算符。 對應的SELECT語句如下: SELECT sj.sjmc, sj.jg, sj.ys; FROM 圖書館管理!sj WHERE sj.jg=50,2019/6/30,57,(4)多個篩選條件的組合使用(續(xù)),【例4.22】設置“非”(NOT)篩選條件。查詢“所有書名不是軟件工程的書籍”。 考察“所有書名不是軟件工程的書籍”和“所有書名是軟件工程的書籍”是互為否定的。 “所有書名是軟件工程的書籍”可寫成“LIKE”軟件工程“”,可先設置篩選條件“LIKE”軟件工程“”,然后單擊該篩選條件行對應的“否”按鈕。 對應的SELECT語句是: SELECT sj.sjmc, sj.jg, sj.ys; FROM 圖書館管理!sj WHERE sj.sjmc NOT like “軟件工程“,2019/6/30,58,5定向輸出查詢結果,VFP允許查詢結果以不同的形式輸出。 例如,可輸出到文件、打印機、臨時表和屏幕等。缺省形式是將查詢結果顯示在瀏覽窗口中。 選擇查詢結果輸出形式的方法是: (1)從“查詢”菜單中選擇“查詢去向”命令,打開“查詢去向”對話框,如圖4-14所示。打開該對話框的另一個方法是在“查詢設計器”工具欄中單擊“查詢去向”按鈕。 (2)“查詢去向”對話框中列出了7個查詢結果的輸出形式,且均以按鈕形式給出。選擇需要的按鈕,并單擊“確定”按鈕即可。,圖4-14 “查詢去向”對話框,2019/6/30,59,5定向輸出查詢結果(續(xù)),定向輸出對應的SELECT子句是INTO Destination子句。表4-5為該子句常用格式。 如輸出到臨時表“學生成績清單”中可寫成“INTO CURSOR 學生成績清單”,輸出到活動窗口中,可寫成TO SCREEN。 如果只想暫時保存結果,可將它們發(fā)送到數(shù)組或臨時表中。 若要永久保存結果,將它發(fā)送到一個表中。,表4-5 定向輸出查詢結果子句形式,2019/6/30,60,4.4.2 運行查詢,1運行查詢 在完成了查詢設計并指定了輸出目的地后,可以單擊“運行”按鈕啟動該查詢,也可以在命令窗口使用DO命令。 例如,運行“數(shù)籍價格”查詢,可在命令窗口輸入: DO 書籍價格.qpr,2019/6/30,61,2分組查詢,(1)分組查詢。所謂分組就是將一組類似的記錄壓縮成一個結果記錄,這樣就可以完成基于一組記錄的計算。 【例4.23】將讀者按家庭住址分組。操作步驟如下: 1)新建一個“按讀者住址查詢”,選擇讀者表的所有字段。 2)選擇“分組依據(jù)”選項卡,選擇dz.jtzz,并單擊“添加”按鈕。 3)為保證分組正確,在“排序依據(jù)”選項卡中設置排序條件。例如dz.dzbh。 4)運行查詢,結果如圖4-15所示。,2019/6/30,62,(1)分組查詢(續(xù)),【例4.24】統(tǒng)計在書籍表中每個出版社出版的書籍的數(shù)目。操作步驟如下: 1)建立一個查詢,選擇sj表中的所有字段,在“分組依據(jù)”選項卡中選擇sj.cbs,在“排序依據(jù)”選項卡中選擇sj.sjbh。 2)在“字段”選項卡中,在“函數(shù)和表達式”框中輸入“count(sj.cbs) as 數(shù)量”,并單擊“添加”按鈕。 3)運行查詢,其結果如圖4-16所示。,圖4-16 統(tǒng)計出版社的出版數(shù)量,2019/6/30,63,(2)為查詢增加計算字段,【例4.25】統(tǒng)計每個出版社的所出書中價格最低的書籍,可按如下步驟操作: 1)創(chuàng)建一個查詢,選擇書籍表中的sj.sjmc、sj.sjzz、sj.jg, sj.ys。 2)選擇“字段”選項卡,在“函數(shù)和表達式”文本框中輸入“MIN(sj.jg) AS最便宜的圖書”。 3)單擊“添加”按鈕。 4)選擇“分組依據(jù)”選項卡,選擇sj.cbs,并單擊“添加”按鈕。 5)若需要排序,此時可在“排序依據(jù)”選項卡中設置排序條件,如sj.ys。 “MIN(sj.jg) AS 最便宜的圖書”是一個函數(shù)表達式,在查詢結果中以“最便宜的圖書”名稱給出。 此列不是表中原有的字段,而是在生成查詢的過程中經(jīng)過計算得到的,又稱為計算列或計算字段。,2019/6/30,64,(2)為查詢增加計算字段(續(xù)),VFP提供了“字符串、數(shù)學、邏輯和日期”4類函數(shù)。 表4-6列出了在SELECT-SQL中經(jīng)常使用的列函數(shù)。 列函數(shù)均產(chǎn)生一個單值,因此以下查詢求出所有圖書的總價格。 SELECT sj.mc sj.jg sj.sjbh SUM(sj.jg) AS 總價格; FROM sj,表4-6 常用列函數(shù),2019/6/30,65,(2)為查詢增加計算字段(續(xù)),在“函數(shù)和表達式”文本框中輸入函數(shù)可以使用表達式生成器,單擊“函數(shù)和表達式”文本框旁的“.”按鈕可啟動表達式生成器,如圖4-17所示。 在表達式生成器中,有“字符串、數(shù)學、邏輯和日期”4類函數(shù),每一類函數(shù)對應一個下拉列表,在列表中可選擇相應的函數(shù),然后再輸入相應的變量。,圖4-17 表達式生成器,2019/6/30,66,(2)為查詢增加計算字段(續(xù)),例,“SUM (sj.jg) AS 總價格”函數(shù)的輸入方法如下: 1)在“數(shù)學”下拉列表中選擇SUM函數(shù),表達式文本框中出現(xiàn)SUM(expN)。 2)選取expN。 3)在“字段”列表框中選擇需要的字段變量或從鍵盤輸入相應的表達式,例如si.jg以便代替expN。 4)在“表達式”文本框的SUM函數(shù)后添加“AS 總價格”,將表達式修改成“SUM(sj.jg) AS 總價格”。 5)單擊“檢驗”按鈕可檢驗輸入的表達式的正確性,若正確無誤后,可單擊“確定”按鈕,返回查詢設計器。此時在“函數(shù)和表達式”框中出現(xiàn)“SUM(sj.jg) AS 總成績”。 6)單擊“添加”按鈕,“總成績”項將出現(xiàn)在查詢結果中。,2019/6/30,67,(2)為查詢增加計算字段(續(xù)),【例4.26】已知sj表,可以使用AVG()列函數(shù)求每個出版社的書籍的平均價格。下面給出SELECT語句: SELECT sj.mc,sj.jg, sj.ys, sj.sjzz,; AVG(sj.jg) AS 平均價格; FROM sj; GROUP BY sj.cbs; ORDER BY sj.sjbh 【例4.27】在“統(tǒng)計平均價格”查詢中,添加“總價格”列。相應的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,2019/6/30,68,3篩選分組,WHERE、HAVING子句都能為查詢提供過濾條件。 一般來說,HAVING子句用來過濾GROUP BY后的分組結果,用WHERE子句過濾一般表的元組。 下面SELECT語句輸出家住在北京且讀者編號小于2006005的讀者記錄。 SELECT Dz.dzbh, Dz.dzxm, Dz.jtzz, Dz.dznl; FROM 圖書館管理!dz; WHERE Dz.jtzz = “北京“ AND Dz.dzbh “20060005“; GROUP BY Dz.dzbh; ORDER BY Dz.dzbh 如果要查詢年齡小于等于30的讀者,可繼續(xù)修改SELECT語句: SELECT Dz.dzbh, Dz.dzxm, Dz.jtzz, Dz.dznl; FROM 圖書館管理!dz; WHERE Dz.jtzz = “北京“ AND Dz.dzbh “20060005“; GROUP BY Dz.dzbh; ORDER BY Dz.dzbh; HAVING Dz.dznl=30,2019/6/30,69,4查詢多個表,數(shù)據(jù)庫中的表之間的關系可由表間的公共字段體現(xiàn)。 例如,“圖書館管理”數(shù)據(jù)庫中,表dz.dbf、jy.dbf和sj.dbf、dz.dbf 和jy.dbf之間由公共字段dzbh相連接,jy.dbf和sj.dbf之間由公共字段sjbh相連接。 當需要獲取存儲在兩個或更多表或視圖中的信息時,需要指出這些表或視圖之間的連接關系。 使用SELECT-SQL的INNER JOIN子句可完成表間的連接。,2019/6/30,70,4查詢多個表(續(xù)),在VFP中,表之間的連接有4種類型,如表4-8所示。,表4-8 表間聯(lián)接類型及使用條件,2019/6/30,71,4查詢多個表(續(xù)),在多表間建立查詢和單表基本相同,惟一不同的是要指明表間的關系。 【例4.28】統(tǒng)計借書的讀者和他們所借的書籍,要求包括“讀者姓名”和“書籍名稱”等字段。 1)首先打開“圖書館管理”數(shù)據(jù)庫,然后打開查詢設計器。因為本例要求包含“讀者姓名”和“書籍名稱”,故需添加dz.dbf、sj.dbf和jy.dbf三個表。 2)選定要包含在查詢結果中的字段。在“字段”選項卡中,從“可用字段”列表框中選擇需要的字段,單擊這些字段,再單擊“添加”按鈕;或者雙擊需要的字段。相應的SELECT語句是: SELECT Dz.dzxm, sj.sjmc, Jy.cjrq, Jy.sjbh; FROM 圖書館管理!dz INNER JOIN 圖書館管理!jy; INNER JOIN 圖書館管理!sj; ON sj.sjbh = Jy.sjbh; ON Dz.dzbh = Jy.dzbh,2019/6/30,72,4查詢多個表(續(xù)),圖4-18列出了上例選擇的全部字段。 單擊“運行”按鈕可看到例4.28的查詢結果,如圖4-19所示。,圖4-18 例4.28選定的字段,圖4-19 例4.28查詢結果,2019/6/30,73,4.5 報表和標簽,報表和標簽是將需要的數(shù)據(jù)表格化的重要工具。 本節(jié)主要介紹如何快速創(chuàng)建報表,并將應用程序有機地連接起來。,2019/6/30,74,4.5.1 Visual FoxPro的報表和標簽,報表包括兩個基本組成部分:數(shù)據(jù)源和布局。數(shù)據(jù)源通

溫馨提示

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

評論

0/150

提交評論