反义运算符
“=”、“<”、“>”等运算符都是用来进行数值判断的,有的时候则会想使用这些运算符的反义,比如“不等于”、“不小于”或者“不大于”,MSSQLServer、DB2提供了“!”运算符来对运算符求反义,也就是“!=”表示“不等于”、“!<”表示“不小于”,而“!>”表示“不大于”。
比如要完成下面的功能“检索所有年龄不等于22岁并且工资不小于2000元”,我们可以编写下面的SQL语句:
SELECT * FROM T_Employee WHERE FAge!=22 AND FSALARY!<2000
执行完毕我们就能在输出结果中看到下面的执行结果:
“!”运算符能够把“不等于”、“不大于”、“不小于”这样的语义直接翻译成SQL运算符,不过这个运算符只在MSSQLServer和DB2两种数据库系统上提供支持,如果在其他数据库系统上则可以用其他的变通的方式实现,最常用的变通实现方式有两种:使用同义运算符、使用NOT运算符。
否定的语义都有对应的同义运算符,比如“不大于”的同义词是“小于等于”、而“不小于”的同义词是“大于等于”,同时SQL提供了通用的表示“不等于”的运算符“<>”,这样“不等于”、“不大于”和“不小于”就分别可以表示成“<>”、“<=”和“>=”。因此要完成下面的功能“检索所有年龄不等于22岁并且工资不小于2000元”,我们可以编写下面的SQL语句:
SELECT * FROM T_Employee WHERE FAge<>22 AND FSALARY>=2000
NOT运算符用来将一个表达式的值取反,也就是将值为“真”的表达式结果变为“假”、将值为“假”的表达式结果变为“真”,使用方式也非常简单“NOT (表达式)”,比如要表达“年龄不小于20”,那么可以如下使用“NOT(Fage<20)”。因此要完成下面的功能“检索所有年龄不等于22岁并且工资不小于2000元”,我们可以编写下面的SQL语句:
SELECT * FROM T_Employee WHERE NOT(FAge=22) AND NOT(FSALARY<2000)
使用“!”运算符的方式由于只能运行在MSSQLServer和DB2两种数据库系统上,所以如果应用程序有移植到其他数据库系统上的需求的话,就应该避免使用这种方式;使用同义运算符的方式能够运行在所有主流数据库系统上,不过由于粗心等原因,很容易将“不大于”表示成“<”,而忘记了“不大于”是包含“小于”和“等于”这两个意思的,这样就会造成检索数据的错误,造成应用程序的Bug;而采用NOT运算符的方式能比较容易的表达要实现的需求,而且能够实现复杂的嵌套,最重要的是避免了潜在的应用程序的Bug,所以除了“<>”这种方式之外,我们推荐使用NOT运算符的方式来表示“非”的语义。