(影响11个数据列)
IN 也可与 NOT 运算子一起使用。例如,要传回所有不位在加州、德州或伊利诺伊州的出版商姓名,请执行以下查询:
SELECT pub_name
FROM publishers
WHERE state NOT IN ("CA",
"TX",
"IL")
GO
查询将传回 state 数据行值不为值清单所数据列三州之一的五个资料列。如果您的数据库选项 ANSI nulls 设定为 ON ,结果将只传回三数据列。这是因为原始结果集中的五数据列里有两数据列的 state值为 NULL,而当 ANSI nulls 设定为 ON 时 NULL 是不会被选取。
要判断 pubs 数据库中您的 ANSI nulls 设定为何,可以执行以下的系统预存程序:
sp_dboption "pubs", "ANSI nulls"
GO
如果 ANSI nulls 设定为 OFF ,可使用以下陈述式将其改为 ON :
sp_dboption "pubs", "ANSI nulls", TRUE
GO
要将 ON 改为 OFF ,以 FALSE 代替 TRUE 。
EXISTS EXISTS 关键词用来检测其后的子查询中的数据数据列的存在性。语法如下:
EXISTS (<subquery>)
如果有任何数据列满足此一子查询,TRUE 将被传回。
要选择曾经出版过书籍的作者姓名,您可使用以下查询:
SELECT au_fname, au_lname
FROM authors
WHERE EXISTS (SELECT au_id
FROM titleauthor
WHERE titleauthor.au_id = authors.au_id )
GO
存在于 authors资料表,但没有出版任何书(数据列于 titleauthor 数据表)的作者姓名将不会被选择。如果在子查询中没有任何数据列被选择,交给外层查询使用的结果集为空。(零数据列被选择)
CONTAINS 与 FREETEXT CONTAINS 与 FREETEXT 关键词用来在基于字符的数据型别的数据行中进行全文检索。它们比 LIKE 关键词提供更大的弹性。例如,CONTAINS 关键词让您可以搜寻与指定字符或词组不完全相符但类似的文字(是一种 模糊 (fuzzy)比对)。FREETEXT 允许您搜寻与指定字符串部份或全部相符(或模糊比对)的若干文字。这些文字不需要完全符合指定的搜寻字符串,也不需要与字符串中的文字有相同的顺序。这两个关键词有多种用途并对全文检索提供了不少选项,不过这些主题已超过本章的讨论范围。
________________________________________
相关信息
关于 CONTAINS 与 FREETEXT 关键词的相关信息,可于 SQL Server《在线丛书》索引「CONTAINS」与「FREETEXT」。
________________________________________
GROUP BY 子句
GROUP BY 子句用于 WHERE 子句之后,指示结果集中的数据列将按照指定的群组数据行来群组化。如果 SELECT 子句使用到汇总函数,则每个群组都会计算一个总计值并显示于输出结果。( 汇总函数 (aggregate function)执行计算并传回值;这些函数将在本章稍后 〈汇总函数〉 一节里有详细说明。)
________________________________________
说明
选取清单中的每个数据行-除了汇总函数使用的数据行-必须在 GROUP BY 子句中指定为群组数据行;否则 SQL Server 将传回一个错误讯息。如果不遵循此一规则(指定的 GROUP BY 数据行必须群组选取清单中的每个数据行),输出结果将无法以合理的方式显示。
________________________________________
当 SELECT 子句含有汇总函数时,GROUP BY 最为有用。让我们看一下用GROUP BY 子句寻找每种书籍销售总量的 SELECT 陈述式:
SELECT title_id, SUM (qty )
FROM sales
GROUP BY title_id
GO
结果集如下:
title_id
-------- ------------
BU1032 15
BU1111 25
BU2075 35
BU7832 15
MC2222 10
MC3021 40
PC1035 30
PC8888 50
PS1372 20
PS2091 108
PS2106 25
PS3333 15
PS7777 25
TC3218 40
TC4203 20
TC7777 20