一。概述:
SQL(Structure Query Language,結構化查詢語言)是美國國家標準局ANSI確認的關系數據庫語言的標準,用于對關系型數據庫中的數據進行存儲,查詢及更新等操作。正是由于SQL語言的標準化,所以大多數關系型數據庫系統都支持SQL語言,它已經發展成為多種平臺進行交互操作的底層會話語言。
SQL語言也可應用于VFP中,VFP中的SQL命令采用Rushmore技術來優化系統的性能。一個SQL命令可以用來代替多個VFP命令
前面用"查詢設計器"和"視圖設計器"所做的工作,本質上都是生成一個select-sql命令。單擊"查詢設計器"中的SQL按鈕,即可隨時查看VFP在后臺建立的SQL命令。
二。SQL語言的功能:
SQL語言為用戶提供了以下功能:數據定義,數據檢索,數據操縱和數據控制。
SQL語言是一種交互式的計算機操作語言,也是一種數據庫編程語言,它不僅能夠在單機環境下提供對數據庫的各種訪問操作,而且還可做為一種分布式數據庫語言用于客戶機/服務器模式(Client/Server)數據庫應用程序的開發。我們這里主要介紹select-sql查詢語句。
三。select-sql查詢命令:
數據庫中的數據查詢最終總是通過select-sql命令進行。select-sql命令主要格式為:
select [all|distinct]列名[,列名] from 表名[,表名][into array 數組名/cursor 臨時表名/dbf表名]
[where 條件表達式][group by 列名[,列名][having 條件]][order by 表達式[asc/desc]
說明:
1.select查詢語句的格式主要有select子句,from子句,into子句和to子句,where子句,group by 子句和order by子句。
2.select 子句指明查詢輸出的項目(稱為列)也可以是表達式。利用表達式可以查詢表中未直接存儲但可以由表中數據計算出的結果。為了構造表達式,SQL提供了加(+),減(-),乘(*),除(/)四種運算符和一些函數。
3.在表達式中,若以*代替列名,則表示查詢表的所有列。
4.from子句指明被查詢的表名或視圖名
5.into子句指明查詢結果保存在何處,可以是數組,臨時表或表
6.select和from子句是每個SQL查詢語句所必須的,其他子句是任選的。
7.where子句說明查詢的條件。滿足條件的查詢結果可能不止一個,在select子句中有distinct選項,加了這個選項后,則要求消除查詢結果中的重復項
8.group by子句將表按列值分組,列的值相同的分在一組,having后面的子句是選擇組的條件,符合條件的組才能輸出。
9.order by子句可對查詢結果按子句中指定的列的值排序,ASC表示長序,DESC表示降序。
Visual FoxPro基礎教程完整版四。select-sql應用舉例:
select-sql語句在操作表時,不需要先打開表,即能從表中查詢出數據。以下的例子,既可在命令窗口中逐條輸入運行,也可以將每個例子中的代碼存入一個命令文件中,然后運行該命令文件。
1.查詢"職工檔案"表中的全部信息:
select * from 職工檔案 into cursor abc &&將查詢結果送入臨時表abc中,*表示全部的列
select abc
brow2.查詢職工的姓名,對重名的職工只顯示1次
select distinct 姓名 from 職工檔案
說明:使用distinct可以消除重復的值,這里表示去掉重復的姓名3.查詢職工的編號,姓名和年齡
select 編號,姓名,year(date())-year(出生時間) as 年齡 from 職工檔案說明:select語句后面是列名。列可以是字段,字段組成的表達式或常數,AS用來指定查詢結果中列的標題。此處表達式year(date())-year(出生時間)以"年齡"作為列名顯示。
4. 查詢工資在800元以上的職工的編號,姓名和工資,并按工資由高到低列出
select 編號,姓名,工資 from 職工檔案 where 工資>800 order by 工資 desc說明:
(1)order by子句中的desc是用來指明顯示結果的順序,即工資由高到低輸出。缺省時,以升序(ASC)排序。
(2)where子句用來指定篩選記錄的條件。有多個條件時,可用AND或OR連接。
(3)SQL的查詢方式很豐富,它提供了三種謂詞,它們分別是between,in和like.下面幾個例子說明這三種謂詞的使用。5.查詢工資在1000~1500之間的職工的編號,姓名,職稱和工資
select 編號,姓名,職稱,工資 from 職工檔案 where 工資 between 1000 and 1500說明:在查找中,如果要求某列的數值在某個區間內,可用between…and,而如果要查找不在某個區間的數據,可用not between…and
思考一下:要查詢工資不在1000~1500之間的職工的編號,姓名,職稱和工資,應該怎樣編寫SQL語句?答案:select 編號,姓名,職稱,工資 from 職工檔案 where 工資 not between 1000 and 1500
6.數據包含查詢:使用in的查詢,查詢具有本科和大專文化程度的職工的編號和姓名
select 編號,姓名 from 職工檔案 where 文化程度 in('本科','大專')說明:如果要查的值是已知的某幾個值中的一個,此時可用IN.同樣,可以用not in來表示相反的含義。
7.數據匹配查詢:
利用like的查詢。查詢部門編號為"01"的職工的工資情況
select * from 職工檔案 where 編號 like '01_'(或者like '01%')說明:在查找時,有時需要對字符串比較。like提供兩種字符串匹配方式,一種是使用下劃線"_"匹配任意一個符,另一種是使用百分號"%"匹配0個或多個字符的字符串。同樣可以使用not like來表示相反的含義。
8.聯接查詢:
實際應用于中常常涉及到多表之間的關聯查詢,SQL語言提供了連接多個表的操作,可在兩個或多個表間按指定的列的相同的值將一個表中的行與另一個表中的行連接起來。從而大增強了其查詢能力。
為了防止多表中同名字段的二義性,查詢語句中的字段名前最好加上表名作為前綴,為了減少輸入時的麻煩,還可在from子句中給表起一個別名。
例:查詢職工的編號,姓名,職稱與工資
select 職工檔案。編號,職工檔案。職稱,工資情況。姓名,工資情況。工資 from 職工檔案,工資情況 where
職工檔案。編號=工資情況。編號9.聯合查詢:
在SQL語言中可將兩個或多個查詢結果進行并操作(union),需要注意的是,兩個查詢結果進行并操作時,它們必須具有相同的列數,并且對應的列有著相同的數據類型和長度(對應的列名可以不同).union運算自動去掉重復記錄。
例:查詢具有工程師和政工師職稱的職工的編號和姓名
SElect 編號,姓名 from 職工檔案 where 職稱='工程師' union select 編號,姓名 from 職工檔案
where 職稱='政工師'例:查詢具有工程師職稱和工資高于1000元的職工的編號
select 編號 from 職工檔案 where 職稱='工程師' union select 編號 from 工資情況 where 工資>100010.嵌套查詢:
在一個select命令的where子句中出現另一個select 命令,則稱為嵌套查詢或稱為子查詢,必須用花括號括起來。在where子句中最多可以有兩個同級(不是嵌套的)子查詢。
例:查詢工資高于1000的職工的編號,姓名和職稱。
select 編號,姓名,職稱 from 職工檔案 where 編號 in(select 編號 from 工資情況 where 工資>1000)上述SQL語句執行的是兩個過程,首先在"工資情況"表中找出工資高于1000的職工的編號,然后再根據此編號在"職工檔案"表中查出姓名和職稱。
11.庫函數:
select語句不僅可以通過where子句查找滿足條件的數據,還可以通過函數對滿足條件的數據進行統計,計數等運算。下列五種函數可以在from子句中與選定的列一起使用:
Min 求(字符,日期,數值)列的最小值
Max 求(字符,日期,數值)列的最大值
Count(*) 計算記錄的個數
Sum 計算數值列的總和
AVG 計算數值列的平均值這些函數是從一組值中計算出一個匯總信息,group by 子句用來定義或劃分進行統計或求和的組。
例:查詢男女職工人數,最高工資,最低工資,工資總額和平均工資
select 性別,count(*),Max(工資),Min(工資),sum(工資),avg(工資) from 職工檔案 group by 性別例:查出有三個人以上具有相同職稱的職稱名稱。
select 職稱 from 職工檔案 group by 職稱 having count(*)>3注意:having子句和where子句的區別。where子句用來指定表中元組所應滿足的條件,而having子句用來指定每一分組所應滿足的條件,只有滿足having子句的條件的那些組才能在結果中被顯示。即having用于去掉不符合條件的分組,如同where子句用于去掉不符合條件的若干行一樣。
在此例中,在表中按職稱進行分組,然后在每個分組中檢測其記錄個數是否大于等于3,如果滿足條件,則該組的職稱才被輸出。
Visual FoxPro基礎教程完整版生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
![]()