在本教學中,將學習如何使用SQL Server WHERE子句來過濾查詢返回的行。
SQL Server WHERE子句簡介
當使用SELECT語句查詢表中的數據時,將獲得表的所有行,這是顯然是不必要的,因為應用程式當時只能處理一組行。
要從表中獲取滿足一行或多個條件的行,請使用WHERE子句,如下所示:
SELECT
select_list
FROM
table_name
WHERE
search_condition;
在WHERE子句中,指定搜索條件以過濾FROM子句返回的行。 WHERE子句僅返回導致搜索條件計算為TRUE的行。
搜索條件是邏輯運算式或多個邏輯運算式的組合。 在SQL中,邏輯運算式通常稱為謂詞。
請注意,SQL Server使用三值謂詞邏輯,其中邏輯運算式可以計算為TRUE,FALSE或UNKNOWN。 WHERE子句不會返回導致謂詞計算結果為FALSE或UNKNOWN的任何行。
SQL Server WHERE示例
我們將使用示例資料庫中的products表進行演示,表的結構如下:

A. 通過使用簡單的相等來查找行
以下語句檢索類別為id為1的所有產品:
SELECT
product_id,
product_name,
category_id,
model_year,
list_price
FROM
production.products
WHERE
category_id = 1
ORDER BY
list_price DESC;
執行上面查詢語句,得到以下結果:
B. 查找滿足兩個條件的行
以下示例返回滿足兩個條件的產品:category_id為1,model_year為2018。它使用邏輯運算符AND來組合這兩個條件。
SELECT
product_id,
product_name,
category_id,
model_year,
list_price
FROM
production.products
WHERE
category_id = 1 AND model_year = 2018
ORDER BY
list_price DESC;
執行上面查詢語句,得到以下結果:

C. 使用比較運算符查找行
以下語句查找價格大於300且型號為2018的產品。
SELECT
product_id,
product_name,
category_id,
model_year,
list_price
FROM
production.products
WHERE
list_price > 300 AND model_year = 2018
ORDER BY
list_price DESC;
執行上面查詢語句,得到以下結果:

D. 查找滿足兩個條件中的任何一個的行
以下查詢查找價格大於3000或型號為2018的產品。滿足其中一個條件的任何產品都包含在結果集中。
SELECT
product_id,
product_name,
category_id,
model_year,
list_price
FROM
production.products
WHERE
list_price > 3000 OR model_year = 2018
ORDER BY
list_price DESC;
執行上面查詢語句,得到以下結果:

請注意,OR運算符用於組合謂詞。
E. 查找具有兩個值之間的值的行
以下語句查找價格介於1899和1999.99之間的產品:
SELECT
product_id,
product_name,
category_id,
model_year,
list_price
FROM
production.products
WHERE
list_price BETWEEN 1899.00 AND 1999.99
ORDER BY
list_price DESC;
執行上面查詢語句,得到以下結果:

F. 查找值列表中具有值的行
以下示例使用IN運算符查找價格為299.99或466.99或489.99的產品。
SELECT
product_id,
product_name,
category_id,
model_year,
list_price
FROM
production.products
WHERE
list_price IN (299.99, 369.99, 489.99)
ORDER BY
list_price DESC;
執行上面查詢語句,得到以下結果:

G. 查找其值包含字串的行
以下示例使用LIKE運算符查找名稱中包含字串Cruiser的產品:
SELECT
product_id,
product_name,
category_id,
model_year,
list_price
FROM
production.products
WHERE
product_name LIKE '%Cruiser%'
ORDER BY
list_price;
執行上面查詢語句,得到以下結果:

在本教學中,學習了如何使用SQL Server WHERE子句根據一行或多個條件篩選行。
