程序設(shè)計教程(9).ppt_第1頁
程序設(shè)計教程(9).ppt_第2頁
程序設(shè)計教程(9).ppt_第3頁
程序設(shè)計教程(9).ppt_第4頁
程序設(shè)計教程(9).ppt_第5頁
已閱讀5頁,還剩132頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、20.7.27,1,Visual FoxPro 程序設(shè)計教程,20.7.27,2,目 錄,第一章 數(shù)據(jù)庫基礎(chǔ)知識 第二章 VFP系統(tǒng)概述 第三章 VFP基礎(chǔ)知識 第四章 數(shù)據(jù)庫、表的基本操作 第五章 數(shù)據(jù)查詢與視圖 第六章 結(jié)構(gòu)化查詢語言 SQL 第七章 程序設(shè)計基礎(chǔ),20.7.27,3,第八章 面向?qū)ο蟮某绦蛟O(shè)計 第九章 菜單設(shè)計 第十章 報表和標(biāo)簽設(shè)計 第十一章 應(yīng)用系統(tǒng)開發(fā)簡介 參考教材 : 二級教程Visual FoxPro 程序設(shè)計 教育部考試中心 編 Visual FoxPro 程序設(shè)計 謝 川 主編 其它有關(guān) Visual FoxPro 的教材、書籍。,20.7.27,4,第 六

2、 章 關(guān)系數(shù)據(jù)庫結(jié)構(gòu)化查詢語言SQL,20.7.27,5,6.1 SQL語言概述 6.2 SQL數(shù)據(jù)查詢功能 6.3 SQL數(shù)據(jù)操縱功能 6.4 SQL數(shù)據(jù)定義功能,目 錄,20.7.27,6,SQL是Structured Query Language(結(jié)構(gòu)化查詢語言)的縮寫,是一種用于關(guān)系數(shù)據(jù)庫操作的標(biāo)準(zhǔn)語言。 SQL語言包括了對關(guān)系數(shù)據(jù)庫的查詢、操縱、定義、控制和管理等功能,它是一個綜合的、通用的、功能極強的關(guān)系數(shù)據(jù)庫語言。,6.1 SQL語言概述,20.7.27,7,SQL語言特點, SQL是一種一體化的語言。它包括了數(shù)據(jù)定義、數(shù)據(jù)查詢、數(shù)據(jù)操縱和數(shù)據(jù)控制等方面的功能. SQL是一種高度

3、非過程化的語言 SQL語言非常簡潔 ,只有為數(shù)不多的幾條命令(P137 表6-1 SQL語言命令分類 ) SQL是關(guān)系數(shù)據(jù)庫的通用語言 SQL語句有交互式和嵌入式兩種使用方式,20.7.27,8,Select語句的語法結(jié)構(gòu)如下: Select All | Distinct Top Nexpr Percent Alias. Select_Item As Column_Name , Alias. Select_Item As Column_Name . From DatabaseName! Table As Local_Alias Inner | Left Outer | Right Outer

4、| Full Outer Join DatabaseName!Table As Local_Alias On JoinCondition Where Joincondition And Joincondition . And | Or Filtercondition And | Or Filtercondition . Group By Groupcolumn , Groupcolumn . Having Filtercondition Order By Order_Item Asc | Desc , Order_Item Asc | Desc . Into Destination | To

5、File Filename Additive | To Printer Prompt | To Screen Union All Selectcommand,6.2 SQL數(shù)據(jù)查詢功能,20.7.27,9,關(guān)于Select語句的說明, Select子句說明要查詢的數(shù)據(jù)項(Select_Item) From子句說明查詢數(shù)據(jù)的來源,是必須與Select子句聯(lián)合使用的子句。 Where子句通過設(shè)置條件來選擇用戶所需要的記錄行 Group By子句對查詢結(jié)果進行分組 Having子句完成對分組的選擇 Order By子句設(shè)置查詢結(jié)果中記錄的排列順序 Into子句是Visual Foxpro的SQL-S

6、elect語句特有的選項,用來確定查詢結(jié)果的輸出去向 Union子句功能是將兩個Select語句的執(zhí)行結(jié)果進行并運算,20.7.27,10,6.2.1 基本查詢,最簡單的查詢語句只包含Select、From子句,或者還有Where子句,且數(shù)據(jù)只來自一個表,這類查詢稱為基本查詢。 例6.1 查詢?nèi)耸鹿芾頂?shù)據(jù)庫bm表的所有數(shù)據(jù) Select * From bm 例6.2查詢zgqk表中zgbh、xm、zc、jbgz字段的值。 Select zgbh, xm, zc, jbgz , 元 RMB; From zgqk,20.7.27,11,例6.3 查詢zgqk表中zc字段為“教授”或“副教授”的職工

7、的zgbh、xm、zc、jbgz字段的值。 Select zgbh, xm, zc, jbgz ; From zgqk ; Where 教授 $ zc SQL語句書寫說明: 語句涉及兩個以上表的數(shù)據(jù)時,共有字段名前面必須冠以用“.”分隔的表名作為前綴,例如zgqk.zgbh。 語句需要分成幾行時,除最末行外,其它行末尾加分號。,20.7.27,12,6.2.2 連接查詢,連接查詢是一種基于多個關(guān)系的查詢,也就是說查詢的數(shù)據(jù)和條件涉及到兩個或兩個以上的表。 1簡單的連接查詢 例6.4 在人事管理數(shù)據(jù)庫中查詢基本工資(jbgz)多于2000元的職工的xm、zc、jbgz和jcgz。 方法1: Se

8、lect xm, zc, jbgz, jcgz ; From zgqk, gz ; Where zgqk.zgbh=gz.zgbh And jbgz=2000,20.7.27,13,方法2: Select xm, zc, jbgz, jcgz ; From zgqk ; Join gz On zgqk.zgbh=gz.zgbh ; Where jbgz=2000 例6.5 查詢所有科研成果的作者、職稱、成果名稱。 Select xm, zc, cgmc ; From kyqk, zgqk; Where kyqk.zgbh=zgqk.zgbh,20.7.27,14,2多個表的連接查詢 如果查詢的

9、數(shù)據(jù)涉及2個以上的表,就要用到多個表之間的連接查詢,這種查詢?nèi)匀豢梢允褂肑oin短語和Where子句來表示連接條件。 例6.6 查詢所有科研成果的作者姓名、所在部門、職稱、成果名稱。在這個查詢中,數(shù)據(jù)涉及zgqk、bm、kyqk三個表,可以下面兩種方式實現(xiàn): 方法1:Select xm, zc, bmmc, cgmc ; From zgqk; Join bm On zgqk.bmbh=bm.bmbh ; Join kyqk On zgqk.zgbh=kyqk.zgbh,20.7.27,15,方法2:Select xm, zc, bmmc, cgmc ; From zgqk, bm, kyqk;

10、 Where zgqk.bmbh=bm.bmbh; And zgqk.zgbh=kyqk.zgbh,20.7.27,16,3超連接查詢 左連接 在進行連接運算時,首先將滿足連接條件的所有元組放在結(jié)果關(guān)系中,同時將第一個表(或稱Join左邊的表)中不滿足連接條件的元組也放入結(jié)果關(guān)系中,這些元組對應(yīng)第二個表(或稱Join右邊的表)的屬性值為空值。 右連接 在進行連接運算時,首先將滿足連接條件的所有元組放在結(jié)果關(guān)系中,同時將第二個表(或稱Join右邊的表)中不滿足連接條件的元組也放入結(jié)果關(guān)系中,這些元組對應(yīng)第一個表(或稱Join左邊的表)的屬性值為空值。,20.7.27,17, 全連接 在進行連接運

11、算時,首先將滿足連接條件的所有元組放在結(jié)果關(guān)系中,同時將兩個表中不滿足連接條件的元組也放入結(jié)果關(guān)系中,這些元組對應(yīng)另一個表的屬性值為空值。 連接查詢的SQL Select語句的格式如下: Select From Table Inner | Left | Right | Full Outer Join Table On Where 其中,Left、Right、Full分別代表左連接、右連接和全連接,保留字Outer只能與Left、Right、Full連用,使用與否功能相同,Left、Right、Full三種連接方式也稱為外連接。,20.7.27,18,例6.7 查詢所有人的科研成果。 Selec

12、t xm, zc, cgmc From zgqk Left Join kyqk On zgqk.zgbh=kyqk.zgbh 4自連接查詢與別名 SQL不僅可以對多個關(guān)系進行連接操作,也可以將一個關(guān)系與其自身進行連接,這種連接稱為自連接。在進行自連接查詢時,一般要為表定義別名,所謂別名就是在From子句中,為表定義一個另外的名字,格式如下: ,20.7.27,19,例6.8 查詢與姓名為“張力方”的職工同一部門的人。 Select a.xm From zgqk a, zgqk b ; Where b.xm=張力方 And a.bmbh=b.bmbh 在這個例子中,表zgqk通過定義別名形成了兩

13、個邏輯關(guān)系a和b,兩個關(guān)系的連接實現(xiàn)了查詢要求。 有時為了簡化SQL語句的書寫,也通過定義別名的方法,使較長的表名可以用簡短的別名來替代。,20.7.27,20,6.2.3 子查詢,子查詢是嵌入到另外一個SQL Select語句中的查詢語句。在很多情況下,一個查詢的Where條件子句中,需要用到另一個查詢的結(jié)果,后一個查詢就是子查詢,或稱為嵌套查詢。 當(dāng)查詢語句中包含子查詢時,先執(zhí)行子查詢,然后根據(jù)子查詢返回的條件再執(zhí)行主查詢。子查詢的結(jié)果用于處理主查詢的Where子句中的表達式。,20.7.27,21,1子查詢中的運算符 子查詢的結(jié)果一般是一個關(guān)系,在Where子句中,常常對子查詢結(jié)果進行集

14、合運算,如In、Any(Some)、All、Union、Exists。這些運算符的功能: In測試是否在集合中。 Any和Some與In功能近似,檢測是否是集合中的某一個值。在Visual Foxpro中,Any、Some及All一般僅用于子查詢得到的集合。 All子查詢結(jié)果關(guān)系中的所有行都使運算為真時,結(jié)果才為真。 Union將兩個查詢的結(jié)果關(guān)系進行集合并運算。 Exists判斷子查詢有無結(jié)果返回。,20.7.27,22,子查詢可以理解為嵌套查詢.子查詢是一個SELECT語句.1. 表達式的值與子查詢返回的單一值做比較語法: 表達式 comparisionANY|ALL|SOME(子查詢)說

15、明:ANY和SOME謂詞是同義詞,必須與比較運算符( =, , , =)一起使用.返回一個布爾值True或False。ANY的意思是,表達式與子查詢返回的一系列的值逐一比較,只要其中的一次比較產(chǎn)生True結(jié)果,ANY測試的返回 True值(既WHERE子句的結(jié)果),對應(yīng)于該表達式的當(dāng)前記錄將進入主查詢的結(jié)果中。ALL測試則要求表達式與子查詢返回的一系列的值的比較都產(chǎn)生True結(jié)果,才返回True值。例:主查詢返回單價比任何一個折扣大于等于25%的產(chǎn)品的單價要高的所有產(chǎn)品。SELECT * FROM ProductsWHERE UnitPriceANY(SELECT UnitPrice FROM

16、 OrderDetails WHERE Discount0.25),20.7.27,23,2. 檢查表達式的值是否匹配子查詢返回的一組值的某個值。 語法:NOT IN (子查詢)例:返回庫存價值大于等于1000的產(chǎn)品.SELECT ProductName FROM ProductsWHERE ProductID IN(SELECT PrdoctID FROM OrderDetailsWHERE UnitPrice*Quantity= 1000),20.7.27,24,例6.9 將例題6.3用集合運算實現(xiàn) Select zgbh, xm, zc, jbgz ; From zgqk; Where

17、zc In (“教授”, “副教授”) 例 6.10 查詢有基本工資大于2000的職工的部門名稱。 Select bmmc 部門名稱; From bm ; Where bmbh=Any (Select bmbh From zgqk ; Where jbgz=2000),20.7.27,25,Select Sname, Sse; from student; wher Sdept in (IS, MA, CS) 查詢其他系中比信息系某一學(xué)生年齡小的學(xué)生的姓名和年齡。 Sele Sname, Sage from stu wher Sageang; (sele Sage from stu wher S

18、dept =IS); AND SdeptIS,20.7.27,26,2子查詢必須遵循的規(guī)則: 子查詢必須用括號括起來。 子查詢一般在Select子句中只能有一個列。 返回多行的子查詢可以和多值操作符一起使用,例如In操作符。 Between操作符不能和子查詢一起使用,卻可以用于子查詢中。 在Visual Foxpro中,子查詢嵌套層數(shù)不能超過2層。,20.7.27,27,例6.11 查詢沒有職稱為“教授”的職工的部門名稱。 Select bmmc ; From bm ; Where bmbh !=All (Select bmbh From zgqk Where zc=教授) 它等價于: Sel

19、ect bmmc ; From bm ; Where bmbh Not In (Select bmbh From zgqk Where ZC=教授),20.7.27,28,3檢測子查詢是否返回任何記錄語法:NOT EXISTS (子查詢)例:用EXISTS檢索英國的客戶SELECT CompanyName, ContactNameFROM OrdersWHERE EXISTS(SELECT *FROMCustomersWHERECountry = UK ANDCustomers.CustomerID= Orders.CustomerID),20.7.27,29,例6.13 查詢有科研成果的職工

20、姓名(有多項成果時,僅列出一次)。 Select xm From zgqk ; Where Exists (Select zgbh From kyqk ; Where zgbh=zgqk.zgbh ),20.7.27,30,聯(lián)合查詢UNION運算可以把多個查詢的結(jié)果合并到一個結(jié)果集里顯示.UNION運算的一般語法:表查詢1 UNION ALL查詢2 UNION 例:返回巴西所有供給商和客戶的名字和城市SELECT CompanyName, CityFROMSuppliersWHERE Country = BrazilUNIONSELECT CompanyName, CityFROMCustom

21、ersWHERE Country = Brazil,20.7.27,31,注:缺省的情況下,UNION子句不返回重復(fù)的記錄.如果想顯示所有記錄,可以加ALL選項UNION運算要求查詢具有相同數(shù)目的字段.但是,字段數(shù)據(jù)類型不必相同.每一個查詢參數(shù)中可以使用GROUP BY 子句 或 HAVING 子句進行分組.要想以指定的順序來顯示返回的數(shù)據(jù),可以在最后一個查詢的尾部使用OREER BY子句.,20.7.27,32,例6.12 查詢職稱為“教授”或者有科研成果的職工的姓名。 在這個查詢中,我們可以使用集合并運算,首先查詢職稱為“教授”的職工姓名,再查詢有科研成果的職工姓名,將兩者進行并運算。 S

22、elect xm From zgqk ; Where zc=“教授” ; Union ; Select xm From zgqk ; Where zgbh In (Select zgbh From kyqk),20.7.27,33,6.2.4 SQL語句中的運算符,運算符是保留字或字符,主要用于SQL語句的Where子句中,用來執(zhí)行比較和數(shù)學(xué)運算等操作,以便確定條件和建立多個條件之間的連接,SQL中使用的主要運算符包括: 1比較運算符:,!,=, 2邏輯運算符:And,Or,Not 3數(shù)學(xué)運算符:,*,/ 4集合運算符:In,Any(Some),All,Union、Exists 5其他運算符:

23、Between And ,Like,Is Null,Is Not Null,20.7.27,34,第5類運算符的使用方法: Is Not Null:測試字段值是否為Null(空),Null可以與任何類型的數(shù)據(jù)匹配。 Between And :判斷字段值是否在指定的區(qū)間內(nèi)。 Like:判斷字段值是否與某個模式匹配??梢允褂猛ㄅ浞?”和“_”(下劃線),“%”代表多個字符,“_”代表一個字符。,20.7.27,35,例6.14 查詢學(xué)歷字段為空值的職工姓名 Select xm From zgqk Where xl Is Null 例6.15 查詢出生日期在70年代的職工姓名 Select xm

24、From zgqk ; Where csrq Between 1970/01/01 ; And 1979/12/31 例6.14 查詢學(xué)歷為大學(xué)或大專的職工姓名 Select xm From zgqk; where xl Like “大%”,20.7.27,36,查詢?nèi)鄙俪煽兊膶W(xué)生的學(xué)號和相應(yīng)課程號。 Sele Sno, Cno from sc wher Grade IS NULL Sele Sname , Sdept, Sage; from student; wher Sage between 20 and 30 Sele Sname, Sno, Ssex from student wher

25、 Sname LIKE 劉% 或_ _陽% 若LIKE后面的匹配串中不包含通配符,則可以用“=”取代LIKE謂詞,用“!=”或“”取代NOT LIKE。,20.7.27,37,6.2.5 查詢統(tǒng)計數(shù)據(jù),SQL不僅有一般的檢索功能,還可以進行計算方式的檢索。SQL提供了多種統(tǒng)計函數(shù),用來累加、合計和顯示數(shù)據(jù)極限值 1簡單的計算查詢 統(tǒng)計函數(shù)用于在SQL語句中實現(xiàn)計算累加、總和和平均值等統(tǒng)計信息,完成這些功能的函數(shù)包括Count()、Sum()、Max()、Min()、Avg()。,20.7.27,38, Count函數(shù) 格式:Count(*| Distinct) 功能:統(tǒng)計行數(shù)或指定字段不為Nu

26、ll的數(shù)量。在查詢中使用Count函數(shù)將返回一個數(shù)值。 說明: 當(dāng)Count函數(shù)使用Distinct 選項時,只有那些指定字段不重復(fù)的行才被計算在內(nèi)。如果沒有Distinct,重復(fù)的行也被計算在內(nèi)。 Count函數(shù)中使用星號(*)選項時,表示統(tǒng)計表中記錄的總行數(shù)。 Distinct不能用于Count(*),而只能用于Count()。,20.7.27,39,例6.15 查詢計算機系的職工數(shù)。 Select Count(*) From zgqk; Where bmbh= (Select bmbh From bm; Where bmmc=計算機) 例6.16 查詢有科研成果的職工數(shù), 有多項成果的只

27、統(tǒng)計一次。 Select Count(Distinct zgbh) ; From kyqk,20.7.27,40, Sum函數(shù) 格式:Sum(Distinct) 功能:返回一組數(shù)據(jù)行中指定字段的值的總和。 說明: Sum函數(shù)可以使用Distinct選項,這時只有指定字段數(shù)據(jù)不重復(fù)的行才被計算在總和內(nèi),由于一些數(shù)據(jù)行被忽略,總和可能不正確。 使用Sum函數(shù)時,指定字段的值必須是數(shù)值類型。Sum函數(shù)不能用于數(shù)值類型以外的數(shù)據(jù)類型,比如字符類型或日期類型。 例6.17 查詢計算機系的職工的基本工資總和。 Select Sum(jbgz) From zgqk; Where bmbh=(Select b

28、mbh From bm ; Where bmmc=計算機),20.7.27,41, Avg函數(shù) 格式:Avg(Distinct) 功能:Avg函數(shù)用于返回一組數(shù)據(jù)行中指定字段的平均值。 說明: Avg函數(shù)使用Distinct選項時,只有指定字段數(shù)據(jù)不重復(fù)的行才被計算在平均值內(nèi)。 使用Avg函數(shù)時,指定字段必須是數(shù)值類型。,20.7.27,42, Min和Max函數(shù) 格式:Min() Max() 功能: Min函數(shù)用于返回一組數(shù)據(jù)行中指定字段的最小值, 而Max函數(shù)用于返回一組數(shù)據(jù)行中指定字段的最大值 說明:使用Min和Max函數(shù)時,系統(tǒng)會忽略那些Null值。,20.7.27,43,例6.18

29、查詢?nèi)柯毠ぶ械幕竟べY最大、最小值。 Select Min(jbgz) 最低工資,; Max(jbgz) 最高工資; From zgqk 例6.19 查詢?nèi)柯毠ぶ械幕竟べY最大、最小值及其姓名、職稱 Select xm, zc, jbgz From zgqk ; Where jbgz=(Select Max(jbgz) From zgqk) ; Or jbgz=(Select Min(jbgz) From zgqk),20.7.27,44,2分組與計算查詢 除對整個表進行統(tǒng)計計算外,我們還常常用到分組統(tǒng)計,比如,按部門統(tǒng)計人數(shù)、平均工資,或按職稱的不同統(tǒng)計科研成果數(shù)量等。分組查詢可以通過帶

30、有Group By子句的Select語句實現(xiàn)。 格式:Group By , Having 其中、是依據(jù)分組的字段名。多個字段名可以形成多級分組,即在大組下面再分小組。Having子句的作用是對分組進行篩選,只對符合條件的分組進行統(tǒng)計查詢。 說明:Having子句只能與Group By子句連用,不能單獨使用, 且只能放在Group By子句之后。,20.7.27,45,例6.20 查詢每個部門中職工基本工資的最大、最小值,并顯示部門編號。分組字段為bmbh(部門編號)。 Select bmbh 部門編號, Min(jbgz) 最低工資,; Max(jbgz) 最高工資 ; From zgqk G

31、roup By bmbh 例6.21查詢每個部門中職工的人數(shù),并顯示部門名稱。分組字段為zgqk表中的bmbh字段,由于涉及到bm表中的部門名稱,還需要與bm表進行連接。 Select bmmc 部門, Count(zgqk.zgbh) 人數(shù); From zgqk, bm ; Group By zgqk.bmbh ; Where bm.bmbh=zgqk.bmbh,20.7.27,46,例6.22 查詢職工的人數(shù)超過4人的部門,并顯示部門名稱。 Select bmmc 部門, Count(zgqk.zgbh) 人數(shù); From zgqk, bm ; Where bm.bmbh=zgqk.bmb

32、h ; Group By zgqk.bmbh; Having Count(zgqk.zgbh)=4,20.7.27,47,6.2.6 對查詢結(jié)果排序,在SQL Select語句中,能夠使用排序子句Order By將查詢結(jié)果按照某種順序輸出。 格式:Order By Asc | Desc ,Asc | Desc 說明:在Order By子句中選擇Asc或省略時,按指定字段的升序排序,選Desc時按降序排序,是排序的主關(guān)鍵字,是第二關(guān)鍵字(主關(guān)鍵字值相同時,按第二關(guān)鍵字排序),之后是第三關(guān)鍵字、第四。,20.7.27,48,例6.23 按照基本工資升序顯示zgqk表中的姓名、職稱、基本工資。 Se

33、lect xm, zc, jbgz ; From zgqk ; Order By jbgz 例6.24 先按部門升序,再按基本工資降序顯示zgqk表中的姓名、部門編號、職稱、基本工資。 Select xm, bmbh, zc, jbgz ; From zgqk ; Order By bmbh, jbgz Desc,20.7.27,49,Order By子句使用說明: Order By是對最終的查詢結(jié)果進行排序,不能在子查詢中使用該子句。 排序是查詢結(jié)果輸出前的最后一步,因此Order By子句一般放在Select語句的末尾。 Visual Foxpro允許在使用Order By子句時,使用To

34、p nExpr子句,用來顯示查詢結(jié)果的前面幾項。,20.7.27,50,6.2.7 查詢結(jié)果的輸出去向, Into Array Into Cursor Into Table To File To Printer prompt 省略查詢結(jié)果去向說明時,查詢結(jié)果顯示在一個瀏覽窗口 例6.25 查詢工資表的數(shù)據(jù),分別存放到數(shù)組和臨時表中。 Select * From gz Into Array x Select * From gz Into Cursor lsb,20.7.27,51,6.3 SQL數(shù)據(jù)操縱功能,數(shù)據(jù)操縱語句(DML)是SQL的一部分,它允許數(shù)據(jù)庫用戶在關(guān)系型數(shù)據(jù)庫中改變數(shù)據(jù)。通過使

35、用DML,用戶可以為表添加新的數(shù)據(jù)、修改已存在的數(shù)據(jù)和從表中刪除數(shù)據(jù)。在DML命令中也能執(zhí)行簡單的數(shù)據(jù)庫查詢。 三種基本的DML命令: Insert Update Delete,20.7.27,52,6.3.1 插入數(shù)據(jù),Visual Foxpro支持兩種SQL插入命令的格式,第一種格式是標(biāo)準(zhǔn)格式,第二種格式是Visual Foxpro的特有格式。 格式1:Insert Into (, ) Values(, ) 格式2:Insert Into From Array ,20.7.27,53,例6.26 向bm表插入一條新記錄,為所有字段賦值。 Insert Into bm ; Values(10

36、9, 法律) 例6.27 向zgqk表插入一條新記錄,只為字段zgbh, xm, xb, zc賦值 Insert Into zgqk ; (zgbh, xm, xb, zc, csrq) ; Values(“199009”, “和悅”,; 女, 助教, 1982-01-08),20.7.27,54,例6.28 創(chuàng)建一個新表,結(jié)構(gòu)與zgqk相同,其中包括職稱為教授的職工記錄。 Select * From zgqk Where zc=教授 Into Table zg 將職稱不是教授的職工記錄存放到數(shù)組aa中。 Select * From zgqk Where zc!= 教授 Into Array

37、aa 將數(shù)組中的數(shù)據(jù)插入到表zg中。 Insert Into zg From Array aa,20.7.27,55,6.3.2 更新數(shù)據(jù),格式: Update Set=, ; =, ; Where 這里,指定了要更新的表,、 指出了要更新的字段,而Where子句選擇出要更新的記錄行。 注意:當(dāng)使用Update語句時,如果沒有Where子句設(shè)定條件的話,將更新表中所有的數(shù)據(jù)行。,20.7.27,56,例6.28 計算gz表中每個職工的應(yīng)發(fā)工資和扣款。 Update gz ; Set yfgz = jcgz + zwgz + zjgz + fljj,; kk = sdf + mqf 例6.29

38、將zgqk表中職稱為“教授”和“副教授”職工的基本工資增加10% Update zgqk Set jbgz=jbgz*1.1 ; Where zc Like %教授,20.7.27,57,6.3.3刪除數(shù)據(jù),Delete命令用于從表中刪除整行的數(shù)據(jù),Delete命令在FoxPro 中是一種邏輯刪除, 要物理刪除還要使用命令Pack。 要從表中刪除一條單獨的記錄或是選定的多條記錄,Delete語句的格式為: Delete From Where 例6.30 刪除bm表中部門名稱為Null的記錄。 Delete From bm Where bmmc Is Null,20.7.27,58,6.4 SQ

39、L數(shù)據(jù)定義功能,SQL數(shù)據(jù)定義功能包括創(chuàng)建數(shù)據(jù)庫、創(chuàng)建表、修改表、刪除表,用于數(shù)據(jù)定義的命令包括: Create Drop Alter。,20.7.27,59,6.4.1 數(shù)據(jù)庫和表的定義,1數(shù)據(jù)庫定義 格式:Create Database 功能:創(chuàng)建一個數(shù)據(jù)庫。 2表的定義 SQL語言提供的定義表的命令是Create Table。在使用這個命令之前,首先要設(shè)計好表結(jié)構(gòu)的各種細節(jié),包括: 表名; 各列(字段)的名稱、數(shù)據(jù)類型、寬度; 哪(幾)列將組成表的主鍵; 表中的哪些列必須提供數(shù)據(jù);,20.7.27,60,創(chuàng)建表的語句格式如下: Create Table | Dbf Tablename1

40、Name LongTableName Free (Fieldname1 FieldType (nFieldWidth , nPrecision) Null | Not Null Check lExpression1 Error cMessageText1 Default eExpression1 Primary Key | Unique References TableName2 Tag TagName1 , FieldName2 . , Primary Key eExpression2 Tag TagName2 |, Unique eExpression3 Tag TagName3 , Fo

41、reign Key eExpression4 Tag TagName4 Nodup References TableName3 Tag TagName5 , Check lExpression2 Error cMessageText2 ) | From Array ArrayName,20.7.27,61,關(guān)于Create Table命令說明如下: 當(dāng)前有打開的數(shù)據(jù)庫時,表建立在此數(shù)據(jù)庫中。 命令關(guān)鍵字Create Table 與Create DBF功能相同。 Name LongTableName:為所創(chuàng)建的表定義長表名,只有當(dāng)前有打開的數(shù)據(jù)庫時,才能使用此選項。 Free:創(chuàng)建為自由表。 F

42、REE isnt required if a database isnt open FieldName1 FieldType (nFieldWidth , nPrecision):4個選項依次分別定義字段名、字段類型,數(shù)值型和字符型字段的寬度,數(shù)值型字段的小數(shù)位寬度。 Null | Not Null:定義本字段是否可以為空。,20.7.27,62, Check lExpression1 Error cMessageText1: 定義本字段的有效性規(guī)則和出錯時的提示信息字符串。 Default eExpression1:定義字段的默認值。 Primary Key:將本字段創(chuàng)建為主索引字段。 Un

43、ique:將本字段創(chuàng)建為侯選索引字段。 References TableName2 Tag TagName1:說明本表與之建立永久聯(lián)系的父表及父表的索引名。 Foreign Key:創(chuàng)建一個外部索引(非主索引),并與一個父表建立關(guān)聯(lián)。 From Array ArrayName:由一個數(shù)組創(chuàng)建表,數(shù)組中存放了有關(guān)表的每個字段的名稱、類型、寬度、小數(shù)寬度等信息。,20.7.27,63,例6.31 表結(jié)構(gòu)為:student(sno, sname, sex, birthday, dno),用Create Table命令創(chuàng)建此表。 Create Table student; (sno N (6), sn

44、ame C (6), ; sex C(2), birthday D, dno C(3) 如果我們要在創(chuàng)建表時同時定義主索引、有效性規(guī)則等,語句可以寫成下面的形式: Create Table student; (sno N(6) Primary Key Not Null, ; sname C(6), ; sex C(2) Check In (“男”,“女”) Error “錯誤”,; birthday D, dno C(3),20.7.27,64,* Create a customer table and relate it to the salesman table. CREATE TABLE

45、 customer ; (SalesID c(6), ; CustId i PRIMARY KEY, ; CustName c(20) UNIQUE, ; SalesBranch c(3), ; FOREIGN KEY SalesId TAG SalesId REFERENCES salesman),20.7.27,65,CREATE TABLE orders ; (OrderId i PRIMARY KEY, ; CustId i REFERENCES customer TAG CustId, ; OrderAmt y(4), ; OrderQty i ; DEFAULT 10 ; CHEC

46、K (OrderQty 9) ; ERROR Order Quantity must be at least 10, ; DiscPercent n(6,2) NULL ; DEFAULT .NULL., ; CHECK (OrderAmt 0) ERROR Order Amount Must be 0 ),20.7.27,66,6.4.2 表的修改,Alter Table命令用于修改表,可以增添字段、刪除字段、改變字段的定義、增添或刪除約束。 Alter Table命令有3種格式。 格式1:Alter Table TableName1 Add | Alter Column FieldName

47、1 FieldType (nFieldWidth , nPrecision) Null | Not Null Check lExpression1 Error cMessagetext1 Default eExpression1 Primary Key | Unique References TableName2 Tag TagName1 功能:這種格式用來添加字段或修改字段的參數(shù) ??梢孕薷淖侄蔚念愋汀挾?、有效性規(guī)則等,但不能修改字段名,不能刪除字段及已定義的字段有效性規(guī)則。不管是否修改字段類型,必須將字段名和類型一同在命令中列出。,20.7.27,67,例6.35 在例6.31創(chuàng)建的表S

48、tudent中加入一個新字段grade n(3)。 Alter Table student ; Add grade n(3) Check grade=0 And grade=100 例6.36 將例6.31創(chuàng)建的表Student中的字段sname寬度改為10。 Alter Table student Alter sname c(10),20.7.27,68,格式2:Alter Table TableName1 Alter Column FieldName2 Null | Not Null Set Default eExpression2 Set Check lExpression2 Error

49、 cMessageText2 Drop Default Drop Check 這種格式主要用于定義、修改和刪除字段的有效性規(guī)則和默認值定義。,20.7.27,69,例6.37 將表Student中的字段sex 寬度改為1,并修改其有效性規(guī)則。 Alter Table student Alter sex c(1) Set Check sex=F or sex=M 例6.38 刪除表Student中的字段sex的有效性規(guī)則。 Alter Table student Alter sex Drop check,20.7.27,70,格式3:Alter Table TableName1 Drop Col

50、umn FieldName3 Set Check lExpression3 Error cMessagetext3 Drop Check Add Primary Key eExpression3 Tag TagName2 For lExpression4 Drop Primary Key Add Unique eExpression4 Tag TagName3 For lExpression5 Drop Unique Tag TagName4 Add Foreign Key eExpression5 Tag TagName4 For lExpression6 References TableN

51、ame2 Tag TagName5 Drop Foreign Key Tag TagName6 Save Rename Column FieldName4 To FieldName5,20.7.27,71,這種格式可以刪除字段(Drop Column),可以為字段改名(Rename Column FieldName4 To FieldName5),還可以增加或刪除表一級的有效性規(guī)則、主索引等。 例6.39 刪除表Student中的字段grade。 Alter Table student Drop grade 例6.40 將表Student中的字段dno改名為dn。 Alter Table st

52、udent Rename Column dno to dn,20.7.27,72,6.4.3 表的刪除,刪除表的命令格式為: Drop Table table_name 例6.41 將表Student刪除 Drop Table Student 說明:Drop Table命令直接從磁盤刪除表。如果要刪除的表是數(shù)據(jù)庫表,應(yīng)當(dāng)在數(shù)據(jù)庫打開的情況下刪除該表,否則,只刪除了表的磁盤文件,但記錄在數(shù)據(jù)庫 .dbc文件中的信息沒有刪除,下一次使用數(shù)據(jù)庫文件時會出錯。,20.7.27,73,第七章 程序設(shè)計基礎(chǔ),20.7.27,74,目 錄,7.1 結(jié)構(gòu)化程序設(shè)計概述 7.2 程序文件的建立、編輯與執(zhí)行 7.

53、3 程序設(shè)計輔助命令 7.4 程序的基本控制結(jié)構(gòu) 7.5 子程序、過程文件與自定義函數(shù) 7.6 程序調(diào)試 7.7 結(jié)構(gòu)化程序設(shè)計舉例,20.7.27,75,7.1 結(jié)構(gòu)化程序設(shè)計概述,Visual Foxpro系統(tǒng)的3種操作方式 菜單方式 命令方式 程序方式,20.7.27,76,7.1.1 程序的概念,程序就是計算機能夠分析執(zhí)行的命令集合。 程序設(shè)計就是根據(jù)問題的要求,按一定的邏輯關(guān)系,將一系列的命令組合在一起,形成一個命令序列的過程。 執(zhí)行程序就是依次執(zhí)行其中的每一條命令,直至全部命令執(zhí)行完畢。 程序通常以文件形式存放在磁盤上,在Visual FoxPro中,程序文件也稱為命令文件,其擴展

54、名為 .prg。 程序文件一旦建立,可以多次重復(fù)執(zhí)行,20.7.27,77,7.1.2 程序設(shè)計和算法,1算法的概念 算法是解決問題的方法和步驟 2算法的表示 算法可以有多種表示方法,常用的有自然語言法和流程圖法。,圖7-1 流程圖常用圖形符號,20.7.27,78,7.2 程序文件的建立、編輯與執(zhí)行,7.2.1 程序文件的建立與編輯 程序文件是擴展名為 .prg的純文本文件。建立和編輯程序文件可以使用外部編輯器或者內(nèi)部編輯器 。 外部編輯器是指任何可以編輯純文本文件的字處理軟件(如記事本、寫字板、Word等),內(nèi)部編輯器是指Visual FoxPro本身提供的文本編輯器。,20.7.27,7

55、9,采用內(nèi)部編輯器建立程序文件的方法如下: 1菜單方式 單擊“文件”下拉菜單中的“新建”命令,或者單擊常用工具欄上的“新建”按鈕;在“新建”對話框中選擇文件類型為“程序”,然后單擊“新建文件”按鈕,打開編輯窗口。 單擊“文件”下拉菜單中的“打開”命令,在“打開”對話框中選擇已經(jīng)建立的程序文件,可將其打開并進行編輯。,20.7.27,80,2命令方式 格式1:Modify Command 格式2:Modify File 功能:建立或編輯程序文件。 說明: 程序文件名必須以字母開頭,由字母、數(shù)字、下劃線組成,其默認的擴展名為.prg,使用Modify Command命令,可以省略擴展名,使用Mod

56、ify File命令不能省略擴展名。 執(zhí)行Modify 命令時,文件名前可以加路徑,系統(tǒng)首先在指定路徑或當(dāng)前路徑下查找命令中指定的文件,如果未找到,則建立新文件,進入編輯窗口;如果找到了命令中指定的文件,系統(tǒng)自動將該文件調(diào)入內(nèi)存并顯示在編輯窗口中。,20.7.27,81, 程序的書寫規(guī)則包括: 一行只能寫一條命令,寫完要輸入回車,表示命令結(jié)束。 一條命令的長度不得超過2048個字符。為便于閱讀,可以將長的命令分成若干行書寫,但要在行尾加上分號,表示下一行是本行的繼續(xù)。 絕大部分命令或函數(shù)都可縮寫成前四個字符。,20.7.27,82,例7.3 簡單程序舉例:編寫程序求半徑為3的圓面積。設(shè)程序文件

57、名為circle.prg,保存在D盤的vfp-userrsgl文件夾中。在命令窗口輸入命令: Modify Command d:vfp-userrsglcircle 在打開的程序編輯窗口中,輸入下列程序行: r=3 s3.14159*r*r ? 圓面積:,s Return,20.7.27,83,7.2.2 程序文件的調(diào)用執(zhí)行,1菜單方式 單擊“程序”菜單中的“運行”命令 2命令方式 格式:Do With 功能:將磁盤上指定的程序文件調(diào)入內(nèi)存并運行。 說明: 程序執(zhí)行過程中,若發(fā)生錯誤,系統(tǒng)將顯示出錯信息,用戶可返回編輯狀態(tài)進行修改。 可選項With 用于執(zhí)行帶參數(shù)的程序。參數(shù)的作用是向運行的程

58、序傳遞數(shù)據(jù)。,20.7.27,84,7.3 程序設(shè)計輔助命令,1數(shù)據(jù)輸入命令 Input 命令 格式:Input 提示信息 T0 內(nèi)存變量 功能:用于接收從鍵盤輸入的表達式,并將其運算結(jié)果存入指定的內(nèi)存變量中。 說明: Input命令執(zhí)行時,先在屏幕上顯示,然后暫停程序的運行,等待從鍵盤輸入數(shù)據(jù)。用戶輸入數(shù)據(jù)后,按下回車鍵,系統(tǒng)將輸入的數(shù)據(jù)保存到指定的內(nèi)存變量中,程序繼續(xù)執(zhí)行。,20.7.27,85, 可選項是字符表達式,系統(tǒng)顯示其值作為提示信息。 Input命令能夠接收任意類型的Visual FoxPro表達式,計算出結(jié)果后,再賦值給內(nèi)存變量。如果輸入的表達式中有字符串、日期型、邏輯型常量,

59、則必須使用定界符。 如果內(nèi)存變量未定義,執(zhí)行此命令時建立內(nèi)存變量,類型取決于輸入的數(shù)據(jù)類型。 Input語句每次只能為一個變量輸入值。,20.7.27,86,例7.4 編寫程序,由鍵盤輸入半徑,求圓面積(在程序運行時輸入半徑,可以實現(xiàn)求任意半徑的圓面積,提高程序的通用性)。程序circle1.prg的內(nèi)容如下: Input 半徑= To r s3.14159*r*r ? 圓面積=, s Return 運行程序circle1時輸入半徑值1,顯示結(jié)果為: 半徑1&顯示提示信息,輸入半徑值1 圓面積3.14159&輸出圓面積,20.7.27,87, Accept命令 格式:Accept To 功能:將從鍵盤上接收的字符串存入指定的內(nèi)存變量中。 說明: 執(zhí)行此命令時,先在屏幕上顯示,然后暫停程序運行,等待用戶從鍵盤輸入數(shù)據(jù),并以回車鍵結(jié)束。系統(tǒng)將輸入的數(shù)據(jù)存入指定的內(nèi)存變量中,程序繼續(xù)執(zhí)行。 可選項的含義與Input語句相同。 Accept語句只能接收字符型數(shù)據(jù),因此所有輸入的數(shù)據(jù)都被作為字符串,并且不需要加定界符。 如果內(nèi)存變量未定義,將在執(zhí)行此命令時建立內(nèi)存變量。Accept語句所定義的內(nèi)存變量為字符型。,20.7.27,

溫馨提示

  • 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. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論