杜雪蓮
[摘要]Visual FoxPro是一個數(shù)據(jù)庫開發(fā)和管理工具,SQL是結(jié)構(gòu)化查詢語言,包括數(shù)據(jù)查詢、數(shù)據(jù)定義、數(shù)據(jù)操縱和數(shù)據(jù)控制功能等。因此熟練掌握一些簡單常用的查詢命令,會大大地提高數(shù)據(jù)查詢的速度,有利于我們對數(shù)據(jù)庫應(yīng)用程序的進(jìn)一步開發(fā)。
[關(guān)鍵詞]數(shù)據(jù)庫數(shù)據(jù)表SQL數(shù)據(jù)查詢命令
中圖分類號:TP2文獻(xiàn)標(biāo)識碼:A文章編號:1671-7597(2009)0710070-02
數(shù)據(jù)查詢是用戶使用各種軟件來管理數(shù)據(jù)的目的之一,也是各種數(shù)據(jù)庫程序設(shè)計(jì)的重點(diǎn)。用戶希望能方便有效快速地找到他們所需的信息,為各種事務(wù)處理提供有力的支持。所以,數(shù)據(jù)查詢作為信息管理軟件設(shè)計(jì)中要實(shí)現(xiàn)的一項(xiàng)重要功能,必須具有良好的數(shù)據(jù)界面和方便的操作及靈活的查詢功能,這也是信息管理軟件開發(fā)人員所追求的目標(biāo)。在Visual FoxPro數(shù)據(jù)管理系統(tǒng)中,設(shè)置了查詢命令和查詢向?qū)?可以進(jìn)行數(shù)據(jù)庫表記錄的選擇、分組查詢、多表查詢及查詢結(jié)果數(shù)據(jù)的輸出等功能,能夠產(chǎn)生獨(dú)立的查詢文件,通過調(diào)用該文件可得到所需要的數(shù)據(jù)。但這些分散的功能命令和文件不適用于數(shù)據(jù)庫應(yīng)用程序的查詢操作,使用這種方式設(shè)計(jì)的數(shù)據(jù)庫應(yīng)用程序,用戶必須熟知VFP系統(tǒng)命令、操作、數(shù)據(jù)類型的匹配方式及各種數(shù)據(jù)表之間的關(guān)系才能有效的查詢到自己所需的信息,這給用戶進(jìn)行數(shù)據(jù)查詢操作帶來極大的不便。
Visual FoxPro是一個優(yōu)秀的可視化數(shù)據(jù)庫編程工具,其中數(shù)據(jù)庫管理系統(tǒng)的一個主要功能是數(shù)據(jù)查詢。我們不僅可以創(chuàng)建和管理數(shù)據(jù)庫,還可以創(chuàng)建各種簡單的連接查詢應(yīng)用程序。SQL-Select命令可以實(shí)現(xiàn)對數(shù)據(jù)庫的任何查詢,本文主要討論以查詢命令方式來實(shí)現(xiàn)查詢。查詢的主要短語含義如下:
SELECT說明要查詢的數(shù)據(jù);
FROM說明要查詢的數(shù)據(jù)來自哪個或哪些表,可以對單個表或多個表進(jìn)行查詢;
WHERE說明查詢條件,即選擇元組的條件;
GROUP BY短語用于對查詢結(jié)果進(jìn)行分組,可以利用它進(jìn)行分組匯總;
HAVING短語必須跟隨GROUP BY使用,它用來限定分組必須滿足的條件;
ORDER By短語用來對查詢的結(jié)果進(jìn)行排序。
本文中主要針對以下幾個表進(jìn)行查詢:
1.簡單查詢(基于一個表的查詢)
例1:查詢工資在1200以上的職工號。
SELE 職工號 FROM ZG WHER 工資>1200
例2:查詢哪些城市里建了倉庫。
SELE DIST 城市 FROM CK (DISTINCT是去掉重復(fù)值的短語)
2.簡單的聯(lián)接查詢(基于多個表的查詢)
例3:查詢工資在1200以上的職工所在的城市。
SELE 職工號,城市 FROM ZG,CK WHER ZG.倉庫號= CK.倉庫號AND
工資>1200
3.嵌套查詢
此查詢所要求的結(jié)果出自一個關(guān)系,但相關(guān)條件卻涉及多個關(guān)系。WHERE之后是一個相對獨(dú)立的條件,這個條件或者為真,或者為假。但是,有時我們需要用另外的方式來表達(dá)檢索要求,比如,當(dāng)查詢數(shù)據(jù)表X中的元組時,它的條件依賴于相關(guān)的數(shù)據(jù)表Y中的元組屬性值,這種情況用嵌套查詢功能非常方便。
例4:查詢比職工E1 所掙工資高的所有職工。
SELE 職工號FROM ZG WHER工資>(SELE工資FROM ZG WHER 職工號="E1")
例5:查所有職工的工資都多于1200元的倉庫信息。
SELE * FROM CK WHERE 倉庫號 NOT IN
(SELE 倉庫號 FROM ZG WHERE 工資<=1200)
注意:如果條件變成:查所有職工的工資都多于1200元的倉庫信息,并且該倉庫至少有一名職工。則可以這樣寫出查詢語句:
SELE * FROM CK WHERE 倉庫號 NOT IN
(SELE 倉庫號 FROM ZG WHERE 工資<=1200)
AND 倉庫號 IN(SELE 倉庫號 FROM 職工)
4.使用特殊運(yùn)算符的查詢
例6:查詢工資在1200到1300的職工信息。
SELE * FROM ZG WHERE 工資 BETWEEN 1200 AND 1300
例7:查詢出所有工廠的信息。
SELE *FROM GYS WHERE 供應(yīng)商名 LIKE “%廠”
注意:BETWEEN……AND是包含邊界值的查詢。
LIKE是字符串匹配運(yùn)算符,通配符“%”代表若干個字符,“_”代表一個字符。
5.排序查詢
例8:對ck表先按倉庫號,再按面積排序并輸出全部信息。
SELE * FORM CK ORDER BY 倉庫號,面積
6.計(jì)算查詢
SQL語言有以下幾個用于計(jì)算檢索的函數(shù):
Sum( )求和
AVG( )求平均值
MAX( )求最大值(數(shù)值、字符、日期)
MIN( )求最小值(數(shù)值、字符、日期)
COUNT( )計(jì)數(shù)
例9:查詢ZG表中應(yīng)付職工工資的總數(shù),并將產(chǎn)生的字段命名為“總工資”。
SELE SUM(工資)AS總工資FROM ZG
例10:查詢在WH1倉庫工作的職工的最低工資。
SELE MIN(工資)FROM ZG WHERE 倉庫號=“WH1”
7.分組計(jì)算查詢
Group by <列名>[,<列名>... ][having<篩選條件>]
這條命令可以按一列或多列分組,當(dāng)要求分組滿足某個條件時,可用having進(jìn)一步限定分組的條件,并且having子句總是跟在group by子句之后,不可以單獨(dú)使用。
例11:求每個倉庫的職工的平均工資。
SELECT倉庫號,AVG(工資)FROM ZG GROUP BY 倉庫號
例12:求至少有兩個職工的每個倉庫的職工的平均工資。
SELECT倉庫號,AVG(工資)FROM ZG GROUP BY 倉庫號 HAVING COUNT(*)>=2
8.內(nèi)外層相關(guān)嵌套查詢
在查詢的過程當(dāng)中,有時候內(nèi)層查詢的條件需要外層查詢提供值,而外層查詢條件需要內(nèi)層的查詢結(jié)果,這時候我們用到的查詢就是內(nèi)外層相關(guān)嵌套查詢。
例13:列出每個職工經(jīng)手的具有最高總金額的訂購單信息。
SELECT OUT. 職工號,OUT. 供應(yīng)商號, OUT. 訂購單號,OUT. 訂購日期, OUT. 總金額
FROM DGD OUT WHERE 總金額=
(SELECT MAX (總金額) FROM DGD IN
WHERE OUT. 職工號= IN. 職工號)
9.超連接查詢
在Visual FoxPro中提供了專門用于支持超連接查詢的命令,格式為:
Select. . . . . .
From < 表名1 > inner| left| right| full join < 表名2>
On <連接條件>
Where. . . . . .
這里inner join 等價于join, 為普通的連接,也稱內(nèi)部聯(lián)接,即只有滿足連接條件的記錄才出現(xiàn)在查詢結(jié)果中; left join 為左連接,即除滿足連接條件的記錄出現(xiàn)在查詢結(jié)果中外,第一個表中不滿足連接條件的記錄也出現(xiàn)在查詢結(jié)果中,但相應(yīng)部分為空值; right join 為右連接,即除滿足連接條件的記錄出現(xiàn)在查詢結(jié)果中外,第二個表中不滿足連接條件的記錄也出現(xiàn)在查詢結(jié)果中,但相應(yīng)部分為空值; full join為全連接,即兩個表中的記錄不管是否滿足連接條件將都在目標(biāo)表中出現(xiàn),不滿足連接條件的記錄對應(yīng)部分為空值。
on < 連接條件>指定連接條件。
例14:查詢職工所在倉庫的信息和職工的信息。(內(nèi)部聯(lián)接)
SELECT CK.*,職工號,工資
FROM CK JOIN ZG
ON CK.倉庫號=ZG.倉庫號
例15:查詢職工所在倉庫的信息和職工的信息。(左聯(lián)接)
SELECT CK.*,職工號,工資
FROM CK LEFT JOIN ZG
ON CK.倉庫號=ZG.倉庫號
注意:當(dāng)JOIN 連接格式在連接多個表時,要注意JOIN 的順序和ON 的順序(相應(yīng)的連接條件)正好相反。
10.利用空值查詢
例16:找出沒有確定供應(yīng)商的訂購單信息。
SELE * FROM DGD WHERE 供應(yīng)商號 IS NULL
除了以上的查詢功能,Visual FoxPro還提供了如別名與自連接查詢,使用量詞和謂詞的查詢,集合的并運(yùn)算等等不再一一列舉。以上是我對查詢命令簡單的總結(jié),熟練掌握這些命令,能夠方便迅速的查找我們想要查看的數(shù)據(jù), 能夠提高工作、學(xué)習(xí)的效率, 有利于我們對Visual Foxpro的進(jìn)一步學(xué)習(xí)。
參考文獻(xiàn):
[1]銀華強(qiáng)、劉普艷,Visual FoxPro8數(shù)據(jù)庫項(xiàng)目案例導(dǎo)航[M].清華大學(xué)出版社,2005.1.
[2]張洪舉,Visual FoxPro6.0-9.0 解決方案與范例大全[M].人民郵電出版社,2006.4.
[3]全國計(jì)算機(jī)等級考試二級教程Visual FoxPro程序設(shè)計(jì)[M].高等教育出版社,2004.5.