了解 SQL 的工作原理可以幫助您創(chuàng)建更好的查詢,并使您更容易理解如何修復(fù)一個不返回所需結(jié)果的查詢。
注釋 不可編輯 Web 查詢的 SQL。
本文內(nèi)容
什么是 SQL?
SQL 是一種用于處理多組事實和事實之間關(guān)系的計算機語言。Microsoft Office Access 等關(guān)系數(shù)據(jù)庫程序使用 SQL 來處理數(shù)據(jù)。SQL 和許多計算機語言不同的是,即使對于初學(xué)者也不難閱讀和理解。SQL 和許多計算機語言相同的是,它作為一種國際標(biāo)準(zhǔn)得到標(biāo)準(zhǔn)化機構(gòu)(如 ISO(英文) 和 ANSI(英文))的認(rèn)可。
“SQL 即使對于初學(xué)者也不難閱讀和理解。” |
可以使用 SQL 描述有助于您回答問題的多組數(shù)據(jù)。使用 SQL 時,必須使用正確語法。語法是一組規(guī)則,按這組規(guī)則將語言元素正確地組合起來。SQL 語法以英語語法為基礎(chǔ),使用的許多元素與 Visual Basic for Applications (VBA) (Visual Basic for Applications (VBA):Microsoft Visual Basic 的宏語言版本,用于編寫基于 Microsoft Windows 的應(yīng)用程序,內(nèi)置于多個 Microsoft 程序中。) 語法相同。
例如,一個簡單的 SQL 語句如下,該語句用于檢索姓氏列表中名字是“Mary”的聯(lián)系人:
SELECT Last_Name
FROM Contacts
WHERE First_Name = 'Mary';
注釋 SQL 不僅用于操縱數(shù)據(jù),而且用于創(chuàng)建和更改數(shù)據(jù)庫對象(如表)的設(shè)計。用于創(chuàng)建和更改數(shù)據(jù)庫對象的那部分 SQL 叫做數(shù)據(jù)定義語言 (DDL)。本主題不涉及 DDL。有關(guān)詳細(xì)信息,請參閱使用數(shù)據(jù)定義查詢創(chuàng)建或修改表或索引一文。
SELECT 語句
要使用 SQL 描述一組數(shù)據(jù),您可以編寫 SELECT 語句。一個 SELECT 語句包含您要從數(shù)據(jù)庫中獲得的一組數(shù)據(jù)的完整描述, 其中包括:
- 哪些表包含數(shù)據(jù)。
- 不同數(shù)據(jù)源中的數(shù)據(jù)怎樣關(guān)聯(lián)。
- 哪些字段或計算將產(chǎn)生數(shù)據(jù)。
- 數(shù)據(jù)必須符合哪些條件才能被選中。
- 是否以及怎樣對結(jié)果進(jìn)行排序。
SQL 子句
SQL 語句和句子一樣有子句。每個子句執(zhí)行一個 SQL 語句的功能。某些子句在 SELECT 語句中是必需的。下表列出了最常見的 SQL 子句。
SQL 子句 |
執(zhí)行的操作 |
是否必需 |
SELECT |
列出含有關(guān)注的數(shù)據(jù)的字段。 |
是 |
FROM |
列出的表中含有 SELECT 子句中列出的字段。 |
是 |
WHERE |
指定要包括在結(jié)果內(nèi)的每條記錄必須符合的字段條件。 |
否 |
ORDER BY |
指定怎樣對結(jié)果進(jìn)行排序。 |
否 |
GROUP BY |
在包含聚合函數(shù)的 SQL 語句中,列出未在 SELECT 子句中匯總的字段。 |
僅在存在這類字段時才是必需的 |
HAVING |
在包含聚合函數(shù)的 SQL 語句中,指定應(yīng)用于在 SELECT 語句中匯總的字段的條件。 |
否 |
SQL 詞條
每個 SQL 子句都由相當(dāng)于詞類的詞條組成。下表列出了 SQL 詞條類型。
SQL 詞條 |
相當(dāng)?shù)?/strong>詞類 |
定義 |
示例 |
標(biāo)識符 |
名詞 |
用來標(biāo)識數(shù)據(jù)庫對象的名稱,如字段名稱。 |
客戶.[電話號碼] |
運算符 |
動詞或副詞 |
表示操作或修改操作的關(guān)鍵字。 |
AS |
常量 |
名詞 |
不發(fā)生更改的值,如數(shù)字或 NULL。 |
42 |
表達(dá)式 |
形容詞 |
標(biāo)識符、運算符、常量和函數(shù)的組合,可計算為單個值。 |
>= 產(chǎn)品.[單價] |
基本 SQL 子句:SELECT、FROM 和 WHERE
SQL 語句采用以下一般形式:
SELECT field_1
FROM table_1
WHERE criterion_1
;
注釋
- Access 會忽略 SQL 語句中的換行符。不過,對于您自己和其他人,考慮讓每個子句使用一行有助于提高 SQL 語句的可讀性。
- 每個 SELECT 語句都以分號 (;) 結(jié)束。分號可以出現(xiàn)在最后一個子句的末尾或者單獨出現(xiàn)在 SQL 語句末尾處的一行。
Access 中的示例
下面的內(nèi)容演示了在 Access 中用于簡單選擇查詢的 SQL 語句的外觀:
SELECT 子句
FROM 子句
WHERE 子句
此示例 SQL 語句可以讀作“選擇存儲在名為‘聯(lián)系人’的表內(nèi)名為‘電子郵件地址’和‘公司’的字段中的數(shù)據(jù),特別是‘城市’字段的值為‘西安’的記錄。”
我們來看一下該示例,一次看一個子句,以便了解 SQL 語法如何工作。
SELECT 子句
SELECT [電子郵件地址], 公司
這是 SELECT 子句。它由一個運算符 (SELECT) 及后面的兩個標(biāo)識符([電子郵件地址] 和“公司”)組成。
如果標(biāo)識符中包含空格或特殊字符(如“電子郵件地址”),則必須用方括號將它括起來。
SELECT 子句不必指出包含字段的表,并且它無法指定要包括的數(shù)據(jù)必須滿足的任何條件。
在 SELECT 語句中,SELECT 子句始終出現(xiàn)在 FROM 子句的前面。
FROM 子句
FROM 聯(lián)系人
這是 FROM 子句。它由一個運算符 (FROM) 及后面的標(biāo)識符(聯(lián)系人)組成。
FROM 子句不會列出要選擇的字段。
WHERE 子句
WHERE 城市="西安"
這是 WHERE 子句。它由一個運算符 (WHERE) 及后面的表達(dá)式(城市="西安") 組成。
注釋 與 SELECT 和 FROM 子句不同,WHERE 子句不是 SELECT 語句的必需元素。
通過使用 SELECT、FROM 和 WHERE 子句,您可以完成 SQL 支持的許多操作。有關(guān)如何使用這些子句的詳細(xì)信息將在本文末尾的以下節(jié)中另行提供:
返回頁首
對結(jié)果排序:ORDER BY
與 Microsoft Office Excel 一樣,Access 允許您對數(shù)據(jù)表中的查詢結(jié)果排序。還可以使用 ORDER BY 子句在查詢中指定當(dāng)查詢運行時您所希望的結(jié)果排序方式。如果使用 ORDER BY 子句,則該子句是 SQL 語句中的最后一個子句。
ORDER BY 子句包含要用于排序的字段的列表,字段的順序與要應(yīng)用的排序操作中的順序相同。
例如,假定您希望首先按照“公司”字段的值以降序?qū)Y(jié)果排序,并且如果存在值與“公司”的值相同的記錄,再按照“電子郵件地址”字段中的值以升序排序。您的 ORDER BY 子句將類似于以下內(nèi)容:
ORDER BY 公司 DESC, [電子郵件地址]
注釋 默認(rèn)情況下,Access 會按照升序(A-Z,從最小到最大)對值排序。而使用 DESC 關(guān)鍵字可以按照降序?qū)χ蹬判颉?/p>
有關(guān) ORDER BY 子句的詳細(xì)信息,請參閱 ORDER BY 子句這一主題。
處理匯總數(shù)據(jù):GROUP BY 和 HAVING
有時候您想要處理匯總數(shù)據(jù),例如一個月的總銷售額或者庫存中最昂貴的物品。為此,您向 SELECT 子句中的字段應(yīng)用了聚合函數(shù) (聚合函數(shù):用于計算總計的函數(shù)。例如:Sum、Count、Avg 或 Var。)。例如,如果您希望查詢顯示為每家公司列出的電子郵件地址計數(shù),則 SELECT 子句可能類似于以下內(nèi)容:
SELECT COUNT([電子郵件地址]), 公司
可以使用的聚合函數(shù)取決于要使用的字段或表達(dá)式中的數(shù)據(jù)類型。有關(guān)可用的聚合函數(shù)的詳細(xì)信息,請參閱 SQL 聚合函數(shù)一文。
指定未在聚合函數(shù)中使用的字段:GROUP BY 子句
在使用聚合函數(shù)時,通常還必須創(chuàng)建一個 GROUP BY 子句。GROUP BY 子句列出未應(yīng)用聚合函數(shù)的所有字段。如果您向查詢中的所有字段應(yīng)用了聚合函數(shù),則不必創(chuàng)建 GROUP BY 子句。
GROUP BY 子句緊跟在 WHERE 子句或 FROM 子句(如果沒有 WHERE 子句)后面。GROUP BY 子句會像字段在 SELECT 子句中出現(xiàn)的那樣列出字段。
例如,繼續(xù)使用上一個示例,如果 SELECT 子句向 [電子郵件地址] 而未向“公司”應(yīng)用聚合函數(shù),則 GROUP BY 子句將類似于以下內(nèi)容:
GROUP BY 公司
有關(guān) GROUP BY 子句的詳細(xì)信息,請參閱 GROUP BY 子句這一主題。
使用組條件限制聚合值:HAVING 子句
如果要使用條件來限制結(jié)果,但要應(yīng)用條件的字段用在聚合函數(shù)中,則您無法使用 WHERE 子句??梢允褂?HAVING 子句。HAVING 子句的工作方式類似于 WHERE 子句,但是它用于聚合數(shù)據(jù)。
例如,假定您將 AVG 函數(shù)(計算平均值)用于 SELECT 子句中的第一個字段:
SELECT COUNT([電子郵件地址]), 公司
如果您希望查詢基于 COUNT 函數(shù)的值來限制結(jié)果,則您不能在 WHERE 子句中將條件用于該字段。不過,可以將條件放在 HAVING 子句中。例如,如果您只想讓查詢在有多個電子郵件地址與公司關(guān)聯(lián)時返回行,則 HAVING 子句可能類似于以下內(nèi)容:
HAVING COUNT([電子郵件地址])>1
注釋 查詢可以有一個 WHERE 子句和一個 HAVING 子句,未在聚合函數(shù)中使用的字段的條件進(jìn)入 WHERE 子句,而用于聚合函數(shù)的字段的條件進(jìn)入 HAVING 子句。
有關(guān) HAVING 子句的詳細(xì)信息,請參閱 HAVING 子句這一主題。
合并查詢結(jié)果:UNION
當(dāng)您希望將幾個相似的選擇查詢返回的所有數(shù)據(jù)一起作為一個合并的集合查看時,便可以使用 UNION 運算符。
UNION 運算符讓您將兩個 SELECT 語句合二為一。合并的 SELECT 語句必須具有相同的輸出字段數(shù)、采用相同的順序并包含相同或兼容的數(shù)據(jù)類型。在運行查詢時,來自每組相應(yīng)字段的數(shù)據(jù)將合并到一個輸出字段中,這樣查詢輸出所包含的字段數(shù)將與每個 Select 語句相同。
注釋 根據(jù)聯(lián)合查詢的目的,“數(shù)字”和“文本”數(shù)據(jù)類型兼容。
使用 UNION 運算符時,還可以通過使用 ALL 關(guān)鍵字指定查詢結(jié)果是否應(yīng)包含重復(fù)行(如果存在)。
對于合并了兩個 SELECT 語句的聯(lián)合查詢,其基本 SQL 語法如下:
SELECT field_1
FROM table_1
UNION [ALL]
SELECT field_a
FROM table_a
;
例如,假設(shè)您有兩個表,分別名為“產(chǎn)品”和“服務(wù)”。這兩個表都具有包含下列內(nèi)容的字段:產(chǎn)品或服務(wù)的名稱、價格、保修或擔(dān)保條款以及是否以獨占方式提供產(chǎn)品或服務(wù)。雖然“產(chǎn)品”表存儲了保修信息,而“服務(wù)”表存儲了擔(dān)保信息,但基本信息是相同的(即特定的產(chǎn)品或服務(wù)是否包括質(zhì)量承諾)。您可以使用下面這樣的聯(lián)合查詢將這兩個表中的四個字段合并在一起:
SELECT name, price, warranty_available, exclusive_offer
FROM Products
UNION ALL
SELECT name, price, guarantee_available, exclusive_offer
FROM Services
;
有關(guān)如何使用 UNION 運算符合并 SELECT 語句的詳細(xì)信息,請參閱使用聯(lián)合查詢合并多個選擇查詢的結(jié)果一文。
返回頁首
有關(guān) SELECT 子句的詳細(xì)信息
在 SELECT 語句中,SELECT 子句列出了包含要使用的數(shù)據(jù)的字段。
使用方括號將標(biāo)識符括起來
在 SELECT 子句中,可以使用方括號字段名稱括起來。如果名稱中沒有包含任何空格或特殊字符(如標(biāo)點符號),則方括號是可選的。如果名稱中確實包含空格或特殊字符,則必須使用方括號。
提示 包含空格的名稱可讀性更好并且在您設(shè)計窗體和報表時可以節(jié)省時間,但也會讓您在編寫 SQL 語句時的鍵入工作量增大。在數(shù)據(jù)庫中命名對象時您應(yīng)該考慮這個情況。
如果 SQL 語句中有兩個或更多個同名字段,則必須將每個字段的數(shù)據(jù)源名稱添加到 SELECT 子句內(nèi)的字段名稱中。用于數(shù)據(jù)源的名稱與您在 FROM 子句中使用的名稱相同。
選擇所有字段
在您想要包括數(shù)據(jù)源中的所有字段時,可以在 SELECT 子句中逐一列出所有字段,也可以使用星號通配符 (*)。使用星號時,Access 會在查詢運行時確定數(shù)據(jù)源中包含哪些字段,并在查詢中包括所有這些字段。這有助于確保在向數(shù)據(jù)源添加新字段時查詢始終都是最新的。
可以在 SQL 語句中將星號用于一個或多個數(shù)據(jù)源。如果使用星號并且有多個數(shù)據(jù)源,則必須將數(shù)據(jù)源名稱與星號一同包括,以便 Access 可以確定要包括哪個數(shù)據(jù)源中的所有字段。
例如,假定您要在 Orders 表中選擇所有字段但在聯(lián)系人表中僅選擇電子郵件地址, 則 SELECT 子句可能類似于:
SELECT Orders.*, 聯(lián)系人.[電子郵件地址]
注釋 記錄使用星號的時間。如果新字段是后來添加到數(shù)據(jù)源中的并且您沒有對它們進(jìn)行規(guī)劃,則查詢結(jié)果可能不會如您所愿。
選擇不同的值
如果您知道您的語句將選擇重復(fù)的數(shù)據(jù),而且您只想看到不同的值,則可以在 SELECT 子句中使用 DISTINCT 關(guān)鍵字。例如,假定您的每位客戶都代表著一些不同的利益集團,其中一些使用相同的電話號碼。如果您想確保每個電話號碼只顯示一次,則 SELECT 子句如下所示:
SELECT DISTINCT [txtCustomerPhone]
使用字段或表達(dá)式的替換名稱:AS 關(guān)鍵字
可以通過在 SELECT 子句中使用 AS 關(guān)鍵字和字段別名來更改為數(shù)據(jù)表視圖中的任何字段顯示的標(biāo)簽。字段別名是您為了使結(jié)果的可讀性更強而分配給查詢中的字段的名稱。例如,如果要從名為 txtCustPhone 的字段中選擇數(shù)據(jù),并且該字段包含客戶電話號碼,則可以通過在 SELECT 語句中使用字段別名來提高結(jié)果的可讀性,如下所示:
SELECT [txtCustPhone] AS [客戶電話號碼]
注釋 在 SELECT 子句中使用表達(dá)式時必須使用字段別名。
使用表達(dá)式進(jìn)行選擇
有時候您想查看基于您的數(shù)據(jù)的計算結(jié)果,或者僅檢索字段的一部分?jǐn)?shù)據(jù)。例如,假定您要基于數(shù)據(jù)庫中出生日期字段中的數(shù)據(jù)返回客戶的出生年份。您的 SELECT 子句可能類似于以下內(nèi)容:
SELECT DatePart("yyyy",[出生日期]) AS [出生年份]
此表達(dá)式包括 DatePart 函數(shù)和兩個參數(shù):“yyyy”(一個常量)和 [出生日期](一個標(biāo)識符)。
可以使用任何一個有效表達(dá)式作為字段,條件是在給定單個輸入值時該表達(dá)式輸出單個值。
返回頁首
有關(guān) FROM 子句的詳細(xì)信息
在 SELECT 語句中,F(xiàn)ROM 子句指定包含 SELECT 子句將要使用的數(shù)據(jù)的表或查詢。
假定您想知道某個特定客戶的電話號碼。假設(shè)包含存儲此數(shù)據(jù)的字段的表名為 tblCustomer,F(xiàn)ROM 子句將類似于以下內(nèi)容:
FROM tblCustomer
使用方括號將標(biāo)識符括起來
可以使用方括號將名稱括起來。如果名稱中沒有包含任何空格或特殊字符(如標(biāo)點符號),則方括號是可選的。如果名稱中確實包含空格或特殊字符,則必須使用方括號。
提示 包含空格的名稱可讀性更好并且在您設(shè)計窗體和報表時可以節(jié)省時間,但也會讓您在編寫 SQL 語句時的鍵入工作量增大。在數(shù)據(jù)庫中命名對象時您應(yīng)該考慮這個情況。
使用數(shù)據(jù)源的替換名稱
通過在 FROM 子句中使用表別名,可以在 SELECT 語句中用不同的名稱來引用數(shù)據(jù)源。表別名是一個名稱,當(dāng)您將表達(dá)式作為數(shù)據(jù)源或者要使 SQL 語句更容易鍵入和閱讀時可以在查詢中將該名稱分配給數(shù)據(jù)源。如果數(shù)據(jù)源名稱過長或者難于鍵入,尤其是多個字段在不同的表中具有相同名稱時,表別名特別有用。
例如,如果想從兩個名稱均為 ID 的字段中選擇數(shù)據(jù),并且其中一個字段在表 tblCustomer 中,另一個在表 tblOrder 中,則 SELECT 子句可能類似于以下內(nèi)容:
SELECT [tblCustomer].[ID], [tblOrder].[ID]
通過在 FROM 子句中使用表別名,可以使查詢更容易鍵入。包含表別名的 FROM 子句可能類似于以下內(nèi)容:
FROM [tblCustomer] AS [C], [tblOrder] AS [O]
然后,您可以在 SELECT 子句中使用這些表別名,如下所示:
SELECT [C].[ID], [O].[ID]
注釋 使用表別名時,可以通過使用數(shù)據(jù)源的別名或者完整名稱在 SQL 語句中引用數(shù)據(jù)源。
聯(lián)接相關(guān)數(shù)據(jù)
如果您需要一種方法將兩個數(shù)據(jù)源中的記錄對合并為查詢結(jié)果中的單個記錄,可以執(zhí)行聯(lián)接。聯(lián)接是一種 SQL 操作,它指定如何將兩個數(shù)據(jù)源關(guān)聯(lián),以及在一個數(shù)據(jù)源中沒有對應(yīng)數(shù)據(jù)時是否應(yīng)包括另一個數(shù)據(jù)源中的數(shù)據(jù)。
要合并兩個數(shù)據(jù)源中的信息,可以對兩個數(shù)據(jù)源中的公共字段執(zhí)行聯(lián)接操作。當(dāng)此字段中存儲的值匹配時,記錄中的數(shù)據(jù)將合并到結(jié)果內(nèi)。
除了合并數(shù)據(jù)外,還可以使用聯(lián)接指定在相關(guān)表中沒有對應(yīng)記錄時是否包括任何一個表中的記錄。
例如,假定您要在查詢中使用以下兩個表中的數(shù)據(jù):tblCustomer 和 tblOrder。這兩個表都有一個用來標(biāo)識客戶的 CustomerID 字段。tblCustomer 表中的每條記錄在 tblOrder 表中可能有一條或更多條對應(yīng)的記錄,并且對應(yīng)值可由 CustomerID 字段中的值決定。
如果想要聯(lián)接表以使查詢合并表中的記錄并在一個表中沒有對應(yīng)記錄時排除任何一個表中的記錄,則 FROM 子句可能類似于以下內(nèi)容(此處增加的換行符是為了提高可讀性):
FROM [tblCustomer] INNER JOIN [tblOrder]
ON [tblCustomer].[CustomerID]=[tblOrder].[CustomerID]
在 Microsoft Office Access 中,聯(lián)接在 SELECT 語句的 FROM 子句中進(jìn)行。聯(lián)接有兩種類型:內(nèi)部聯(lián)接和外部聯(lián)接。以下部分將介紹這兩種類型的聯(lián)接。
內(nèi)部聯(lián)接
內(nèi)部聯(lián)接是最常見的聯(lián)接類型。在包含內(nèi)部聯(lián)接的查詢運行時,查詢結(jié)果中只包含兩個聯(lián)接表中存在有公共值的記錄。
內(nèi)部聯(lián)接的語法如下(此處增加的換行符是為了提高可讀性):
FROM table1 INNER JOIN table2
ON table1.field1 compopr table2.field2
下表介紹 INNER JOIN 操作的不同部分。
外部聯(lián)接
外部聯(lián)接與內(nèi)部聯(lián)接類似,因為它們都指示查詢?nèi)绾稳ズ喜蓚€源中的信息。它們又是不同的,因為它們還指定不存在公共值時是否包括數(shù)據(jù)。外部聯(lián)接具有方向性:可以指定是包括在聯(lián)接中指定的第一個數(shù)據(jù)源中的所有記錄(稱為左聯(lián)接),還是包括聯(lián)接中第二個數(shù)據(jù)源中的所有記錄(稱為右聯(lián)接)。
外部聯(lián)接的語法如下:
FROM table1 [ LEFT | RIGHT ] JOIN table2
ON table1.field1compopr table2.field2
下表介紹 LEFT JOIN 和 RIGHT JOIN 操作的不同部分。
有關(guān)聯(lián)接的詳細(xì)信息,請參閱聯(lián)接表和查詢一文。
返回頁首
有關(guān) WHERE 子句的詳細(xì)信息
當(dāng)您想使用數(shù)據(jù)來限制查詢中返回的記錄數(shù)時,可以使用 SELECT 語句的 WHERE 子句中的查詢條件 (條件:所指定的限制查詢或篩選的結(jié)果集中包含哪些記錄的條件。)。查詢條件類似于公式,它是一個可能由字段引用、運算符 (運算符:一個標(biāo)記或符號,指定表達(dá)式內(nèi)執(zhí)行的計算的類型。有數(shù)學(xué)、比較、邏輯和引用運算符等。)及常量 (常量:不進(jìn)行計算的值,因此也不會發(fā)生變化。例如,數(shù)字 210 以及文本“每季度收入”都是常量。表達(dá)式以及表達(dá)式產(chǎn)生的值都不是常量。)組成的字符串。查詢條件屬于表達(dá)式 (表達(dá)式:算術(shù)或邏輯運算符、常數(shù)、函數(shù)和字段名稱、控件和屬性的任意組合,計算結(jié)果為單個值。表達(dá)式可執(zhí)行計算、操作字符或測試數(shù)據(jù)。)類型。
下表顯示了一些示例條件并介紹了它們的工作原理。
條件 |
說明 |
>25 and <50 |
此條件適用于數(shù)字字段,如“Price”或“UnitsInStock”。該條件只包括其字段中的值大于 25 并且小于 50 的那些記錄。 |
DateDiff ("yyyy", [出生日期], Date()) > 30 |
此條件適用于日期/時間字段,如“出生日期”。查詢結(jié)果中只包括人員出生日期與當(dāng)前日期之間的年數(shù)大于 30 的記錄。 |
Is Null |
此條件可應(yīng)用于任何類型的字段,以顯示字段值為空的記錄。 |
如上表所示,條件相互之間看上去可能會存在很大的差異,具體取決于條件要應(yīng)用到的字段的數(shù)據(jù)類型以及您的具體要求。一些條件較為簡單,它們使用基本運算符和常量。其他條件則較為復(fù)雜,它們使用函數(shù)和特殊運算符并且包含字段引用。
要點 如果將字段用于聚合函數(shù),則不能在 WHERE 子句中為該字段指定條件。相反,可以使用 HAVING 子句為聚合字段指定條件。有關(guān)詳細(xì)信息,請參閱處理匯總數(shù)據(jù):GROUP BY 和 HAVING一節(jié)。
WHERE 子句的語法
WHERE 子句的基本語法如下:
WHERE field = criterion
例如,假定您需要某個客戶的電話號碼,但您只記得該客戶的姓氏是黎。您可以使用 WHERE 子句限制結(jié)果并使得查找所需的電話號碼更為容易,而不是查看數(shù)據(jù)庫中的所有電話號碼。假定姓氏存儲在名為 LastName 的字段中,則 WHERE 子句如下所示:
WHERE [LastName]='Bagel'
注釋 無須將 WHERE 子句中的條件基于值的等值??梢允褂闷渌容^運算符,如大于 (>) 或小于 (<)。例如,WHERE [Price]>100。
使用 WHERE 子句合并數(shù)據(jù)源
有時您可能希望基于具有匹配數(shù)據(jù)但數(shù)據(jù)類型不同的字段來合并數(shù)據(jù)源。例如,一個表中的某個字段的數(shù)據(jù)類型可能是“數(shù)字”,而您希望將該字段與另一個表中數(shù)據(jù)類型是“文本”的字段進(jìn)行比較。
無法在具有不同數(shù)據(jù)類型的字段之間創(chuàng)建聯(lián)接。要基于具有不同數(shù)據(jù)類型的字段中的值合并兩個數(shù)據(jù)源中的數(shù)據(jù),可以通過使用 LIKE 關(guān)鍵字創(chuàng)建將一個字段用作另一個字段的條件的 WHERE 子句。
例如,假定您要使用 table1 和 table2 中的數(shù)據(jù),但是僅當(dāng) field1(table1 中一個文本字段)中的數(shù)據(jù)與 field2(table2 中的一個數(shù)字字段)中的數(shù)據(jù)匹配時您才會這樣做。您的 WHERE 子句會類似于以下內(nèi)容:
WHERE field1 LIKE field2
有關(guān)如何創(chuàng)建要在 WHERE 子句中使用的條件的詳細(xì)信息,請參閱查詢條件示例一文。