旗下网站

百科知识库

报道公司事件 · 传播行业动态

SQL高级过滤查询用法

发布日期:2018-01-08    点击:839

SQL查询语句在数据库的操作当中经常频繁用到,为了进行更强的过滤控制,有时简单的过滤根本无法实现数据的筛选,这时我们需要用到高级过滤AND和OR、IN和NOT操作符。今天做网站小编就和大家讨论一下关于sql高级过滤语句的用法...

语句:SELECT * FROM dbo.Products WHERE prod_name='king doll' AND prod_price>8;

--检索dbo.Products表中所有列,过滤条件为由供应商king doll制造价格大于8的所有商品;

注意:--后面的字符是这条语句的注释,这条语句有两个条件,分别用AND关键字联接在一起,并且过滤结果必须满足这两个条件,如果只满足其中一个该数据不会被检索出来;

例如:已知供应商king doll制造商品对应的价格是8元,现在把商品价格改成小于8或者供应商改成king add,结论是任何数据都不会被检索出来,因为使用AND操作符只满足一个条件是不合理的。

OR操作符(或)

语句:SELECT * FROM dbo.Products WHERE prod_name='king doll' OR prod_price>8;

--检索dbo.Products表中所有列,过滤条件为由供应商king doll制造价格大于8的所有商品值;

注意:--这里要说明的是OR操作符与AND操作符的不同之处是只要满足其中一个条件,数值就会被检索出来,例如:由供应商king doll制造价格小于8商品或者由供应商king add制造价格大于8的商品只要其中一个条件符合,数据就被检索出来;

求值顺序(AND和OR混合使用)

先看个例子:检索出价格为8元以上,且由king doll或者Queen dool制造的所有产品,我们输入语句:

SELECT * FROM dbo.Products WHERE prod_name='king doll' OR prod_name='Queen dool' AND prod_price>8;

得出结果如下图:

现在把prod_price大于8的值改成大于10,看看结果如何:

现在检索出来的值是1行,接下来在prod_name='king doll' OR prod_name='Queen dool'语句加上括号,看看结果如何:

这回什么都没了

现在就解释为什么:其实是操作符被错误组合导致的,因为在数据库系统中AND求值的顺序比OR的求值顺序更优先。

第一张图的顺序是:先执行prod_name='Queen dool' AND prod_price>10的数据再执行prod_name='king doll' OR prod_name='Queen dool'的数据,由于第一个条件和第2条件符合所以出现两行数值。

第二张图的顺序也是:先执行prod_name='Queen dool' AND prod_price>10的数据再执行prod_name='king doll' OR prod_name='Queen dool'的数据,但由于第一条件不符,Queen dool对应的数值没有大于10的值,所以只出现第2个条件的数据。

第三张图的顺序是:先执行括号里面的,然后在执行AND prod_price>10,在SQL数据库中加括号的内容系统会优先执行,由于结果只满足括号里的条件,但并不满足括号外的条件,因为prod_price的值是9.49小于10,所以什么数据都没显示。

IN操作符(指定条件范围)

语句:SELECT * FROM dbo.Products WHERE prod_name IN ('king doll' ,'Queen dool')

--检索dbo.Products表中所有列,过滤条件为由供应商king doll和Queen dool制造的商品;

注意:它的功能其实和OR一样,但是它的执行速度会更快并且简洁,最大的优点是可以包含其他SELECT语句,能够更动态地建立WHERE字句。

NOT操作符(否定其后跟的任何条件)

语句:SELECT * FROM dbo.Products WHERE NOT prod_name='king doll';

--检索dbo.Products表中所有列,过滤条件为否定king doll供应商包含的所有值;

Copyright 大连网龙科技 版权所有      全部新闻

电话
客服