1.LIKE运算符
使用like进行模糊查询,like运算符用于判断一个字符串是否与给定的模式相匹配。
模式是一种特殊的字符串,特殊之处在于不仅包含普通字符,还包含有通配符。在实际应用中,如果不能对字符串进行精确查询,此时可以使用like运算符与通配符实现模糊查询,like运算符的语法格式如下。
字符串表达式 [not] like 模式
模式是一个字符串,其中包含普通字符和通配符。在MySQL中常用的通配符如表5.2所示。
表5.2 通配符
模糊查询“%”或者“_”字符时,需要将“%”或者“_”字符转义,例如检索学生姓名中所有带“_”的学生信息,可以使用下面的SQL语句,其中new_student表在表记录的更新操作章节中创建。
select * from new_student where student_name like '%\_%';
如果不想使用“\”作为转义字符,可以使用escape关键字自定义一个转义字符,例如下面的SQL语句使用字符“!”作为转义字符。
select * from new_student where student_name like '%!_%' escape '!';
【例5.5】查询PXSCJ数据库XSB表中姓“王”的学生的学号、姓名及性别。
SELECT 学号,姓名,性别
FROM XSB
WHERE 姓名 LIKE '王%';
查询结果如图5.5所示。
图5.5 模糊查询结果
2.REGEXP运算符
REGEXP运算符用来执行更复杂的字符串比较运算。REGEXP是正则表达式(regular expression)的缩写。和LIKE运算符一样,REGEXP运算符有多种功能,但它不是SQL标准的一部分,REGEXP运算符的同义词是RLIKE。语法格式如下:
match_expression [NOT][REGEXP | RLIKE] match_expression
LIKE运算符有两个符号具有特殊的含义:“_”和“%”。而REGEXP运算符则有更多的符号有特殊的含义,参见表5.3。
表5.3 REGEXP运算符的特殊字符
【例5.6】查询姓李的学生的学号、姓名和专业。
SELECT 学号,姓名,专业
FROM XSB
WHERE 姓名 REGEXP '^李';
查询结果如图5.6所示。
图5.6 带REGEXP运算符^的查询
【例5.7】查询学号里包含4、5、6的学生的学号、姓名和专业。(www.xing528.com)
SELECT 学号,姓名,专业
FROM XSB
WHERE 学号 REGEXP '[4,5,6]';
查询结果如图5.7所示。
图5.7 带REGEXP运算符[]的查询
【例5.8】查询学号以08开头、08结尾的学生的学号、姓名和专业。
SELECT 学号,姓名,专业
FROM XSB
WHERE 学号 REGEXP '^08.*08$';
查询结果如图5.8所示。
图5.8 带多个REGEXP运算符的查询
3.范围比较
用于范围比较的关键字有两个:BETWEEN和IN。
当要查询的条件是某个值的范围时,可以使用BETWEEN关键字。BETWEEN关键字指出查询范围,格式为:
expression [NOT] BETWEEN expression1 AND expression2
当不使用NOT时,若表达式expression的值在表达式expression1与expression2之间(包括这两个值),则返回TRUE,否则返回FALSE;使用NOT时,返回值刚好相反。
使用IN关键字可以指定一个值表,值表中列出所有可能的值,当与值表中的任一个匹配时,即返回TRUE,否则返回FALSE。使用IN关键字指定值表的格式为:
4.空值比较
当需要判定一个表达式的值是否为空值时,使用IS NULL关键字,格式为:
expression IS [NOT] NULL
当不使用NOT时,若表达式expression的值为空值,返回TRUE,否则返回FALSE。当使用NOT时,结果刚好相反。
IS NULL用于判断表达式的值是否为空值NULL(is not 恰恰相反)。
说明:不能将“score IS NULL”写成“score = NULL;”,原因是NULL是一个不确定的数,不能使用“=”、“!=”等比较运算符与NULL进行比较。
【例5.11】查询总学分尚不确定的学生情况。
SELECT *
FROM XSB
WHERE 总学分 IS NULL;
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。