复杂条件的查询

1、主要内容:where子句中几种复杂的搜索条件,包括组合的搜索条件(and,or),in 运算符,not运算符,like运算符和相关的通配符。

2、实例表: 简单查询一文中的teacher表,和下面的course表

teacher表:

 

 

course表:

 

3、and 和or

eg:使用teacher表,查询计算机或者生物系的,并且工资高于1000的教师信息 ,如果采用下列查询代码:

 

查询 结果为:

工资为空,或者工资低于1000的也出现在结果中,查询的结果实际是计算机系所有教师信息,以及生物系工资高于1000的教师信息,不是我们期望的结果。

原因:当and 和or一起出现在where中时候,and的优先级高于or的优先级。

因此上面的查询正确的写法应该是:

 

查询结果:

 

4、in,not in,not

eg1:in或者not in运算符的用法

从teacher表查询计算机系,生物系,机械工程系的所有教师姓名,系,年龄,性别信息。

 

等价于

 

比较上述两者,前者(in)运算符显得简单,运行效率也较or运算符高。此外,使用in运算符后面可以是一个子查询。

 

eg2:not运算符的用法

查询teacher表中工资不高于1500的教师信息

 

查询结果:

由结果可以知道:sal的值为null的行并不包括在结果中

 

not 和<>运算符的比较

  • 上述例子中not运算符可以用<>代替,即not sal>1500可以等价与sal<>1500.
  • not运算符较<>运算符还有一些优势:not运算符可以和其他运算符共同结合使用,但<>则不可以。下面是一个not运算符和between运算符结合使用的例子。

eg3:not 和between结合使用

从teacher表中查询年龄不在40到50岁之间的所有教师姓名,所在系,年龄,性别

 

当然上述查询可以用or运算符来替代

 

 

5、使用like进行模糊查询

like运算符需要和通配符进行结合使用。SQL提供的通配符有%,_,[],*四个

(1)%通配符

该通配符表示任意个(0个或者0个以上),任意字符。

eg1:where dname like'计算机' 等价于 where dname = '计算机'

eg2:where dname not  like'计算机' 等价于 where dname <> '计算机'

eg3:开头/结尾匹配

 

查询结果:

eg4:中间匹配

 

查询结果:

 

eg5:两端匹配

 

查询结果:

 

(2)“_”通配符

“_”这个通配符表示0个或者1个字符。

eg:在course表中查询所有课程表名为6个字的课程名,人数,考试时间信息。

 

查询结果为:

由结果可以发现此时查询结果中不仅包含6个字符的课程,也包含小雨6个字符的课程。这一点一定要引起注意。因为‘_’通配符表示0个或者1个字符。即如果记录中有一个课程名为“计算机”的课程,也将在查询的结果中。

(3)“[]”通配符

表示取“[]”通配符中的字符串中的某一个字符

另外在通配符“[]”中的通配符自动退化成普通字符

例如:

eg:

在course表中查询所有以“计”或者“生”开头的课程名称,上课人数,考试时间

 

查询结果:

如果要查询课程名称不以“计”或者“生”开头的课程名称,上课人数和考试时间,

则查询语句为:

 

即在通配符[]里面的第一个字符是尖角符号^,表示不包含里面的任何一个字符。

当然也可以等价于:

 

 

6、使用escape定义转义字符

转义字符的引入是为了表示出字符串中包含“%”,“*”,“_”,“[]”这些字符的情况

例子:

 

这里使用escape定义了一个转义字符“M”(转义字符的名称并不重要,随便什么都可以),那么转义字符M后面的通配符“%”退化为普通字符(不再时候转义字符)。当然前面那个“%”还是转义字符

 

eg:

 

表示以“AB_”开头的所有字符串

 

 

 

 

 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值