2.1.3 WHERE子句
上一篇 / 下一篇 2009-03-10 14:22:34 / 个人分类:SQL Server
2.1.3 WHERE子句
在数据库中查询数据时,有时只希望查询我们所需要的数据,而并非是数据表中的所有数据,那么就可以使用SELECT语句中的WHERE子句来实现。
WHERE子句通过条件表达式描述关系中元组的选择条件。数据库系统处理语句时,按行为单位,逐个检查每个行是否满足条件,将不满足条件的行筛选掉。WHERE子句的基本格式如下:
WHERE search_conditions
其中,search_conditions为用户选取所需查询的数据行的条件,即查询返回的行记录的满足条件。对于用户所需要的所有行,search_conditions条件为true;而对于其他行,search_conditions条件为false或者未知。表2-1列出了WHERE子句中可以使用的条件。
表2-1 WHERE子句使用的条件
类别 | 说明 | |
比较运算符 | =、>、<、>=、<=、<> | 比较两个表达式 |
逻辑运算符 | AND、OR、NOT | 组合两个表达式的运算结果或取反 |
范围运算符 | BETWEEN、NOT BETWEEN | 搜索值是否在范围内 |
列表运算符 | IN、NOT IN | 查询值是否属于列表值之一 |
字符匹配符 | LIKE、NOT LIKE | 字符串是否匹配 |
未知值 | IS NULL、IS NOT NULL | 查询值是否为NULL |
针对表2-1列举的查询条件,下面将详细介绍它们在WHERE子句中的使用方法及其功能。
1.比较运算符
WHERE子句的比较运算符主要有=、<、>、>=、<=、<>和!=,分别表示等于、小于、大于、大于等于、小于等于、不等于(<>和!=都表示不等于),使用它们对查询条件进行限定。它的语法格式为:
WHERE expression1 comparison_operator expression2
其中,expression1和expression2表示要比较的表达式,comparison_operator表示比较运算符。例如,要从【工资管理系统】数据库的【员工信息】表中,查询出【性别】为“男”的所有员工信息,则可以使用如下WHERE条件子句来完成查询。
USE工资管理系统
SELECT * FROM员工信息WHERE性别='男'
上述语句使用WHERE子句“性别='男'”的条件限定查询。其语句的运行结果如图2-2所示。
图2-2 使用比较运算符的查询结果
在SQL Server 2008中比较运算符几乎可以连接所有的数据类型,当连接的数据类型不是数字时要用单引号将比较运算符后面的数据引起来。在使用比较运算符时,运算符两边的表达式的数据类型必须保持一致。 |
2.逻辑运算符
有时,在查询时指定一个查询条件也很难满足用户需求,需要同时指定多个满足查询条件,那么就可以使用逻辑运算符将多个查询条件连接起来。WHERE子句中可以使用AND、OR和NOT这三个逻辑运算符,这三个逻辑运算符可以混合使用,在WHERE子句中使用逻辑运算符来限定查询条件的语法格式为:
WHERE NOT expression|expression1 logical_operator expression2
其中,logical_operator表示逻辑运算符AND和OR中的任意一个。如果在WHERE子句中使用NOT运算符,则将NOT放在表达式的前面。表2-2列出这3个逻辑运算符的功能。
表2-2 逻辑运算符的功能
运算符 | 功能 |
AND | 只有所有条件都满足时才会返回查询结果 |
OR | 只要其中有一个条件满足就返回查询结果 |
NOT | 条件不成立时返回查询结果 |
例如,要从【工资管理系统】数据库的【员工信息】表中,同时查询出【性别】为“男”并且【所任职位】为“经理”的所有员工信息,则可以在查询窗口中输入以下语句完成查询。
USE工资管理系统
SELECT * FROM员工信息WHERE性别='男' AND所任职位='经理'
上述语句中使用了逻辑运算符AND连接两个条件语句,执行后的结果如图2-3所示,可以看出结果集中只有4条记录符合语句中的两个条件。
图2-3 使用逻辑运算符AND后的查询结果
在使用逻辑运算符时,要遵守以下规则:
l NOT只应用于简单条件,不能将NOT应用于包含AND或者OR条件的复合条件中,即NOT (性别='男' AND所任职位='经理')返回的结果集是错误的
l AND用于合并简单条件和包括NOT的条件。这些条件都不允许包含OR条件。如果使用一个以上的AND条件,这些条件可以以任意顺序合并在一起,不需要括号。
l OR可以使用AND和NOT合并所有复合条件。如果使用一个以上的OR条件,这些条件可以以任意顺序合并在一起,不需要括号。
l 在优先权上,从高到低为NOT、AND、OR,即当处理条件时,先处理优先级高的NOT,然后是AND,最后才是OR。
3.范围运算符
在WHERE子句中使用BETWEEN关键字查找在某一范围内的数据,也可以使用NOT BETWEEN关键字查找不在某一范围内的数据。使用BETWEEN关键字来限定查询条件的语法格式如下所示:
WHERE expression [NOT] BETWEEN value1 AND value2
其中NOT为可选项,value1表示范围的下限,value2表示范围的上限。注意value1必须不大于value2,绝对不允许value1大于value2。
例如,在【工资管理系统】数据库中的【员工信息】表查询出【员工编号】在“10001”和“10009”之间的所有员工信息。具体的SELECT语句如下所示:
USE工资管理系统
SELECT * FROM员工信息WHERE员工编号BETWEEN 10001 AND 10009
上述代码中,WHERE子句中使用BETWEEN关键字查询了【员工编号】在10001-10009之间的所有数据。语句的执行结果如图2-4所示。
图2-4 使用范围运算符BETWEEN查询结果
如果我们想查询【员工编号】在“10001”至“10009”之外的所有数据,则只需在BETWEEN关键字前面加上NOT即可。语句如下所示:
USE工资管理系统
SELECT * FROM员工信息WHERE员工编号NOT BETWEEN 10001 AND 10009
4.列表运算符
在WHERE子句中,使用IN关键字可以确定表达式的取值是否属于某一列表值,同样,如果查询表达式不属于某一列表值时可以使用NOT IN关键字。其语法格式如下所示:
WHERE expression [NOT] IN value_list
上述语句中NOT为可选值,而
相关阅读:
- 2.1.1 SELECT语法 (lixi613, 2009-3-10)
- 2.1.2 FROM子句 (lixi613, 2009-3-10)







