多语言展示
当前在线:1069今日阅读:152今日分享:13

SQL高级过滤语句的使用

为了进行更强的过滤控制,有时简单的过滤根本无法实现数据的筛选,这时我们需要用到高级过滤AND和OR、IN和NOT操作符。
工具/原料
1

电脑

2

SQL Server软件

方法/步骤
1

语句: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操作符只满足一个条件是不合理的。

2

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的商品只要其中一个条件符合,数据就被检索出来;

3

求值顺序(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;得出结果如下图:

4

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

5

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

6

这回什么都没了现在就解释为什么:其实是操作符被错误组合导致的,因为在数据库系统中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,所以什么数据都没显示。

7

IN操作符(指定条件范围)语句:SELECT * FROM dbo.Products WHERE prod_name IN ('king doll' ,'Queen dool')--检索dbo.Products表中所有列,过滤条件为由供应商king doll和Queen dool制造的商品;注意:它的功能其实和OR一样,但是它的执行速度会更快并且简洁,最大的优点是可以包含其他SELECT语句,能够更动态地建立WHERE字句。

8

NOT操作符(否定其后跟的任何条件)语句:SELECT * FROM dbo.Products WHERE NOT prod_name='king doll';--检索dbo.Products表中所有列,过滤条件为否定king doll供应商包含的所有值;

推荐信息