在VB數(shù)據(jù)庫程序設(shè)計(jì)中經(jīng)常要檢索記錄,常用的是把一條SELECT語句傳送給Recordset對象的Open方法或Execute方法。下面就SELECT語句做一比較全面的闡述。
1.簡單SELECT語句
“SELECT *” 的意思是:返回在所指定的記錄源中能找到的所有字段。這種命令形式很方便,因?yàn)槟銦o需知道從表中檢索的字段名稱。然而,檢索表中的所有列是低效的。因此,因該只檢索需要的字段,這樣可以大大的提高查詢的效率。
2.使用 From 子句指定記錄源
From 子句說明的是查詢檢索記錄的記錄源;該記錄源可以是一個(gè)表或另一個(gè)存儲查詢。
例:Select * From students 檢索students表中的所有記錄
3.用 Where 子句說明條件
Where 子句告訴數(shù)據(jù)庫引擎根據(jù)所提供的一個(gè)或多個(gè)條件限定其檢索的記錄。條件是一個(gè)表達(dá)式,可具有真假兩種判斷。
例:Select * From USERS Where ID='123' (注:標(biāo)準(zhǔn)的SQL語句使用單引號作為字符的定界符)
返回USERS表中ID字段為"123"的所有記錄。
使用 And 和 Or 邏輯可以將兩個(gè)或更多的條件鏈接到一起以創(chuàng)建更高級的 Where 子句。
例:Select * From USERS Where ID = '123' And PWD <> '' 返回ID為“123”PWD不為空的記錄。
SQL語句中的比較運(yùn)算符
操作符 功能 操作符 功能 > 大于 >= 大于或等于 < 小于 <= 小于或等于 = 等于 <> 不等于 Between 在某個(gè)取值范圍內(nèi) Like 匹配某個(gè)模式 In 包含在某個(gè)值列表中
(1)Between 操作符
Select * From USERS Where ID Between 1 And 100
Between 操作符返回的是位于所說明的界限之內(nèi)的所有記錄值。這個(gè)例子就返回ID字段從1到100之間的全部記錄。
(2)Like 操作符和通配符
Select * From USERS Where ID Like "%3%"
Like 操作符把記錄匹配到你說明的某個(gè)模式。這個(gè)例子是返回ID中含“3”的所有記錄。
四種通配符的含義
通配符 描述 通配符 描述 % 代表零個(gè)或者多個(gè)任意字符 [ ] 指定范圍內(nèi)的任意單個(gè)字符 _ 代表一個(gè)任意字符 [^] 不在指定范圍內(nèi)的任意單個(gè)字符
全部示例子如下:
Like "BR%" 返回以"BR"開始的任意字符串
Like "br%" 返回以"br"開始的任意字符串
Like "%een" 返回以"een"結(jié)束的任意字符串
Like "%en%" 返回包含"en"的任意字符串
Like "_en" 返回以"en"結(jié)束的三個(gè)字符串
Like "[CK]%" 返回以"C"或者"K"開始的任意字符串
Like "[S-V]ing" 返回長為四個(gè)字符的字符串,結(jié)尾是"ing",開始是從S到V
Like "M[^c]%" 返回以"M"開始且第二個(gè)字符不是"c"的任意字符串
4.使用Order By排序
在一個(gè)正式的 Select 查詢之后包含一個(gè) Order By 子句,后跟想排序的字段(可以有多個(gè))便可以說明一個(gè)排序順序。
例:Select * From USERS Where ID Like '%3%' Order By ID
對返回的記錄按ID進(jìn)行排序。
以降序排序(默認(rèn)按升序),只需在排序的字段之后使用 Desc 關(guān)鍵字。
例:Select * From USERS Where ID Like '%3%' Order By ID Desc
5.使用 Top 顯示某個(gè)范圍的第一個(gè)記錄或最后一個(gè)記錄
使用 Top 關(guān)鍵字可以只顯示一個(gè)大記錄前面或后面的少數(shù)幾個(gè)記錄。在查詢中,Top 關(guān)鍵字與排序子句一起把結(jié)果集限制為少數(shù)幾個(gè)記錄或按某個(gè)百分比顯示整個(gè)結(jié)果記錄集合中的一部分。
例:Select Top 3 * From USERS 返回USERS表中的前3條記錄
Select Top 10 Percent * From USERS 返回USERS表中前面的10%個(gè)記錄
Select Top 3 * From USERS Order By ID Desc 返回USERS表中ID最大的的3條記錄
6.用 As 對字段名進(jìn)行別名化
為什么在查詢中對字段命以別名,或重新命名,這樣做的原因有兩個(gè):
(1)所涉及的表的字段名很長,想使字段在結(jié)果集中更易處理一些。
(2)創(chuàng)建的查詢產(chǎn)生了某些計(jì)算或合計(jì)列,需要對之進(jìn)行命名。
例:Select ID As 用戶號 ,PAS As 密碼 From USERS
8.連接查詢
在實(shí)際使用過程中經(jīng)常需要同時(shí)從兩個(gè)表或者兩個(gè)以上表中檢索數(shù)據(jù)。連接就是允許同時(shí)從兩個(gè)表或者兩個(gè)以上表中檢索數(shù)據(jù),指定這些表中某個(gè)或者某些列作為連接條件。在 SQL Server 中,可以使用兩種連接語法形式,一種是 Ansi 連接語法形式,這是連接用在 From 子句中,另外一種是 SQL Server 連接語句形式,這是連接用在 Where 子句中。
Ansi 連接語法形式如下:
Select table_name.column_name,table_name.column_name,......
From {table_name [join_type] Join table_name On search_conditions}
Where [search_conditions]
在 Ansi 語法形式中,可以 Ansi 連接關(guān)鍵字來確定使用的連接形式。
(1)使用 Inner Join 關(guān)鍵字,結(jié)果集中僅包含滿足條件的行。
(2)使用 Cross Join 關(guān)鍵字,結(jié)果集中包含兩個(gè)表中所有行的組合。
(3)使用 Outer Join 關(guān)鍵字,結(jié)果集中既包含那些滿足條件的行,還包含那些其中某個(gè)表的全部行。
連接有多種形式,例如內(nèi)連接、外邊接、無限制連接、自邊接等外連接又可以分為左外連接、右外連接和全連接。下面詳細(xì)介紹這些連接方法。
(1)內(nèi)連接
內(nèi)連接用于把兩個(gè)表一個(gè)第三個(gè)表,在這個(gè)第三個(gè)表中,僅包含那么滿足連接條件的記錄的記錄行。內(nèi)連接主要有兩種形式,即等價(jià)連接和自然連接。
等價(jià)連接就是連接通過比較列值是相等的列,等價(jià)連接總會產(chǎn)生冗余行,因?yàn)檫B接的列要顯示兩次。
自然連接就是比較列值與兩個(gè)或者多個(gè)表中列是否相等,但是連接的列只顯示一次。自然連接清除了等價(jià)連接產(chǎn)生的冗余行。
(2)無限制連接
無限制連接有時(shí)也稱為交叉連接,產(chǎn)生一個(gè)結(jié)果集。在這個(gè)結(jié)果集中中,包含了所連接的兩個(gè)表中所有行的全部組合。交叉連接既可以使用 Ansi 連接的 Cross Join 關(guān)鍵字來創(chuàng)建,也可以使用 Where 子句的 SQL Server 連接形式可以產(chǎn)生非常大的結(jié)果集,例如如果在連接中,一個(gè)表的記錄是12行,另一個(gè)表中的記錄是15行,那么在產(chǎn)生的結(jié)果集中就有 180 行記錄。因此,這種連接形式通常沒有什么實(shí)際意義。
(3)外連接
內(nèi)連接是保證兩面三刀個(gè)表中所有的行都要滿足連接條件,而外連接則不然。在外連接中,某些不滿條件的列也會顯示出來,也就是說,只限制其中一個(gè)表的行,而不限制另一個(gè)表中行。這種連接形式在許多情況下是非常有用的。外連接只能用于兩個(gè)表中。 在 Ansi 語法形式中,包含下列三種外連接關(guān)鍵字:
◆Left Outer Join 包含了左表中的全部行(表達(dá)式中第一個(gè)表)
◆Right Outer Join 包括了右表中的全部行(表達(dá)式中第二個(gè)表)
◆Full Outer Join 包括了左表和右表中所有不滿足條件的行
在 SQL Server 連接語法形式中,包括下列兩種外連接運(yùn)算符:
◆* = 包含了左表中的全部行(表達(dá)式中第一個(gè)表)
◆ = * 包括了右表中的全部行(表達(dá)式中第二個(gè)表)
左外連接和右連接都可以產(chǎn)生同樣的結(jié)果,關(guān)鍵是看表達(dá)式中出現(xiàn)的前后順序
(4)自連接
自連接就是把某一個(gè)表中的行同該表中另外一些行連接起來。自連接主要用在查詢比較相同的信息。例如,如果希望得到所有合作出版書的作者,那么可以使用比較作者代號的查詢。所比較的列必須有相同的或者兼容的數(shù)據(jù)類型。
為了連接同一個(gè)表,為該表指定兩個(gè)別名是非常重要的,這樣才可以把該邏輯上作為兩個(gè)不同的表使用。通過在 From 子句中的表名后面增加一個(gè)名稱,這種名稱就是表的別名。
在 Ansi 語法形式中,自連接形式如下:
Select column_name,column_name,.....
From column_name alias [join_type] Join column_name alias
On search_conditions
Where table_name.column_name join_operator table_name.column_name
在 SQL Server 連接語法形式中,自連接形式如下:
Select column_name,column_name,.....
Where table_name.column_name join_operator table_name.column_name
(5)子查詢
Select 語句可以嵌套在其它許多語句中,例如 Select、Insert、Update 或者 Delete 這些嵌套的 Select 語句就稱為子查詢。子查詢有兩種類型,一種是只返回一個(gè)單值的子查詢,這時(shí)它可以用在一個(gè)單值可以使用的地方種是返回一列值的的子查詢,這時(shí)它只能用在 Where 子句中。子查詢必須使用括號括起來。
9.在 SQL 查詢中涉及的多個(gè)合計(jì)函數(shù)
合計(jì)函數(shù) 參數(shù) 描述 AVG ([ALL|DISTINCT]expr) 數(shù)據(jù)表達(dá)式的平均值 COUNT ([ALL|DISTINCT]expr) 在某個(gè)表達(dá)式中數(shù)據(jù)值的數(shù)量 COUNT (*) 所選擇行的數(shù)量 MAX (expression) 表達(dá)式中的最大值 MIN (expresion) 表達(dá)式中的最小值 SUM ([ALL|DISTINCT]expr) 數(shù)據(jù)表達(dá)式的總合值
|