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供应商包含的所有值;