在本教程中,将学习如何使用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
子句根据一行或多个条件筛选行。