• 数据过滤--高级搜索条件查询数据


    
    ---【AND 操作符】
        为了通过不止一个列进行过滤,可以使用and操作符对where子句附加条件,
    
    ```mysql
    
    select prod_id,prod_price,prod_name
    from products
    where vend_id=1003 and prod_price <=10;
    
    

    【分析】此sql语句检索商品的供应商编号,并且价格小于等于10的所有产品的名称和价格,这条select语句中的where子句包含来那个条件,并且用and 关键字链接他们,
    and 指示DBMS 只返回满足所有给定条件的行。如果某个商品,供应商,1003制造,价格高于10就不会检索它。

    检测的结果是:

    prod_id    |     prod_price    |    prod_name
    
    fb                 |    2                    |    sangsing
    
    hb                |    2                    |    sa
    opb              |    5                    |    sa
    kkb              |    2.3                   |    sang
    
    

    and 用在where子句中的关键字,用来指示检索满足所有给定条件的列

    使用and 还可以添加 多个过滤条件,就是在后面添加一个一个的and

    ---【OR 操作符】

    or操作符和and操作符不同,它指示MySQL检索匹配任一条件的行
    如下select语句

    select prod_name,prod_price
    from products
    where vend_id =1002 or vend_id=1006;
    

    or 检索的时候,只是检索其中的一条,只要有一个成立就会查询出来结果,如果都没有的话则查询没有数据
    and 是必须所有的条件都要成立才可以,所以使用and或者or要根据实际情况来使用。

    --【计算次序】
    where可以包含任意数目的and和or操作符,允许两者结合已进行复杂的高级过滤
    使用MySQL语句查询下面的数据:
    假如需要列出价格为大于等于10 并且由1002或者1003 制造的所有产品,下面的select语句使用and 和or操作符的组合建立了一个where子句进行数据查询

    select prod_name,prod_price
    from products
    where vend_id =1002 or vend_id =1003 and prod_pricce >=10;
    
    查询结果是:
    prod_name    |    prod_price
    
    bird                  |    13
    bold                 |    14
    ayrd                  |    8
    awrd                  |    5
    oldd                  |    33
    
    
    

    通过上面的查询结果,我们可以看到查询的结果中有两条数据是小于10的,这是因为什么呢?
    !!!原因就是在于计算机的次序。
    【在处理or操作符前,会优先处理and操作符,当sql看到上述的where子句时,它理解的就是由供应商1003制造的任何价格为10以上的产品,或者由供应商1002制造的任何产品,而不管价格如何,

    换句话说,就是由于AND 在计算机中的优先级最高,操作符被错误组合了。】

    这种问题的解决方法就是使用小括号把对应的分组给括起来。

    
    select prod_name,prod_price
    from products
    where (vend_id =1002 or vend_id =1003) and prod_pricce >=10;
    
    
    查询结果是:
    prod_name    |    prod_price
    
    bird                  |    13
    bold                 |    14
    oldd                  |    33
    
    

    在where子句中使用圆括号,任何时候使用具有and或者or 操作的where子句,都应该使用圆括号明确的进行分组操作符,不要过分的依赖默认计算机次序,即使它是你想要的东西也是如此,使用圆括号,没有任何坏处,它可以消除歧义。

    ---【in操作符】

    圆括号在where子句中还有另外一种用法,in操作符用来指定条件范围,范围中的每个条件都可以进行匹配,in 取合法值的由逗号分隔的清单,全都括在圆括号中。

    
    select prod_name,prod_price
    from products
    where vend_id in(1002,1003)
    order by prod_name;
    
    查询结果是:
    prod_name    |    prod_price
    
    bird                  |    13
    bold                 |    14
    ayrd                  |    8
    awrd                  |    5
    oldd                  |    33
    
    

    in 代表在一个合法的区间里面,只要在这个区间里面都是合法的值,所以如果要取区间的值就用in这个合法的语法来进行取值。

    in 操作符和不加集合的or操作符完成相同的功能。
    ---【使用in操作符的优点】
    -在使用长的合法选项清单时,in操作符的语法更清楚并且更加直观
    -在使用in时,计算的次序更容易管理,因为使用的操作符更少
    -in操作符一般比or操作符清单执行更快速高效
    -in的最大优点是可以包含其他select语句,使得能够更动态地建立where子句!!!

    --【not操作符】
    where子句中的not操作符,有且只有一个功能,那就是否定它之后所跟的条件。
    --not where 子句 用来否定后跟条件的关键字。
    为了证明一下商品ID不在1002 和1003中,编写如下代码:

    
    select prod_name,prod_price
    from products
    where vend_id not in (1002,1003)
    order by prod_name;
    
    prod_name    |    prod_price
    
    d                  |    13
    ld                 |    14
    rd                  |    8
    wrd                  |    5
    ldd                  |    33
    
    

    not的优势,在复杂的高级查询中会很有用处,例如在和in操作符联合使用时,not使找出与条件列表不匹配的行非常简单。

  • 相关阅读:
    PS转换图片——我教你
    通过Ajax——异步获取相关问题解答
    Spring的线程安全
    Spring MVC的工作机制
    Annotation的语法和使用
    Spring Bean的生命周期
    浅谈Spring
    Spring的事务管理
    行为型模式
    结构型模式
  • 原文地址:https://www.cnblogs.com/ludundun/p/11612195.html
Copyright © 2020-2023  润新知