使用 WHERE 和 HAVING 筛选行
来源:互联网 发布:绘画软件哪个好 编辑:程序博客网 时间:2024/05/16 10:07
使用 WHERE 和 HAVING 筛选行
SELECT 语句中的 WHERE 和 HAVING 子句可以控制用于生成结果集的源表中的行。WHERE 和 HAVING 是筛选器。这两个子句指定一系列搜索条件,只有那些满足搜索条件的行才用于生成结果集。我们称满足搜索条件的行包含在结果集中。例如,以下 SELECT
语句中的 WHERE
子句仅将行限定在特定的销售区域。
复制代码
USE AdventureWorks;GOSELECT c.CustomerID, s.NameFROM AdventureWorks.Sales.Customer cJOIN AdventureWorks.Sales.Store sON s.CustomerID = c.CustomerIDWHERE c.TerritoryID = 1
HAVING 子句通常与 GROUP BY 子句一起使用来筛选聚合值的结果。但是,也可以不使用 GROUP BY 而单独指定 HAVING。HAVING 子句指定在 WHERE 子句筛选之后应用的其他筛选器。这些筛选器可应用于选择列表中使用的聚合函数(Where子句中不可以含汇总函数)。在下面的示例中,WHERE
子句仅限定产品销售单价超过 $100
的订单,而 HAVING
子句还将结果限制为那些仅包括 100
多个单位的订单。
复制代码
USE AdventureWorks;GOSELECT OrdD1.SalesOrderID AS OrderID, SUM(OrdD1.OrderQty) AS "Units Sold", SUM(OrdD1.UnitPrice * OrdD1.OrderQty) AS RevenueFROM Sales.SalesOrderDetail AS OrdD1WHERE OrdD1.SalesOrderID in (SELECT OrdD2.SalesOrderID FROM Sales.SalesOrderDetail AS OrdD2 WHERE OrdD2.UnitPrice > $100)GROUP BY OrdD1.SalesOrderIDHAVING SUM(OrdD1.OrderQty) > 100
WHERE 和 HAVING 子句中的搜索条件
WHERE 和 HAVING 子句中的搜索条件或限定条件可以包括:
- 比较运算符,例如:=、< >、< 和 >
例如,下面的查询从H
类产品的Product
表中检索行。复制代码SELECT ProductID, NameFROM AdventureWorks.Production.ProductWHERE Class = 'H'ORDER BY ProductID
- 范围(BETWEEN 和 NOT BETWEEN)
例如,下面的查询从其中标价为 $100 到 $500 的Product
表中检索行。复制代码SELECT ProductID, NameFROM AdventureWorks.Production.ProductWHERE ListPrice BETWEEN 100 and 500ORDER BY ListPrice
- 列表(IN 和 NOT IN)
例如,下面的查询检索颜色列表中的产品。复制代码SELECT ProductID, NameFROM AdventureWorks.Production.ProductWHERE Color IN ('Multi', 'Silver')ORDER BY ProductID
- 模式匹配(LIKE 和 NOT LIKE)
例如,下面的查询从其中产品名称以字母Ch
开头的Product
表中检索行。复制代码SELECT ProductID, NameFROM AdventureWorks.Production.ProductWHERE Name LIKE 'Ch%'ORDER BY ProductID
注意: 仅可以对 text 列使用的 WHERE 条件是返回另一个数据类型的函数(如 PATINDEX())或运算符(如 IS NULL、IS NOT NULL、LIKE 和 NOT LIKE)。 - Null 值(IS NULL 和 IS NOT NULL)
例如,下面的查询从其中客户的销售人员 ID 不为 NULL 的Customer
表中检索行。复制代码SELECT s.NameFROM AdventureWorks.Sales.Customer cJOIN AdventureWorks.Sales.Store sON c.CustomerID = S.CustomerIDWHERE c.SalesPersonID IS NOT NULLORDER BY s.Name
注意: 比较空值时请谨慎从事。例如,指定 = NULL 与指定 IS NULL 是不同的。有关详细信息,请参阅 空值。 - 所有记录(=ALL、>ALL、<= ALL、ANY)
例如,下面的查询从其中已发货的产品量大于任何已发货的H
类产品量的SalesOrderDetail
表中检索订单和产品 ID。复制代码USE AdventureWorks;GOSELECT OrdD1.SalesOrderID, OrdD1.ProductIDFROM Sales.SalesOrderDetail OrdD1WHERE OrdD1.OrderQty > ALL (SELECT OrdD2.OrderQty FROM Sales.SalesOrderDetail OrdD2 JOIN Production.Product Prd ON OrdD2.ProductID = Prd.ProductID WHERE Prd.Class = 'H')GO
- 这些条件的组合(AND、OR、NOT)
例如,下面的查询检索标价小于 $500,产品类为L
以及产品系列为S
的所有产品。请注意,当您在复制代码SELECT ProductID, NameFROM AdventureWorks.Production.ProductWHERE ListPrice < 500 OR (Class = 'L' AND ProductLine = 'S')
WHERE
子句中搜索 Unicode 字符串时,请将N
字符放在搜索字符串的前面:复制代码SELECT CustomerID FROM AdventureWorks.Sales.Store WHERE Name = N'Berglunds snabbkp'
- 使用 WHERE 和 HAVING 筛选行
- sql筛选记录语句中where和having的区别
- mysql having 使用 及where和having子句的区别
- where 和having总结
- where 和 having 区别
- oracle-where和having
- sql中where 和having 的同时使用
- 关于 HAVING 和 WHERE的使用的体会笔记
- sql中having和where的使用,与区别
- where、group by、having使用
- WHERE 和HAVING的区别
- where和having的区别
- where 和 having 怎么区别
- HAVING和WHERE的区别
- Where 和Having的区别
- HAVING 和 WHERE的用法
- where和having的区别
- where和having的区别
- 如果你已经过了20岁但还不到25岁的话——李开复
- GBK中文编码和std::string的冲突问题
- 浅析C#中new、override、virtual关键字的区别
- 台湾一校长震动所有中国人的演讲
- 定制带有模拟器且支持ActiveSync调试的WINCE5.0 SDK
- 使用 WHERE 和 HAVING 筛选行
- 建立主DNS区域和辅助DNS区域的最佳实践
- VS2008中开发智能设备程序的一些总结(转)
- linux内核启动(1)
- 句柄
- hashtable的用法
- C#操作使用xsd的xml文件时XPath表达式不正确的问题
- SVN服务器详细权限控制
- Dom4j 使用简介