VFP程序設(shè)計(jì)教程.ppt_第1頁
VFP程序設(shè)計(jì)教程.ppt_第2頁
VFP程序設(shè)計(jì)教程.ppt_第3頁
VFP程序設(shè)計(jì)教程.ppt_第4頁
VFP程序設(shè)計(jì)教程.ppt_第5頁
已閱讀5頁,還剩48頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

VFP程序設(shè)計(jì)教程,主講老師:wj,第五章,關(guān)系數(shù)據(jù)庫標(biāo)準(zhǔn) 語言SQL,第一節(jié) SQL概述 SQL(Structured Query Language)是結(jié)構(gòu)化的數(shù)據(jù)庫查詢語言,包含數(shù)據(jù)定義、數(shù)據(jù)操縱和數(shù)據(jù)控制。 在有些場合,幾乎被認(rèn)為是一種萬能語言,或者是一種數(shù)據(jù)庫標(biāo)準(zhǔn)語言。一經(jīng)上市,多種數(shù)據(jù)庫系統(tǒng)都將SQL語言融入其中。 從VF的角度來談,VF能實(shí)現(xiàn)的功能,SQL都能實(shí)現(xiàn)。,SQL語言非常簡潔。,SQL命令動詞,SELECT語句的格式: SELECT 字段列表 FROM 表列表 WHERE GROUP BY 字段名HAVING UNION ORDER BY 字段名 功能:在一個或多個表中將滿足條件的多個字段顯示出來。,SELECT:說明要查詢的數(shù)據(jù),即字段列表。 FROM:說明要查詢的數(shù)據(jù)來自哪些表,可以對單個表或多個表進(jìn)行查詢。 WHERE:查詢條件,即選擇元組的條件。 GROUP BY:用于對查詢結(jié)果進(jìn)行分組,可以利用它進(jìn)行分組匯總。 HAVING:必須跟隨GROUP BY 短語使用,它用來限定分組必須滿足的條件。 ORDER BY:用來對查詢的結(jié)果進(jìn)行排序。,說明數(shù)據(jù)之間的聯(lián)系,如職工在哪個城市工作,一、簡單查詢 例 從職工關(guān)系中檢索所有的工資值。 SELECT 工資 FROM 職工 SELECT DISTINCT 工資 FROM 職工 去掉查詢結(jié)果中的重復(fù)值。 例 檢索倉庫關(guān)系中的所有元組。 SELECT * FROM 倉庫 等價(jià)于SELECT 倉庫號,城市,面積 FROM 倉庫 *是通配符,表示所有屬性,即表示所有字段。,例 檢索工資多于1230元的職工號 SELECT 職工號 FROM 職工 WHERE 工資1230 例 檢索哪些倉庫有工資多于1210元的職工 SELECT DISTINCT 倉庫號 FROM 職工 WHERE 工資1210 例 給出在倉庫”WH1”或”WH2”工作,并且工資少于1250元的職工 SELECT 職工號 FROM 職工 WHERE 工資1250 AND (倉庫號=“WH1” OR 倉庫號=”WH2”),二、聯(lián)接查詢 聯(lián)接查詢是一種基于多個關(guān)系的查詢。在多個表中找出滿足條件的記錄。 例 找出工資多于1230元的職工號和他們所在的城市。 SELECT 職工號,城市 FROM 職工,倉庫 ; WHERE (工資1230) AND(職工.倉庫號=倉庫.倉庫號) 說明:分號是續(xù)行符,有時將一條語句寫在幾行上,其結(jié)構(gòu)看得更清楚。,例 找出工作在面積大于400的倉庫的職工號以及這些職工所在的城市 SELECT 職工號,城市 FROM 職工,倉庫 ; WHERE (面積400) AND(職工.倉庫號=倉庫.倉庫號),三、嵌套查詢 多個查詢可以嵌套執(zhí)行。 基于多個關(guān)系的查詢,這類查詢所要求的結(jié)果出自一個關(guān)系,但相關(guān)的條件卻涉及多個關(guān)系。 例 哪些城市至少有一個倉庫的職工工資為1250元(工資和城市字段不在一個表中) 分析:此例求查詢倉庫表中的城市信息,而查詢條件是職工表中的工資字段值。 SELECT城市 FROM 倉庫 WHERE 倉庫號 IN ; (SELECT 倉庫號 FROM 職工 WHERE 工資=1250),例 查詢所有的職工工資都大于1210元的倉庫信息 分析:此例也可描述為”沒有一個職工的工資少于或等于1210元的倉庫的信息 SELECT * FROM 倉庫 WHERE 倉庫號 NOT IN ; (SELECT 倉庫號 FROM 職工 WHERE 工資=1210),例找出和職工E4掙同樣工資的所有職工 SELECT 職工號 FROM 職工 WHERE 工資=; (SELECT 工資 FROM 職工 WHERE 職工號=”E4”) 先求出E4的工資。,四、幾個特殊的運(yùn)算符 1、BETWEENAND表示在二者之間。 2、LIKE表示像什么一樣,用于字串匹配。 3、!= 在SQL表示不等于,也可以等號表達(dá)式加NOT的方法構(gòu)造。,例 檢索出工資在1220元到1240遠(yuǎn)范圍內(nèi)的職工信息 SELECT * FROM 職工 WHERE 工資 BETWEEN 1220 AND 1240 注意表達(dá)方法,等價(jià)于: SELECT * FROM 職工 WHERE (工資 1220) AND (工資1240),例 從供應(yīng)商關(guān)系中檢索出全部公司的信息,不要工廠或其他供應(yīng)商的信息 匹配字符串查詢,使用LIKE運(yùn)算符 SELECT * FROM 供應(yīng)商 WHERE 供應(yīng)商名 LIKE “%公司” 匹配符%:表示0個或多個字符 匹配符_ :表示一個字符,五、排序 使用SQL SELECT 可以將查詢結(jié)果排序,使用短句ORDER BY ORDER BY 排序項(xiàng)1ASC|DESC,排序項(xiàng)2ASC|DESC 即允許按照一列或多列排序,可以按升序排序,也可以按照降序排序,缺省為升序,若使用降序,應(yīng)使用DESC參數(shù)。,例 按職工的工資值升序檢索出全部職工信息 SELECT * FROM 職工 ORDER BY 工資 降序: SELECT *FROM 職工 ORDER BY 工資 DESC 例先按倉庫號排序,再按工資排序并輸出全部職工信息 SELECT * FROM 職工 ORDER BY 倉庫號,工資,六、簡單的計(jì)算查詢 用于計(jì)算檢索的函數(shù)有: COUNT-計(jì)數(shù),即統(tǒng)計(jì)記錄數(shù)。 SUM-求和,即求字段的總和。 AVG-計(jì)算平均值,即求指定字段的平均值。 MAX-求最大值,即求字段的最大值。 MIN -求最小值,即求字段的最小值。,例 找出供應(yīng)商所在地的數(shù)目 SELECT COUNT (DISTINCT 地址) FROM 供應(yīng)商 注意:除非對關(guān)系中的元組個數(shù)進(jìn)行計(jì)數(shù),一般COUNT函數(shù)應(yīng)該使用DISTINCT。 例如: SELECT COUNT(*) FROM 供應(yīng)商 例求支付的工資總數(shù) SELECT SUM(工資) FROM 職工,例 檢索工資多于1230元的職工號 SELECT 職工號 FROM 職工 WHERE 工資1230 例 求北京和上海的倉庫職工的工資總和 SELECT SUM(工資) FROM 職工 WHERE 倉庫號 IN (SELECT 倉庫號 FFROM 倉庫 WHERE 城市=”北京” OR 城市=”上海”),七、分組與計(jì)算查詢 利用GROUP BY 進(jìn)行分組計(jì)算查詢,GROUP BY 短語的格式如下: GROUP BY 分組列表 HAVING FilterCondition 例 求每個倉庫的職工的平均工資 SELECT 倉庫號,AVG(工資) FROM 職工 GROUP BY 倉庫號,八、利用空值查詢 例 找出尚未確定供應(yīng)商的訂購單 SELECT * FROM 訂購單 WHERE 供應(yīng)商號 IS NULL 注意:查詢空值時要使用IS NULL,而=NULL是無效的,因?yàn)榭罩挡皇且粋€確定的值,所以不能用“=”這樣的運(yùn)算符進(jìn)行比較。 例 列出已經(jīng)確定了供應(yīng)商的訂購單信息 SELECT *FROM 訂購單 WHERE 供應(yīng)商號 IS NOT NULL,九、別名與自然連接查詢 在聯(lián)接操作中,經(jīng)常需要使用關(guān)系名作為前綴,有時這樣做顯得很麻煩.因此,SQL允許在FORM短語中為關(guān)系名定義別名 ,十、內(nèi)外層互相關(guān)嵌套查詢 內(nèi)層查詢的條件需要外層查詢提供值,而外層查詢的條件需要內(nèi)層查詢的結(jié)果.,十一、使用量詞和謂詞的查詢 ANY|ALL|SOME(子查詢) NOTEXISTS (子查詢) ANY, ALL, SOME是量詞,其中ANY和SOME是同義詞,在進(jìn)行比較運(yùn)算時,只要子查詢中有一行能使結(jié)果為真,則結(jié)果就為真;而ALL 則要求子查詢中的所有行都為真,結(jié)果才為真. EXIST是謂詞,EXISTS 或 NOT EXISTS是用來檢查子查詢中是否有結(jié)果返回,即存在的元組或不存在元組.,十二、超聯(lián)接查詢 超聯(lián)接查詢首先保證一個表中滿足條件的元組都在結(jié)果表中,然后將滿足聯(lián)接條件的記錄與另一個表的記錄進(jìn)行聯(lián)接,不滿足聯(lián)接條件的則將應(yīng)來自另一表的屬性值置為空值. “*=”左聯(lián)接,含義是在結(jié)果表中包含第一個表中滿足條件的所有記錄;如果有在聯(lián)接條件上匹配的 記錄,則第二個表返回相應(yīng)值,否則返回空值. “=*”右聯(lián)接,含義是在結(jié)果表中包含第二個表中滿足條件的所有記錄;如果有在聯(lián)接條件上匹配的記錄,則第一個表返回相應(yīng)值,否則返回空值.,十三、集合的并運(yùn)算 SQL 支持集合的并(UNION)運(yùn)算,即可以將兩個SELECT語句的查詢結(jié)果通過并運(yùn)算合并成一個查詢結(jié)果.為了進(jìn)行并運(yùn)算,要求這樣的查詢結(jié)果具有相同的字段個數(shù),并且對應(yīng)字段的值要出自同一個值域,即具有相同的數(shù)據(jù)類型和取值范圍. 例:查詢北京和上海的倉庫信息 SELECT * FROM 倉庫 WHERE 城市=”北京” UNOIN; SELECT * FROM 倉庫 WHERE 城市=”上海”,十四、Visual Foxpro中SQL SELECT 的幾個特殊選項(xiàng) 顯示部分結(jié)果 例 只顯示前幾項(xiàng)記錄 使用TOP nExpr PERCENT TOP 要與ORDER BY同時使用才有效.,將查詢結(jié)果放在數(shù)組中 使用INTO ARRAY ArrayName 將查詢結(jié)果放在數(shù)組中. SELECT * FROM 職工 INTO ARRAY tmp 將查詢結(jié)果存放在臨時文件中 使用INTO CURSOR CursorName將查詢結(jié)果放在臨時數(shù)據(jù)庫表文件中.該表為只讀dbf文件,當(dāng)關(guān)閉文件時該文件將自動刪除。 SELECT * FROM 職工 INTO CURSOR tmp,將查詢結(jié)果存放在永久表中 使用INTO DBF|TABLE TableName將查詢結(jié)果放在表中。 SELECT * TOP 3 FROM 職工 INTO TABLE highsal ; ORDER BY 工資DESC 將查詢結(jié)果存放在文本文件中 使用TO FILE FileNameADDITIVE將查詢結(jié)果放在文本文件中. ADDITIVE選項(xiàng)使結(jié)果追加到原文件的尾部,否則將覆蓋原有文件。 SELECT * TOP 3 FROM 職工 TO FILE tmp ; ORDER BY 工資 DESC,如果TO 短語和INTO短語同時使用,則TO短語將會被忽略。 輸出到打印機(jī)使用TO PRINTER PROMPT 將查詢結(jié)果直接輸出到打印機(jī) PROMPT打開打印機(jī)設(shè)置對話框,第三節(jié) 操作功能 一、插入記錄 INSERT INTO 表名(字段1,字段2,) VALUES(字段1 值,字段2 值,) 字段名與字段值按出現(xiàn)的順序一一對應(yīng),字段值按數(shù)據(jù)類型以常量的形式給出。 Visual Foxpro特殊格式: INSERT INTO 表名 FROM ARRAY 數(shù)組 | FROM 內(nèi)存變量,INSERT INTO 表名說明向由指定的表中插入記錄,當(dāng)插入的不是完整的記錄時,可以指定字段; VALUES ()給出具體的記錄值,按字段順序給出各字段值; FROM ARRAY 數(shù)組名:說明從指定的數(shù)組中插入記錄值; FROM 內(nèi)存變量名:說明根據(jù)同名的內(nèi)存變量來插入記錄值,如果同名變量不存在,那么相應(yīng)的字段為默認(rèn)值或空。,例:往訂購單中插入記錄: (”E7”,”S4”,”O(jiān)R01”,2001/05/25) INSERT INTO 訂購單 VALUES (“E7“,“S4“, “OR01“,2001-05-25) 假如供應(yīng)商未確定,只能先插入. INSERT INTO 訂購單(職工號,訂購單號) VALUES (“E7“,“OR01“),INSERT INTO FROM ARRAY的使用方法: USE 訂購單 SCATTER to arr1 COPY STRUCTURE TO ord2 INSERT INTO ord2 FROM ARRAY arr1,二、更新 格式:UPDATE 表名 SET 字段名1=表達(dá)式1, 字段名2=表達(dá)式2,WHERE 條件 如同Replace命令,對滿足條件的記錄進(jìn)行替換修改操作。 例給WH1倉庫的職工提高10%的工資 UPDATE 職工 SET 工資=工資*1.10 WHERE 倉庫號=”WH1”,三、刪除 命令: DELETE FROM 表名 WHERE 條件刪除滿足條件的記錄。 例要 刪除倉庫關(guān)系中倉庫號值是WH2的元組. DELETE FROM 倉庫 WHERE 倉庫號=”WH2” 注意:此刪除同樣是邏輯刪除記錄.,第四節(jié) 定義功能 標(biāo)準(zhǔn)的SQL的數(shù)據(jù)定義功能包括數(shù)據(jù)庫的定義、表的定義、視圖的定義、存儲過程的定義、規(guī)則的定義和索引的定義。 一、表的定義 格式:Create Table 表名(字段1 數(shù)據(jù)類型(長度,小數(shù)位數(shù)),字段2 數(shù)據(jù)類型(長度,小數(shù)位數(shù)),),例 用命令建立訂貨管理1數(shù)據(jù)庫. CREATE DATABASE 訂貨管理1 例用SQL CREATA命令建立倉庫1表 CREATE TABLE 倉庫1(倉庫號 C (5)PRIMARY KEY,城市 C (10),面積 I CHECK(面積0) ERROR “面積應(yīng)該大于0!”),用SQL CREATE命令建立職工1表 CREATE TABLE 職工1( 倉庫號 C(5),職工號 C(5) PRIMARY KEY, 工資 I CHECK(工資=1000 AND工資=5000) ERROR “工資值的范圍在1000-5000! ” DEFAULT 1200,FOREIGN KEY 倉庫號 TAG 倉庫號 REFERENCES 倉庫1) 說明:與表倉庫1按倉庫號建立關(guān)聯(lián)。,二、表的刪除 刪除表的SQL命令是: DROP TABLE 表名 徹底刪除指定的表。,三、表結(jié)構(gòu)的修改 修改表結(jié)構(gòu)的命令是ALTER TABLE,該命令有三種格式。 格式一: ALTER TABLE 表名字 ADD |ALTER 字段名 字段類型 字段寬度 NULL |NOT NULL CHECK ERRORDEFAULT PRIMARY KEY|UNIQUEREFERENCES .TAG .,如添加字段 格式:Alter Table 表名 Add Column 字段名 數(shù)據(jù)類型(長度) 如修改字段 格式:Alter Table 表名 Alter Column 字段名 數(shù)據(jù)類型(長度),格式2:可刪除字段、修改字段名;定義、刪除和修改表一級的有效性規(guī)則。 刪除字段 格式:Alter Table 表名 Drop Column 字段名,四、視圖的定義 視圖:在關(guān)系數(shù)據(jù)庫中,也稱作窗口,即操作表的窗口,可以把它看作是從表中派出

溫馨提示

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

最新文檔

評論

0/150

提交評論