在本教學中,將學習如何使用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
子句根據一行或多個條件篩選行。