共用方式為


在相同的查詢中使用 HAVING 和 WHERE 子句 (Visual Database Tools)

在某些情況下,您可能會想要在將條件套用至整體群組(使用 HAVING 子句)之前,先從群組中排除個別的數據列(使用 WHERE 子句)。

HAVING 子句就像 WHERE 子句,但只適用於整體群組(也就是代表群組的結果集中的數據列),而 WHERE 子句則適用於個別的數據列。 查詢可以同時包含 WHERE 子句和 HAVING 子句。 在此情況下:

  • WHERE 子句會先套用至 [圖表] 窗格中數據表或數據表值物件中的個別數據列。 只有符合 WHERE 子句條件的數據列會分組。

  • 然後,HAVING 子句會套用至結果集中的數據列。 只有符合 HAVING 條件的群組才會出現在查詢輸出中。 您只能將 HAVING 子句套用至同時出現在 GROUP BY 子句或聚合函數中的數據行。

例如,假設您要聯結 titlespublishers 數據表來建立查詢,以顯示一組發行者的平均書籍價格。 您想要看到特定一組發行者的平均價格,也許僅限於加州的發行者。 即便如此,只有當平均價格超過10.00美元時,您才會看到平均價格。

您可以藉由包含 WHERE 子句來建立第一個條件,該子句會在計算平均價格之前捨棄不在加州的任何發行者。 第二個條件需要 HAVING 子句,因為條件是以分組和摘要數據的結果為基礎。 產生的 SQL 語句看起來可能像這樣:

SELECT titles.pub_id, AVG(titles.price)  
FROM titles INNER JOIN publishers  
   ON titles.pub_id = publishers.pub_id  
WHERE publishers.state = 'CA'  
GROUP BY titles.pub_id  
HAVING AVG(price) > 10  

您可以在 [條件] 窗格中建立 HAVING 和 WHERE 子句。 根據預設,如果您指定數據行的搜尋條件,條件就會成為 HAVING 子句的一部分。 不過,您可以將條件變更為 WHERE 子句。

您可以建立涉及相同欄位的 WHERE 子句和 HAVING 子句。 若要這樣做,您必須將數據行兩次新增至 [準則] 窗格,然後將一個實例指定為 HAVING 子句的一部分,另一個實例做為 WHERE 子句的一部分。

在匯總查詢中指定 WHERE 條件

  1. 指定查詢的群組。 如需詳細資訊,請參閱 查詢結果中的群組資料列 (Visual Database Tools)

  2. 如果它尚未出現在 [準則] 窗格中,請新增您希望用於 WHERE 條件的欄。

  3. 清除 輸出 數據行,除非數據行是 GROUP BY 子句的一部分,或包含在聚合函數中。

  4. 在 [ 篩選] 資料行中,指定 WHERE 條件。 查詢和檢視表設計工具會將條件新增至 SQL 語句的 HAVING 子句。

    備註

    此程式範例中顯示的查詢會聯結兩個數據表,titlespublishers

    此時在查詢中,SQL 語句會包含 HAVING 子句:

    SELECT titles.pub_id, AVG(titles.price)  
    FROM titles INNER JOIN publishers   
       ON titles.pub_id = publishers.pub_id  
    GROUP BY titles.pub_id  
    HAVING publishers.state = 'CA'  
    
  5. 群組依據 欄中,從群組和摘要選項清單中選取 Where。 查詢和檢視設計工具會從 SQL 語句中的 HAVING 子句中移除條件,並將其新增至 WHERE 子句。

    SQL 語句會修改為包含 WHERE 子句:

    SELECT titles.pub_id, AVG(titles.price)  
    FROM titles INNER JOIN publishers   
       ON titles.pub_id = publishers.pub_id  
    WHERE publishers.state = 'CA'  
    GROUP BY titles.pub_id  
    

另請參閱

排序和群組查詢結果 (Visual Database Tools)
摘要查詢結果 (Visual Database Tools)