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