SQL高级过滤语句的使用

2025-11-22 00:43:36

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

SQL高级过滤语句的使用

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

SQL高级过滤语句的使用

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;

得出结果如下图:

SQL高级过滤语句的使用

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

SQL高级过滤语句的使用

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

SQL高级过滤语句的使用

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字句。

SQL高级过滤语句的使用

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

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

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

SQL高级过滤语句的使用

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢