摘要:基于Visual FoxPro(VFP)和Structured Query Language(SQL)編程的應用實踐,文章闡述了SQL的工作原理,并從數據查詢、數據表聯接、數據更新、數據統計等方面介紹了SQL語言在VFP中的應用,給出了具體應用實例,以便于VFP使用者利用SQL實現數據庫內的復雜信息的快速存儲、自然聯接和統計。以及信息的便捷查詢。
關鍵詞:Structured Query Language語言;Visual FoxPro;數據庫;信息處理
0 引言
結構化查詢語言SQL是英文Structured Query Language的縮寫。按照美國國家標準協會(ANSI)的規定,SQL被作為關系型數據庫管理系統的標準語言,SQL語句可以用來執行各種操作。目前,絕大多數流行的關系數據管理系統(DBMS),例如Oracle,Sybase,SQL Server,Visual FoxPro等都采用了SQL標準語言。
如圖1所示,數據庫管理系統是一個存放信息的數據庫及管理、控制數據庫的軟件系統,當用戶需要檢索數據庫中的數據時,可以通過SQL語言發出請求,數據庫管理系統對SQL請求進行處理,將按要求所檢索到的數據返給用戶。
盡管查詢數據是SQL的最重要的功能之一,但它絕不僅僅是一個查詢工具,它還為用戶提供了用于控制數據庫管理系統的所有功能,包括數據定義、數據操縱、數據控制等功能。筆者在多年的教學中深深體會到,在VFP中使用SQL語句來處理數據,不僅方便了編程,而且還可以大大提高數據處理的速度。
以下從打開數據表、表間的聯接、數據查詢等幾方面敘述SQL在VFP中實現快速信息處理的具體應用。
1 數據查詢內容豐富、使用簡單
SQL的核心是查詢,其基本語句形式是:
SELECT * ROM…WHERE…
SQL數據查詢有:“簡單查詢”、“多表聯接查詢”、“嵌套查詢”、“特殊運算符查詢”“通配符查詢”、“排序查詢”等多種形式,程序語句簡單,使用起來方便快捷。
例如:在“成績DBF”表中求出選修111101號課程學生中成績比選修141203號課程的任何學生的成績都要高的學生的學號和成績。
語句形式為:
SELECT學號.成績FROM成績WHERE課程號=“111101”
and成績>all;
(SELECT成績FROM成績WHERE課程號=“141203”)
2 數據表的聯接
在進行數據庫結構設計時,為了消除冗余數據,會將數據分配在不同的表中存儲,這樣我們就不可避免地需要同時從不同的表中檢索數據。要想使用一個查詢從多個表中返回數據,就需要清楚這些表中的數據之間的關系,進而建立聯接,只有這樣才能保證從來源于多表的檢索結果是正確的。
在Visual FoxPro中,數據表的聯接是一種等值聯接,即只有滿足聯接條件,相應的結果才會出現在結果表中,并且是采用了“視圖”和“查詢”的方法來解決,這兩種方法也是只有視窗形式,而沒有語句,更不能進行復雜聯接。而SQL語句采用的是自然聯接,大大提升了聯接的功能。其聯接的運算方法是:首先保證一個表中滿足條件的記錄都在結果中,然后將滿足聯接條件的記錄與另一個表的記錄進行聯接,不滿足聯接條件的則應將來自另一個表的屬性值置為空值。SQL語句有四種聯接方式:內部聯接(Inner Join)、左聯接(Left join)、右聯接(RightJoin)、完全聯接(Full Join)。
例如:現有數據表A和數據表B,兩表的結構和記錄已知。請用SQL語句對它們進行四種聯接。
內部聯接(Inner Join):
Select A.Key,B.K from A Inner Join B On A.Key=B.key
左聯接(Left Join):
Select A.Key,B.K from A Left Join B On A.Key=B.key
右聯接(Right Join):
Select A.Key,B.K from A Ringht Join B On A.Key=B.key
完全聯接(Full Join):
Select A.Key,B.K from A Full Join B On A.Key=B.key
3 數據存儲規范及數據更新方便簡捷
在數據庫編程中,常常需要將大量的數據存儲。SQL語句有下列五種形式的數據存儲語句:
INTO ARRAY;INTO CURSOR;INTO TABLEIDBF;TO FILE;
TO PRINTER
INTO ARRAY語句可以將一個查詢結果存放到一個二維數組中;INTO CURSOR語句可以將一個查詢結果存放到臨時數據表文件中,可以像數據表一樣瀏覽其中的記錄。當關閉表時將自動刪除;INTO TABLEIDBF將查詢結果存放到永久表中;TO FILE將查詢結果存放到文本文件中;TO PRINTER將查詢結果直接輸出到打印機。
在數據庫操作中,數據記錄的更新是常有的事。在VisualFoxPro中數據記錄更新是通過自動替換(REPLACE)語句和表間記錄更新(UPDATE)語句實現的。自動替換主要用于單表。其中表間記錄更新的使用形式非常復雜,牽扯到多語句的相互制約,操作中思路很難理頓,必須要考慮到每個表的指針移動情況。SQL語句就省事多了,單表和多表可以一起考慮,其操作非常簡捷。
例如:將“英語DBF”表中的“考分”字段的記錄值加到“成績.DBF”表中的“總分”字段記錄中,同時將這兩個表中涉及到的記錄做標記,用于意外情況的處理(判斷這兩個表在操作中有可能被漏掉的記錄)。SQL語句為:
UPDATE(SELECT成績.學號,成績.總分,英語.姓名,英語.考分,英語.標記From成績Inner Join英語On成績.學號=英語.學號)SET成績.總分=成績.總分+英語.考分,成績。標記=1,英語.標記=1
4 數據統計多功能融為一體
統計同樣是數據庫編程中常用的功能之一。在VisualFoxPro中對數據表的統計工作用到了三條語句(COUNT、SUM、AVERAGE)和兩個函數MAX( )、MIN( ),功能分散。在SQL語句中不再將它們作為語句和函數分開,而是作為參數使用。這樣一來就可以把數據統計放在一條語句中來完成,使數據統計工作實現了融合。
例如:求“英語DBF”表中全班人數、“考分”字段的總分、平均分、最高分、最低分。
SELECT COUNT(*),SUM(考分),AVG(考分),MAX(考分),MIN(考分)
FROM英語
如果要把求得的分值分別保存到變量A、B、C、D、E中的話,可以將上面的語句改寫成:
SELECT COUNT(*)AS A,SUM(考分)AS B,AVG(考分)AS C,
MAX(考分)AS D,MIN(考分)AS E FROM英語5結束語
SQL語言可以直接在Visual FoxPro的命令窗口以人機交互的方式使用,也可以嵌入到程序中。Visual FoxPro應用開發工具已將SQL語言直接嵌入到自身的語言之中,使用起來更加方便。由于SQL中的強大處理功能,極大地豐富了Visual FoxPro的處理能力,已經成為編程中不可缺少的部分。