一、通配符
SQL中的通配符过滤使用LIKE关键字,可以像使用OR、AND 等操作符一样使用它,它是一个二元操作符,左表达式为待匹配的字段,而右表达式为待匹配的通配符表达式。通配符表达式由通配符和普通字符组成,主流数据库系统支持的通配符有单字符匹配和多字符匹配,有的数据库系统还支持集合匹配。
进行单字符匹配的通配符为半角下划线“_”,它匹配单个出现的字符。
进行多字符匹配的通配符为半角百分号“%”,它匹配任意次数(零或多个)出现的任意字符。
集合匹配只在MSSQLServer 上提供支持,在MYSQL、Oracle、DB2 等数据库中不支持,必须采用变通的手段来实现。
进行集合匹配的通配符为“[]”,方括号中包含一个字符集,它匹配与字符集中任意一个字符相匹配的字符。
还可以使用否定符“^”来对集合取反,它匹配不与字符集中任意一个字符相匹配的字符。比如通配符表达式“[^bt]%”匹配第一个字符不为b 或者t、长度不限的字符串。
集合匹配只在MSSQLServer上提供支持,不过在其他数据库中我们可以通过变通手段来实现相同的效果。
比如下面的SQL可以实现和与SELECT * FROM T_Employee WHERE FName LIKE '[SJ]%'相同的效果:
SELECT * FROM T_Employee WHERE FName LIKE 'S%' OR FName LIKE 'J%'
与SELECT * FROM T_Employee WHERE FName LIKE '[^SJ]%'相同的效果:
SELECT * FROM T_Employee WHERE NOT(FName LIKE 'S%') AND NOT(FName LIKE 'J%')
二、空值检测
有时我们需要对空值进行检测,比如要查询所有姓名未知的员工信息。如果要检测“字段不为空”,则要使用IS NOT NULL,使用方法为“待检测字段名IS NOT NULL”,比如要查询所有姓名已知的员工信息,则运行下面的SQL语句:
SELECT * FROM T_Employee WHERE FNAME IS NULL
如果要检测“字段不为空”,则要使用IS NOT NULL,使用方法为“待检测字段名IS NOT NULL”,比如要查询所有姓名已知的员工信息,则运行下面的SQL语句:
SELECT * FROM T_Employee WHERE FNAME IS NOT NULL
三、反义运算符
“!”运算符能够把“不等于”、“不大于”、“不小于”这样的语义直接翻译成SQL运算符,不过这个运算符只在MSSQLServer和DB2两种数据库系统上提供支持,如果在其他数据库系统上则可以用其他的变通的方式实现,最常用的变通实现方式有两种:使用同义运算符、使用NOT运算符。否定的语义都有对应的同义运算符,比如“不大于”的同义词是“小于等于”、而“不小于”的同义词是“大于等于”,同时SQL提供了通用的表示“不等于”的运算符“<>”,这样“不等于”、“不大于”和“不小于”就分别可以表示成“<>”、“<=”和“>=”。
NOT运算符用来将一个表达式的值取反,也就是将值为“真”的表达式结果变为“假”、 将值为“假”的表达式结果变为“真”使用方式也非常简单“NOT (表达式)”,比如要表达“年龄不小于20”,那么可以如下使用“NOT(Fage<20)”。因此要完成下面的功能“检索所有年龄不等于22岁并且工资不小于2000元”,我们可以编写下面的SQL语句:
SELECT * FROM T_Employee WHERE NOT(FAge=22) AND NOT(FSALARY<2000)
四、限制结果集行数
在进行数据检索的时候有时候需要只检索结果集中的部分行,比如说“检索成绩排前三名的学生”、“检索工资水平排在第3位到第7位的员工信息”,这种功能被称为“限制结果集行数”。在虽然主流的数据库系统中都提供了限制结果集行数的方法,但是无论是语法还是使用方式都存在着很大的差异,即使是同一个数据库系统的不同版本(比如MSSQLServer2000和MSSQLServer2005)也存在着一定的差异。因此本节将按照数据库系统来讲解每种数据库系统对限制结果集行数的特性支持。
(1) MYSQL
MYSQL中提供了LIMIT关键字用来限制返回的结果集,LIMIT放在SELECT语句的最后位置,语法为“LIMIT 首行行号,要返回的结果集的最大数目”。比如下面的SQL语句将返回按照工资降序排列的从第二行开始(行号从0开始)的最多五条记录:
SELECT * FROM T_Employee ORDER BY FSalary DESC LIMIT 2,5
很显然,下面的SQL语句将返回按照工资降序排列的前五条记录:
SELECT * FROM T_Employee ORDER BY FSalary DESC LIMIT 0,5