您可以建立包含任意數目搜尋條件的查詢,並連結任意數目 AND 和 OR 運算符。 具有 AND 和 OR 子句組合的查詢可能會變得複雜,因此當您執行查詢時,瞭解這類查詢如何解譯,以及如何在 [準則窗格 ] 和 [ SQL 窗格] 中表示這類查詢會很有説明。
備註
如需只包含一個 AND 或 OR 運算子的搜尋條件詳細數據,請參閱指定一個數據行的多個搜尋條件(Visual Database Tools)和指定多個數據行的多個搜尋條件(Visual Database Tools)。
您會在下方找到下列相關資訊:
包含兩者之查詢中的 AND 和 OR 優先順序。
AND 和 OR 子句中的條件如何以邏輯方式相互關聯。
查詢和檢視表設計工具在包含 AND 和 OR 的準則窗格查詢中代表的方式。
為了協助您瞭解下列討論,假設您正在使用包含 employee 、 和 hire_date資料行job_lvlstatus的數據表。 這些範例假設您需要知道員工與公司合作的時間長度(也就是員工雇用日期為何)、員工所執行的工作類型(工作等級為何),以及員工的狀態(例如退休)。
AND 和 OR 的優先順序
執行查詢時,它會先評估與 AND 連結的子句,然後再評估與 OR 連結的子句。
備註
NOT 運算子的優先順序高於 AND 和 OR。
例如,若要在較低層級的工作中尋找已與公司一起工作超過五年的員工,或不考慮其僱用日期的員工,您可以建構 WHERE 子句,如下所示:
WHERE
hire_date < '01/01/95' AND
job_lvl = 100 OR
job_lvl = 200
若要覆寫 AND 超過 OR 的預設優先順序,您可以將括弧放在 SQL 窗格中的特定條件周圍。 括弧中的條件一律會先評估。 例如,若要尋找已與公司合作超過五年或中層工作的所有員工,您可以建構 WHERE 子句,如下所示:
WHERE
hire_date < '01/01/95' AND
(job_lvl = 100 OR job_lvl = 200)
小提示
為了清楚起見,建議您在結合 AND 和 OR 子句時一律包含括弧,而不是依賴預設優先順序。
AND 如何與多個 OR 條件子句一起運作
了解合併時的 AND 和 OR 子句如何相關,可協助您在查詢和檢視表設計工具中建構和瞭解複雜的查詢。
如果您使用 AND 連結多個條件,則與 AND 連結的第一組條件會套用至第二組中的所有條件。 換句話說,與 AND 連結至另一個條件的條件會散發到第二個集合中的所有條件。 例如,下列圖解表示法顯示連結至一組 OR 條件的 AND 條件:
A AND (B OR C)
上述表示法在邏輯上相當於下列圖解表示法,其中顯示AND條件如何散發到第二組條件:
(A AND B) OR (A AND C)
此分配原則會影響您使用查詢和檢視表設計工具的方式。 例如,假設您正在尋找所有與公司合作超過五年的員工,無論是中低級工作還是中層工作。 您會在 SQL 窗格中的 語句中輸入下列 WHERE 子句:
WHERE (hire_date < '01/01/95' ) AND
(job_lvl = 100 OR job_lvl = 200)
與 AND 連結的 子句適用於與 OR 連結的這兩個子句。 明確表示此方式是針對 OR 子句中的每個條件重複 AND 條件一次。 下列語句比上一個語句更明確(且較長),但邏輯上相當於它:
WHERE (hire_date < '01/01/95' ) AND
(job_lvl = 100) OR
(hire_date < '01/01/95' ) AND
(job_lvl = 200)
無論涉及多少個別條件,都會套用將 AND 子句散發至連結 OR 子句的原則。 例如,假設您想要找到已與公司一起超過五年或已退休的中層員工。 WHERE 子句看起來可能像這樣:
WHERE
(job_lvl = 200 OR job_lvl = 300) AND
(hire_date < '01/01/95' ) OR (status = 'R')
當與 AND 連結的條件已經分配後,WHERE 子句會呈現如下:
WHERE
(job_lvl = 200 AND hire_date < '01/01/95' ) OR
(job_lvl = 200 AND status = 'R') OR
(job_lvl = 300 AND hire_date < '01/01/95' ) OR
(job_lvl = 300 AND status = 'R')
準則窗格中如何呈現多個 AND 和 OR 子句
查詢和檢視設計工具會在 [準則] 窗格中呈現您的搜尋條件。 不過,在某些情況下,涉及多個由 AND 和 OR 連結的子句時,準則窗格中的表示可能不符合您的預期。 此外,如果您在 [準則窗格] 或 [ 圖表窗格] 中修改查詢,您可能會發現您的 SQL 語句已從您輸入的內容變更。
一般而言,這些規則會指示 AND 和 OR 子句在 [準則] 窗格中的顯示方式:
與 AND 連結的所有條件都會出現在 [篩選] 方格資料行或相同的 Or... 資料行中。
與 OR 連結的所有條件都會出現在不同的 Or... 資料行中。
如果 AND 和 OR 子句組合的邏輯結果是 AND 會散發到數個 OR 子句中,[準則窗格] 會視需要重複 AND 子句多次來明確表示此狀況。
例如,在 SQL 窗格中,您可能會建立如下的搜尋條件,其中兩個與 AND 連結的子句優先於第三個與 OR 連結的子句:
WHERE (hire_date < '01/01/95' ) AND
(job_lvl = 100) OR
(status = 'R')
查詢和檢視設計工具會在 [準則] 窗格中代表這個 WHERE 子句,如下所示:
準則窗格中的 OR 子句優先順序
不過,如果連結的 OR 子句優先於 AND 子句,則會針對每個 OR 子句重複 AND 子句。 這會導致 AND 子句散發至每個 OR 子句。 例如,在 [SQL] 窗格中,您可能會建立 WHERE 子句,如下所示:
WHERE (hire_date < '01/01/95' ) AND
( (job_lvl = 100) OR
(status = 'R') )
查詢和檢視設計工具會在 [準則] 窗格中代表這個 WHERE 子句,如下所示:
在
如果連結的 OR 子句只涉及一個數據行,查詢和檢視表設計工具可以將整個 OR 子句放入方格的單一數據格中,以避免需要重複 AND 子句。 例如,在 [SQL] 窗格中,您可能會建立 WHERE 子句,如下所示:
WHERE (hire_date < '01/01/95' ) AND
((status = 'R') OR (status = 'A'))
查詢和檢視設計工具會在 [準則] 窗格中代表這個 WHERE 子句,如下所示:
如果您變更查詢(例如變更準則窗格中的其中一個值),查詢和檢視表設計工具會在 SQL 窗格中重新建立 SQL 語句。 重新建立的 SQL 語句會類似於 [準則窗格] 顯示,而不是原始語句。 例如,如果 [準則窗格] 包含分散式 AND 子句,則會使用明確的分散式 AND 子句來重新建立 SQL 窗格中產生的語句。 如需詳細資訊,請參閱本主題稍早的