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