Access SQL 簡(jiǎn)介

此頁(yè)沒(méi)有內(nèi)容條目
內(nèi)容

Access > Access 基礎(chǔ)知識(shí)

 

Access SQL 簡(jiǎn)介

blueup_CLV全部顯示

bluedrop_CLV全部隱藏

如果要在數(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)容


hrefIcon_ZA10069439 什么是 SQL?

hrefIcon_ZA10069439 基本 SQL 子句:SELECT、FROM 和 WHERE

hrefIcon_ZA10069439 對(duì)結(jié)果排序:ORDER BY

hrefIcon_ZA10069439 處理匯總數(shù)據(jù):GROUP BY 和 HAVING

hrefIcon_ZA10069439 合并查詢結(jié)果:UNION

hrefIcon_ZA10069439 有關(guān) SELECT 子句的詳細(xì)信息

hrefIcon_ZA10069439 有關(guān) FROM 子句的詳細(xì)信息

hrefIcon_ZA10069439 有關(guān) WHERE 子句的詳細(xì)信息


什么是 SQL?

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)建或修改表或索引一文。

SELECT 語(yǔ)句

要使用 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 子句

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ǔ)句中匯總的字段的條件。

SQL 詞條

每個(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à)]

TopPageIcon_CLV 返回頁(yè)首

基本 SQL 子句:SELECT、FROM 和 WHERE

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ǔ)句末尾處的一行。

ACCESS 中的示例

下面的內(nèi)容演示了在 Access 中用于簡(jiǎn)單選擇查詢的 SQL 語(yǔ)句的外觀:

顯示 SELECT 語(yǔ)句的 SQL 對(duì)象選項(xiàng)卡 

標(biāo)注 1 SELECT 子句

標(biāo)注 2 FROM 子句

標(biāo)注 3 WHERE 子句

此示例 SQL 語(yǔ)句可以讀作“選擇存儲(chǔ)在名為‘聯(lián)系人’的表內(nèi)名為‘電子郵件地址’和‘公司’的字段中的數(shù)據(jù),特別是‘城市’字段的值為‘西安’的記錄?!?/span>

我們來(lái)看一下該示例,一次看一個(gè)子句,以便了解 SQL 語(yǔ)法如何工作。

SELECT 子句

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 子句

FROM 聯(lián)系人

這是 FROM 子句。它由一個(gè)運(yùn)算符 (FROM) 及后面的標(biāo)識(shí)符(聯(lián)系人)組成。

FROM 子句不會(huì)列出要選擇的字段。

WHERE 子句

WHERE 城市="西安"

這是 WHERE 子句。它由一個(gè)運(yùn)算符 (WHERE) 及后面的表達(dá)式(城市="西安") 組成。

 注釋    與 SELECT 和 FROM 子句不同,WHERE 子句不是 SELECT 語(yǔ)句的必需元素。

通過(guò)使用 SELECT、FROM 和 WHERE 子句,您可以完成 SQL 支持的許多操作。有關(guān)如何使用這些子句的詳細(xì)信息將在本文末尾的以下節(jié)中另行提供:

hrefIcon_ZA10069439 有關(guān) SELECT 子句的詳細(xì)信息

hrefIcon_ZA10069439 有關(guān) FROM 子句的詳細(xì)信息

hrefIcon_ZA10069439 有關(guān) WHERE 子句的詳細(xì)信息


TopPageIcon_CLV 返回頁(yè)首

對(duì)結(jié)果排序:ORDER BY

與 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 子句這一主題。

TopPageIcon_CLV 返回頁(yè)首

處理匯總數(shù)據(jù):GROUP BY 和 HAVING

有時(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ù)中使用的字段:GROUP BY 子句

在使用聚合函數(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 子句這一主題。

使用組條件限制聚合值:HAVING 子句

如果要使用條件來(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 子句這一主題。

TopPageIcon_CLV 返回頁(yè)首

合并查詢結(jié)果:UNION

當(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é)果一文。

TopPageIcon_CLV 返回頁(yè)首

有關(guān) SELECT 子句的詳細(xì)信息

在 SELECT 語(yǔ)句中,SELECT 子句列出了包含要使用的數(shù)據(jù)的字段。

使用方括號(hào)將標(biāo)識(shí)符括起來(lái)

在 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]

使用字段或表達(dá)式的替換名稱:AS 關(guān)鍵字

可以通過(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í)必須使用字段別名。

使用表達(dá)式進(jìn)行選擇

有時(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è)值。

TopPageIcon_CLV 返回頁(yè)首

有關(guān) FROM 子句的詳細(xì)信息

在 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)將標(biāo)識(shí)符括起來(lái)

可以使用方括號(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è)情況。

使用數(shù)據(jù)源的替換名稱

通過(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ù)源。

聯(lián)接相關(guān)數(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)接

內(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)接

外部聯(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)接表和查詢一文。

TopPageIcon_CLV 返回頁(yè)首

有關(guān) WHERE 子句的詳細(xì)信息

當(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 子句的基本語(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。

使用 WHERE 子句合并數(shù)據(jù)源

有時(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)參閱查詢條件示例一文。

TopPageIcon_CLV 返回頁(yè)首