WHERE子句语法格式 [ WHERE <Search condition>] /*结果集中返回的行的条件*/ search condition 判定运算 fINOT]<predicate> (<search condition>)) [AND OR)[NOT ]<<predicate>(<search condition>))] 判定运算包括比较运算、模式匹配、范围比较、空值比较、 CONTAIN谓 词、 FREETEXT谓词和子查询
WHERE子句语法格式 [ WHERE <search_condition> ] /*结果集中返回的行的条件*/ < search_condition > ::= { [ NOT ] <predicate> | ( <search_condition> ) } [ { AND | OR } [ NOT ] { <predicate> | ( <search_condition> ) } ] [ ,...n ] 判定运算 判定运算包括比较运算、模式匹配、范围比较、空值比较、CONTAIN谓 词、FREETEXT谓词和子查询。 11
WHERE子句语法格式 <predicate>: i expression(=<>!=>>=!><<=!<) expression /*比较运算* string expression[NOT] LIKE String expression[ ESCAPE 'escape character']/*字符串模式匹配* expression NOT] BETWeEn expression AND expression *指定范围* expression Is[NOT]NULL搜索指定的单词、短语等 /*是否空值判断* I CONTAINS( column*), ' contains search condition >' *包含式查询*/ FREETEXTi(m,mg)搜索指定的单词短语等 /*自由式查询* I expression not]in( subquery expression[ .n]) /*ⅠN子句* I expression=<>!=>>=!><<=!<)fALL SOME ANY( subquery *比较子查询*/ EXISTS( subquery)}/* EXIST子查询*
WHERE子句语法格式 <predicate> ::= { expression { = | < > | ! = | > | > = | ! > | < | < = | ! < } expression /*比较运算*/ | string_expression [ NOT ] LIKE string_expression [ ESCAPE 'escape_character' ] /*字符串模式匹配*/ | expression [ NOT ] BETWEEN expression AND expression /*指定范围*/ | expression IS [ NOT ] NULL /*是否空值判断*/ | CONTAINS ( { column | * } , '< contains_search_condition >' ) /*包含式查询*/ | FREETEXT ( { column | * } , 'freetext_string' ) /*自由式查询*/ | expression [ NOT ] IN ( subquery | expression [ ,...n ] ) /*IN 子句*/ | expression { = | < > | ! = | > | > = | ! > | < | < = | ! < } { ALL | SOME | ANY} ( subquery ) /*比较子查询*/ | EXISTS ( subquery ) } /*EXIST 子查询*/ 搜索指定的单词、短语等 搜索指定的单词、短语等 12
表达式比较 f expression =<>=>>=1><<=1! <) expression /*比较运算* EG:查询 PXSCJ数据库XSB表中学号为081101的同学的情况。 SELECT XSB. FROM XSB WHERE XSB. Stu ID=081101' EG:查询XSB表中总学分大于50的同学的情况。 SELECT XSB. FROM XSB WHERE XSB. Tcredit50 EG:查询XSB表中通信工程专业总学分大于等于52的同学的情况。 SELECT XSB. N FROM XSB WHERE XSB. Major=通信工程 AND XSB. Credit>=52
13 1、表达式比较 EG:查询PXSCJ数据库XSB表中学号为081101的同学的情况。 SELECT XSB.* FROM XSB WHERE XSB.Stu_ID='081101'; EG:查询XSB表中总学分大于50的同学的情况。 SELECT XSB.* FROM XSB WHERE XSB.Tcredit>50; EG:查询XSB表中通信工程专业总学分大于等于52的同学的情况。 SELECT XSB.* FROM XSB WHERE XSB.Major='通信工程' AND XSB.Tcredit>=52; { expression { = | < > | ! = | > | > = | ! > | < | < = | ! < } expression /*比较运算*/
2、模式匹配 string expression [NOT] LIKE string expression ESCAPE 'escape character'/*字符串模式匹配 字符串和通配符 允许在字符串 中搜索通配符 通配符列表 通配符 说明 示例 包含零个或多个字符的任 WHERE title LiKe"% omputer 意字符串。 将查找在书名中任意位置包含单词" computer"的所有书名。 WHERE au fname liKe ean' (下划线任何单个字符 将查找以ean结尾的所有4个字母的名字(Dean、Sean等)。 指定范围(a-)或集合 WhERE au Iname LIKE'IC-Plarsen 将查找以 arsen结尾并且以介于C与P之间的任何单个字符开始的作者姓氏 ( abcdef)中的任何单个字 例如 Carsen、 Larsen、 Karsen等。在范围搜索中,范围包含的字符可能因排 符 序规则的排序规则而异。 不属于指定范围([a-f)或 WHERE au Iname LIKE ' dell%o 集合( abcde的任何单个 将查找以de开始并且其后的字母不为1的所有作者的姓氏 字符
14 2、模式匹配 string_expression [ NOT ] LIKE string_expression [ ESCAPE 'escape_character' ] /*字符串模式匹配*/ 字符串和通配符 允许在字符串 中搜索通配符 通配符列表 通配符 说明 示例 % 包含零个或多个字符的任 意字符串。 WHERE title LIKE '%computer%' 将查找在书名中任意位置包含单词 "computer" 的所有书名。 _(下划线) 任何单个字符。 WHERE au_fname LIKE '_ean' 将查找以 ean 结尾的所有 4 个字母的名字(Dean、Sean 等)。 [ ] 指定范围 ([a-f]) 或集合 ([abcdef]) 中的任何单个字 符。 WHERE au_lname LIKE '[C-P]arsen' 将查找以 arsen 结尾并且以介于 C 与 P 之间的任何单个字符开始的作者姓氏, 例如 Carsen、Larsen、Karsen 等。在范围搜索中,范围包含的字符可能因排 序规则的排序规则而异。 [^] 不属于指定范围 ([a-f]) 或 集合 ([abcdef]) 的任何单个 字符。 WHERE au_lname LIKE 'de[^l]%' 将查找以 de 开始并且其后的字母不为 l 的所有作者的姓氏
EG:查询 PXSCJ数据库ⅹSB表中姓“王”且单名的学生的情况。 SELECT XSB. FROM XSB WHERE XSB Sname LIKE EG:查询XSB表中学号倒数第3个数字为1,且倒数第1个数在1~5之间的学生 的学号、姓名和专业 SELECT XSB. Stu ID, XSB Sname, XSB. Major FROM XSB WHERE XSB. Stu ID LIKE%1[123451 EG:查询XSB表中名字包含%的学生学号和姓名 SELECT XSB. Stu IDXsB Sname FROM XSB WHERE XSB Sname LIKE 96#%/% ESCAPE'# 定义转义字符
15 EG:查询PXSCJ数据库XSB表中姓“王”且单名的学生的情况。 SELECT XSB.* FROM XSB WHERE XSB.Sname LIKE '王_'; EG:查询XSB表中学号倒数第3个数字为1,且倒数第1个数在1~5之间的学生 的学号、姓名和专业。 SELECT XSB.Stu_ID,XSB.Sname,XSB.Major FROM XSB WHERE XSB.Stu_ID LIKE '%1_[12345]'; EG:查询XSB表中名字包含%的学生学号和姓名。 SELECT XSB.Stu_ID,XSB.Sname FROM XSB WHERE XSB.Sname LIKE '%#%%' ESCAPE'#'; 定义转义字符