共用方式為


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

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

您會在下方找到下列相關資訊:

  • 包含兩者之查詢中的 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 子句,如下所示:

準則窗格中的多個 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 窗格中產生的語句。 如需詳細資訊,請參閱本主題稍早的

另請參閱

指定搜尋準則(「Visual Database Tools」)