频 道 直 达 - 新闻 - 培训 - 软件 - 教程 - 前沿 - 组网 - 系统应用 - 安全 - 编程 - 存储 - 操作系统 - 数据库 - 服务器 - 专题 - 产品 - 案例库 - 读书 - 博客 - BBS
51CTO.COM_中国最大的网络技术网站
找资料:

6.2 使用WHERE子句

作者: 史创明、王俊伟 出处:清华大学出版社  (  ) 砖  (  ) 好  评论 ( ) 条  进入论坛
更新时间:2007-04-07 16:02
关 键 词:SQL  SQL2000  微软  数据库
阅读提示:用户在查询数据库时往往不需要检索全部的数据,而只需要查询其中一部分满足给定条件的信息,此时需要在SELECT语句中加入条件,以选择其中的部分记录。这就要用到WHERE子句来指定查询返回行的条件。

用户在查询数据库时往往不需要检索全部的数据,而只需要查询其中一部分满足给定条件的信息,此时需要在SELECT语句中加入条件,以选择其中的部分记录。这就要用到WHERE子句来指定查询返回行的条件。带WHERE子句的SELECT语句的基本格式如下:

SELECT select_list
FROM table_source
WHERE search_condition

下面介绍该语句的命令说明。WHERE子句必须紧跟在FROM子句的后面。
search_condition为指定查询时要返回的行记录所应满足的条件,该条件由表达式及逻辑运算符等组成,并且SQL Server对search_condition中的查询条件数目没有限制。
SQL Server为search_condition提供各种各样的运算符和关键字作为搜索条件,如表6-1所示。

示意图

我们将在下面各小节逐个介绍上述运算符的用法。
6.2.1  比较运算符
在运用WHERE子句来限定查询条件时,可以使用=、>、<、>=、<=、<>、!=、!>、!<等比较运算符对两个表达式进行比较,并且以比较的结果作为查询的条件。它的语法格式为:
SELECT select_list
FROM table_source
WHERE expression1 comparison_operator expression2

示意图
其中,comparison_operator是比较运算符。
例如,从数据库“图书管理系统”的“图书明细表”中,查询“定价”大于50的所有图书,并在查询结果中显示列“图书编号”、“图书名称”、“出版日期”和“定价”。
USE 图书管理系统
SELECT 图书编号,图书名称,出版日期,定价
FROM 图书明细表
WHERE 定价>50

在查询结果窗口中显示“定价”大于50的图书信息,如图6-9所示。
@ 实际演练:利用比较运算符“=”限定查询条件
从数据库“图书管理系统”的“作者表”中,查询“籍贯”是“北京”的所有作者,并在查询结果中显示列“作者姓名”和“籍贯”。

USE 图书管理系统
SELECT 作者姓名,籍贯
FROM 作者表
WHERE 籍贯='北京'

在查询结果窗口中显示籍贯是北京的作者,如图6-10所示。

示意图

@ 实际演练:利用比较运算符“<”限定查询条件
从数据库“图书管理系统”的“学生表”中,查询“出生日期”在1988年7月1日以前的学生,并返回这些学生的所有信息。
在查询分析器的命令窗口中输入以下语句:
USE 图书管理系统
SELECT *
FROM 学生信息表
WHERE 出生日期<'1988-7-1'

在查询结果窗口中显示出生在1988年7月1日之前的学生的所有信息,如图6-11所示。

示意图

实际演练:利用比较运算符“!=”限定查询条件
从数据库“图书管理系统”的“作者表”中,查询“籍贯”不是“北京”的作者信息,并返回列“作者姓名”、“性别”、“家庭住址”和“籍贯”。
USE 图书管理系统
SELECT 作者姓名,性别,家庭住址,籍贯
FROM 作者表
WHERE 籍贯!='北京'

在查询结果窗口中显示籍贯不是北京的作者信息,如图6-12所示。

示意图

6.2.2  逻辑运算符
当用WHERE语句处理多于一个条件的查询时,要用到逻辑运算符AND、OR和NOT,逻辑运算符也称做Boolean运算符。利用逻辑运算符可以连接两个或两个以上的条件,并且在所有条件或某些条件成立时返回结果。例如,逻辑运算符AND,只有在所有条件都成立时才返回结果;逻辑运算符OR,只要其中一个条件成立即可返回结果;逻辑运算符NOT表示否认一个表达式,表达式成立时不返回结果,只有当表达式不成立时才返回结果。这些逻辑表达式可以混和运用。利用逻辑表达式来限定查询条件的基本语法格式如下所示:
SELECT select_list
FROM table_source
WHERE {NOT expression︱expression1 logical_operator expression2}[,…n]

其中,logical_operator表示逻辑运算符,[,…n]表示前面的项可重复n次,语句中的logical_operator可以是AND、OR两个逻辑表达式中的任意一个,用到NOT时,要将NOT放在表达式的前面。

示意图

例如,从数据库“图书管理系统”的“作者表”中,查询“性别”为“男”,并且“籍贯”是“北京”的作者信息。
USE 图书管理系统
SELECT *
FROM 作者表
WHERE 性别='男' AND 籍贯='北京'

在查询结果窗口中显示“性别”为“男”,并且“籍贯”是“北京”的作者的信息,如图6-13所示。
@ 实际演练:利用逻辑运算符“OR”限定查询条件
从数据库“图书管理系统”的“作者表”中,查询“籍贯”是“河南郑州”或“河北石家庄”的作者信息。

示意图

USE 图书管理系统
SELECT *
FROM 作者表
WHERE 籍贯='河南郑州' OR 籍贯='河北石家庄'

示意图
在查询结果窗口中显示籍贯是河南郑州或河北石家庄的作者信息,如图6-14所示。
@ 实际演练:利用逻辑运算符“NOT”限定查询条件
从数据库“图书管理系统”的“学生信息表”中,查询“政治面貌”不是“中国共产党员”的学生信息,并且返回列“姓名”、“性别”、“出生日期”、“系别”和“政治面貌”。
USE 图书管理系统
SELECT 姓名,性别,出生日期,系别,政治 面貌
FROM 学生信息表
WHERE NOT 政治面貌='中国共产党员'

在查询结果窗口中显示政治面貌不是中国共产党的学生信息,如图6-15所示。
6.2.3  BETWEEN关键字
在WHERE子句中,当需要确定表达式的取值是否在一定的范围之内时,可以使用BETWEEN、NOT BETWEEN运算符来限定查询条件。利用BEWEEN关键字来限定查询条件的基本语法格式如下所示:

SELECT select_list
FROM table_source
WHERE expression [NOT]BETWEEN expression1 AND expression2

示意图
其中,[NOT]为可选项。例如,从数据库“图书管理系统”的“图书明细表”中,查询“定价”在50~100之间的图书信息,并且返回列“图书名称”、“出版社编号”、“出版日期”和“定价”。
USE 图书管理系统
SELECT 图书名称,出版社编号,出版日期,定价
FROM 图书明细表
WHERE 定价 BETWEEN 50 AND 100

该查询结果窗口显示中显示定价在50~100之间的图书信息,如图6-16所示。

@ 实际演练:利用NOT BETWEEN限定查询条件

示意图
从数据库“图书管理系统”的“作者表”中,查询“作者编号”不在10010~10020范围之内的作者信息,并且返回所有列。
USE 图书管理系统
SELECT *
FROM 作者表
WHERE 作者编号 NOT BETWEEN 10005 AND 10020

在查询结果窗口中显示作者编号不在10010~10020之内的作者信息,如图6-17所示。
@ 实际演练:利用BETWEEN和NOT BETWEEN联合限定查询条件
从数据库“图书管理系统”的“图书明细表”中,查询“作者编号”在10011~10020之间且“定价”不在30~150之间的图书信息,并且返回列“图书名称”、“作者编号”、“出版日期”和“定价”。

USE 图书管理系统
SELECT 图书名称,作者编号,出版日期,定价
FROM 图书明细表
WHERE 作者编号 BETWEEN 10010 AND 10020
AND 定价 NOT BETWEEN 30
AND 150

在查询结果窗口中显示作者编号在10011~10020之间并且定价不在30~150之间的图书信息,如图6-18所示。

示意图

6.2.4  IN关键字
在WHERE子句中,当需要确定表达式的取值是否属于某一列表值之一时,可以使用IN或NOT IN运算符来限定查询条件。利用IN关键字来限定查询条件的基本语法格式如下所示:
SELECT select_list
FROM table_source
WHERE expression[NOT] IN (value_list)

其中,[NOT]为可选项,value_list表示值列表。

示意图

例如,从数据库“图书管理系统”的“学生信息表”中,查询“系别”是“工业工程”和“机械自动化”的学生信息,并返回列“学号”、“班号”、“姓名”、“性别”、“出生日期”、“系别和家庭住址”。
示意图

USE 图书管理系统
SELECT 学号,班号,姓名,性别,出生日期,系别,家庭住址
FROM 学生信息表
WHERE 系别 IN ('工业工程','机械自动化')

在查询结果窗口中显示系别是工业工程和机械自动化的学生信息,如图6-19所示。
@ 实际演练:利用NOT IN限定查询条件
从数据库“图书管理系统”的“出版社信息表”中,查询“出版社所在城市”不是“北京”的出版社信息,并且返回所有列。

示意图

USE 图书管理系统
SELECT *
FROM 出版社信息表
WHERE 出版社所在城市 NOT IN ('北
京')

在查询结果窗口中显示地理位置不在北京的出版社信息,如图6-20所示。
@ 实际演练:利用IN和NOT IN联合限定查询条件
从数据库“图书管理系统”的“图书明细表”中,查询“作者编号”是10007、10008、10021之一且“出版社编号”不是1001、1005、1008的图书信息,并返回列“图书名称”、“作者编号”、“出版社编号”、“出版日期”和“定价”。

USE 图书管理系统
SELECT 图书名称,作者编号,出版社编号,出版日期,定价
FROM 图书明细表
WHERE 作者编号 IN ('10007','10008','10021')
AND 出版社编号 NOT IN('1001','1005','1008')

在查询结果窗口中显示作者是作者编号为10007、10008和10021之一,并且出版社不是出版社编号1001、1005和1008之一的图书信息,如图6-21所示。

示意图

6.2.5  LIKE关键字
在WHERE子句中,当需要把表达式与字符串进行比较时,可以使用LIKE或NOT LIKE运算符来表示查询条件。利用LIKE关键字来表示查询条件的基本语法格式如下所示:
SELECT select_list
FROM table_source
WHERE expression [NOT] LIKE 'string'

其中,[NOT]为可选项,string表示用来进行比较的字符串。

示意图

利用WHERE子句进行查询的过程中,为了实现对字符串的模糊匹配,可以在string字符串中使用通配符。SQL Server为用户提供了四个通配符,它们分别是:%、[ ]、[^]、_(下划线)。其中,%表示任意多个字符,[ ]表示指定范围内的单个字符,[^]表示不在指定范围内的单个字符,_(下划线)表示单个字符。
例如,从数据库“图书管理系统”的“作者表”中,查询姓王的作者信息,并返回所有列。
USE 图书管理系统
SELECT *
FROM 作者表
WHERE 作者姓名 LIKE '王%'

在查询结果窗口中显示姓王的作者信息,如图6-22所示。

示意图

@  实际演练:利用'N[xy]%'
限定查询条件
从数据库“图书管理系统”的“图书明细表”中,查询“图书名称”以A开头,第二个字符是S或c的图书信息,并返回列“图书名称”、“出版社编号”、“出版日期”和“定价”。
USE 图书管理系统
SELECT 图书名称,出版社编号,出版日期,定价
FROM 图书明细表
WHERE 图书名称 LIKE 'A[Sc]%'

在查询结果窗口中显示图书名称以A开头,第二个字符是S或c的图书信息,如图6-23所示。
@ 实际演练:利用'N[^xy]% '
限定查询条件
从数据库“图书管理系统”的“图书明细表”中,查询“图书名称”以A开头,第二个字符不是c或u的图书信息,并返回列“图书名称”、“出版社编号”、“出版日期”和“定价”。

USE 图书管理系统
SELECT 图书名称,出版社编号,出版日期,定价
FROM 图书明细表
WHERE 图书名称 LIKE 'A[^cu]%'

在查询结果窗口中显示图书名称以A开头,第二个字符不是c或u的图书信息,如图6-24所示。

示意图

@  实际演练:利用'N_M%'限定
查询条件
从数据库“图书管理系统”的“图书明细表”中,查询“图书名称”以A开头,第二个为任意字符,且第三个字符是t的图书信息,并返回列“图书名称”、“出版社编号”、“出版日期”和“定价”。
USE 图书管理系统
SELECT 图书名称,出版社编号,出版日期,定价
FROM 图书明细表
WHERE 图书名称 LIKE 'A_t%'

在查询结果窗口中显示图书名称以A开头,第三个字符为t的图书信息,如图6-25所示。

示意图

6.2.6  选择空值
NULL(即空值)的属性通常表示未知、不可用或将在以后添加的数据,而并不表示0或空白。在对数据库进行操作的过程中,当需要查看值为NULL的数据库表信息时,就可以利用含有NULL关键字的WHERE子句。它的基本语法格式如下:

SELECT select_list
FROM table_source
WHERE column_name IS [NOT] NULL

其中,column_name表示列名,[NOT]为可选项。
例如,从数据库“图书管理系统”的“图书明细表”中,查询“出版日期”未添加(即为空值)的图书信息,并返回列“图书编号”、“图书名称”、“作者编号”、“出版社编号”、“出版日期”和“定价”。

USE 图书管理系统
SELECT 图书编号,图书名称,作者编号,出版社编号,出版日期,定价
FROM 图书明细表
WHERE 出版日期 IS NULL

在查询结果窗口中显示出版日期未添加的图书信息,如图6-26所示。


回书目   上一节   下一节
发表
查看
我也说两句

匿名发表

(如果看不清请点击图片进行更换)


中 国 最 大 的 网 络 技 术 网 站 ·
技 术 成 就 梦 想
订阅技术快讯
电子杂志下载
名称:网络安全精品应用黄皮书
简介:《2007精品网络安全黄皮书》包括了9个大类24个小类, 800余篇文章,内容包含了熊猫烧香病毒、DDOS攻击、ARP病等热点问题的介绍及解决方案。从病毒查杀、防范、系统、数据等各方面的安全设置到黑客技术的了解、防范,涉及到了安全应用的全部领域, 由浅至深内容全面。
名称:Vista精品应用黄皮书
简介:《Vista精品应用黄皮书》囊括了Vista的各方面内容。此次的精简版,是将里面的内容做了提取,便于用户下载和使用。内容包含了各种Vista的安装与实施、技巧与解析以及各种Vista相关学习文档和相关软件的安全下载。该电子书是了解和应用Vista人员必备的工具手册,并且也是第一本
名称:2006中国IT论坛精品集合
简介:本书由“51CTO论坛推广联盟”制作完成。书中所有内容均来自各联盟成员的论坛(网站)。制作本书的目的是为了集中大家的优势资源,将更多更精彩的内容带给广大技术爱好者。本书是联盟成立以来制作的第一本书。
关键字阅读
频道精选
主编信箱 热线:010-66476606 告诉我们您想看的:专题 文章
关于我们 | 诚聘英才 | 联系我们 | 网站大事 | 意见反馈 | 网站地图
Copyright©2005-2007 51CTO.COM 版权所有