SQL必知必会——高级数据过滤(五)

    xiaoxiao2022-06-23  164

    1、组合where子句

    为了进行更强的过滤控制,sql允许给出多个where子句,这些子句有两种使用方式,即以and子句或or子句的方式使用。

    注意: 1、操作符:用来联结或改变where子句中的子句的关键字,也称为逻辑操作符

    1.1、and操作符

    #检索由供应商DLL01制造且价格小于等于4美元的所有产品的名称和价格; SELECT prod_id , prod_price , prod_name FROM products WHERE vend_id = 'DLL01' AND prod_price <= 4 ;

    1.2 、or操作符

    #检索由供应商DLL01或者BRS01制造的所有产品的产品名和价格; SELECT prod_name ,prod_price FROM products WHERE vend_id = 'DLL01' OR vend_id = 'BRS01' ;

    1.3、求值顺序

    列出价格为10美元及以上,且有DLL01或BSR01制造的产品。

    输入:

    SELECT prod_name,prod_price FROM Products WHERE vend_id = 'DLL01' OR vend_id = 'BRS01' AND prod_price >= 10; #错误

    输出: 分析: 返回的行中由四行价格小于10美元,显然返回的行未按预期的进行过滤。原因就是AND操作符的优先级比OR操作符的优先级高,所有这里理解为:由供应商BRS01制造的价格为10美元以上的所有产品,以及由供应商制造的所有产品而且不管其价格如何。

    输入:

    SELECT prod_name,prod_price FROM Products WHERE (vend_id = 'DLL01' OR vend_id = 'BRS01') AND prod_price >= 10; #正确 #正确的语句和前一条的唯一差别就是,将前两个条件用圆括号括了起来

    输出:

    注意: 1、任何时候使用具有and和or操作符的whereziju,都应该使用圆括号明确的分组操作符。不要过分依赖默认求值顺序,即使他确实如你希望的那样。使用圆括号没有什么坏处,他能消除歧义。

    2、in操作符

    IN: WHERE子句中用来指定要匹配值的清单的关键字,功能与OR相当。

    SELECT prod_name,prod_price FROM products WHERE vend_id IN ('DLL01','BRS01') ORDER BY prod_name ; SELECT prod_name,prod_price FROM products WHERE vend_id = ’DLL01‘ OR vend_id = 'BRS01' ORDER BY prod_name ;

    为什么要使用IN操作符 1、再由很多合法选项时,IN操作符的语法更清楚,更直观。 2、在与其他AND和OR操作符组合使用IN时,求职顺序更容易管理。 3、IN操作符一般比一组OR操作符执行的更快。 4、IN的最大优点是可以包含其他SELECT语句,能够更动态的建立WHERE子句。

    3、not操作符

    WHERE子句中的NOT操作符由且只有一个功能,那就是否定其后所更的任何条件。

    SELECT prod_name FROM produtcts WHERE NOT vend_id = 'dll01' ORDER BY prod_name ;

    分析: 这里的NOT否定跟在其后的条件,因此,DBMS不是匹配vend_id为DLL01,而是匹配非DLL01之外的所有东西。

    #以上的例子也可以使用<>操作符来完成 SELECT prod_name FROM Products WHERE vend_id <> 'DLL01' ORDER BY prod_name ;

    分析: 为什么使用NOT?对于这里的这种简单的WHERE子句,使用NOT确实没有什么优势。但在更复杂的子句中,NOT是非常有用的。


    最新回复(0)