共用方式為


在 [準則] 窗格中合併搜尋條件的慣例 (Visual Database Tools)

適用於:SQL Server

您可以建立查詢,其中包含任意數目的搜尋條件,與任意數目 ANDOR 運算符連結。 具有 和 AND 子句組合的OR查詢可能會變得複雜,因此當您執行查詢時,瞭解如何解譯這類查詢,以及如何在準則窗格 (Visual Database Tools) 和 SQL 窗格 (Visual DatabaseTools) 中呈現這類查詢,會很有説明。

在本文中,您會找到下列相關信息:

  • 和 在包含這兩者的查詢中,和 ANDOR優先順序。

  • AND 子句中的OR條件如何以邏輯方式相互關聯。

  • 查詢和檢視表設計工具如何在包含 ANDOR的 [準則] 窗格中表示。

為了協助您瞭解下列討論,假設您正在使用包含 employee 、 和 hire_date資料行job_lvlstatus的數據表。 這些範例假設您需要知道員工與公司合作的時間長度(也就是員工雇用日期為何)、員工所執行的工作類型(工作等級為何),以及員工的狀態(例如退休)。

AND 和 OR 的優先順序

執行查詢時,它會先評估與 AND連結的 子句,然後再評估與 連結的 OR子句。

備註

運算子 NOT 的優先順序高於 ANDOR

例如,若要在較低層級的工作中尋找已與公司一起工作超過五年的員工,或不考慮其僱用日期的員工,您可以建構 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)

小提示

為了清楚起見,建議您在合併 ANDOR 子句時一律包含括弧,而不是依賴預設優先順序。

AND 如何搭配多個 OR 子句運作

了解結合時的 和 AND 子句如何OR相關,可協助您在查詢和檢視表設計工具中建構和瞭解複雜的查詢。

如果您使用 連結多個條件 AND,則與 連結 AND 的第一組條件會套用至第二個集合中的所有條件。 換句話說,連結 AND 至另一個條件的條件會散發到第二個集合中的所有條件。 例如,下列圖解表示法顯示 AND 連結至一組 OR 條件的條件:

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連結的兩個子句。 表達這個的明確方式是針對 子句中的每個AND條件重複一OR次條件。 下列語句比上一個語句更明確(且較長),但邏輯上相當於它:

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

查詢和檢視設計工具代表您在 [準則] 窗格 (Visual Database Tools) 中的搜尋條件。 不過,在某些情況下,牽涉到與 ANDOR連結的多個子句,[準則] 窗格中的表示法可能不是您預期的情況。 此外,如果您在 [準則] 窗格或 [ 圖表] 窗格 (Visual Database Tools) 中修改查詢,您可能會發現您的 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 子句,則會針對每個AND子句重複 子OR句。 這會導致子 AND 句散發至每個 OR 子句。 例如,在 [SQL] 窗格中,您可能會建立 WHERE 子句,如下所示:

WHERE (hire_date < '01/01/95') AND
  ( (job_lvl = 100) OR
  (status = 'R') )

查詢和檢視表設計工具會在 [準則] 窗格中表示這個 WHERE 子句,如下所示:

[準則] 窗格中多個 AND 和 OR 子句的螢幕快照。

如果連結 OR 子句只牽涉到一個數據行,查詢和檢視表設計工具可以將整個 OR 子句放入方格的單一數據格中,以避免需要重複 AND 子句。 例如,在 [SQL] 窗格中,您可能會建立 WHERE 子句,如下所示:

WHERE (hire_date < '01/01/95') AND
  ((status = 'R') OR (status = 'A'))

查詢和檢視表設計工具會在 [準則] 窗格中表示這個 WHERE 子句,如下所示:

[準則] 窗格中所定義連結 OR 子句的螢幕快照。

如果您變更查詢(例如變更 [準則] 窗格中的其中一個值,查詢和檢視表設計工具會在 SQL 窗格中重新建立 SQL 語句。 重新建立的 SQL 語句類似於 [準則] 窗格顯示,而不是原始語句。 例如,如果 [準則] 窗格包含分散式 AND 子句,則會使用明確的分散式 AND 子句重新建立 SQL 窗格中產生的語句。 如需詳細資訊,請參閱本文稍早的 AND 如何與多個 OR 子句搭配使用