zoukankan      html  css  js  c++  java
  • MySql——使用where子句过滤数据

    示例使用的数据表在上一个博客中创建的https://www.cnblogs.com/lbhym/p/11895968.html

    参考资料:《Mysql必知必会》

    1.使用where子句

    示例如下:查询价格等于10.5的行

    select * from commodity where price=10.5

    输出:

    1 1001 牙刷 10.5

    2.where的操作符

    上个示例中,我们使用到了‘=’这个操作符,下面列出所有条件操作符

    where操作符
    = 等于
    <> 不等于
    != 不等于
    < 小于
    > 大于
    <= 小于等于
    >= 大于等于
    between 在指定的两个值之间

    3.检查单个值

    在Mysql中,检查字段是不区分大小写的

    比如:where name=‘ys’的结果和where name='YS'是一样的。我的数据当中没有字母,所以不做演示了。

    4.不匹配检查

    如下,查询typeid不等于1001的所有行

    select * from commodity where typeid<>1001

    其输出结果和!=是一样的:

    select * from commodity where typeid!=1001

    都是输出:

    3 1002 茶几 999.9
    4 1003 电视 3199
    5 1003 冰箱 2999
    6 1004 1 手机 1999
    7 1004 2 手机 7699
    8 1004 .3 手机 699.9
    9 1005 T恤 21.5
    10 1005 牛仔裤 99

    5.范围值检查

    如下,查询typeid在1002和1004之间的所有行,包括1002和1004

    select * from commodity where typeid between 1002 and 1004

    输出:

    3 1002 茶几 999.9
    4 1003 电视 3199
    5 1003 冰箱 2999
    6 1004 1 手机 1999
    7 1004 2 手机 7699
    8 1004 .3 手机 699.9

    必须指定两个值,一个低端值和一个高端值,中间必须用and连接。

    6.空值检查

    如下,检查name为NULL的行,注意需要用is null。不是用=

    select * from commodity where name is null

    会输出所有name字段为null的行

    7.组合where子句

    上面的所有示例都是单个查询条件,但是实际中肯定会出现不止一个查询条件,这时候就可以用andor来组合where子句

    示例1,查询价格大于20的1001型商品

    select * from commodity where price>20 and typeid=1001

    输出:

    2 1001 毛巾 21.5

    示例2,查询价格大于3000的1003型商品或1004型商品

    select * from commodity where typeid=1003 or typeid=1004 and price>3000

    大家仔细看看上面的代码,似乎没什么问题,类型等于1003或类型等于1004并且价格大于3000

    输出结果:

    4 1003 电视 3199
    5 1003 冰箱 2999
    7 1004 2 手机 7699

    但是从结果看是错误的,这是由于计算次序的问题。在mysql中and拥有更高的优先级,所以看似没问题的组合被mysql错误的组合了,where后面的条件可以看成

    (price>3000 and typeid=1003) or typeid=1004

    可以用小括号来组合where后面的条件,小括号具有比and和or更高的优先级

    所以,正确的写法如下:

    select * from commodity where (typeid=1003 or typeid=1004) and price>3000

    输出:

    4 1003 电视 3199
    7 1004 2 手机 7699

    8.not和in操作符

    in用来指定条件范围


    如下,查询商品类型等于1001,1002的所有行

    select * from commodity where typeid in (1001,1002)

    输出:

    1 1001 牙刷 10.5
    2 1001 毛巾 21.5
    3 1002 茶几 999.9

    需要注意的是,大家不要当成between的另外一种写法,小括号中可以有N个值,用逗号隔开,最后会返回指定字段出现在小括号中的所有行。

    in和or的功能其实有些相同,但是in在遇到更多条件时会显得更加简洁。而且in的执行效率更快,最大的优点是可以包含select语句。比如小括号里面你不确定是哪些值,需用实时的查询,那么select语句就可以写在小括号里面。

    not用来否定后面跟着的条件。


    如下,查询商品类型不等于1001,1002的所有行

    select * from commodity where typeid not in (1001,1002)

    输出:

    4 1003 电视 3199
    5 1003 冰箱 2999
    6 1004 1 手机 1999
    7 1004 2 手机 7699
    8 1004 .3 手机 699.9
    9 1005 T恤 21.5
    10 1005 牛仔裤 99

    not支持对between、in、exists的取反。

  • 相关阅读:
    Find the most frequent element in all intervals
    1365. How Many Numbers Are Smaller Than the Current Number
    CodeForces 1316C
    CodeForces-1305D Kuroni and the Celebration【树】
    CodeForces-1305C Kuroni and Impossible Calculation【思维】
    CodeForces 1254D Tree Queries【树链剖分+树状数组】
    Scout YYF I POJ
    CodeForces-1320C World of Darkraft: Battle for Azathoth 【权值线段树+思维】
    主席树总结
    Codeforces 1320A Journey Planning【思维转换】
  • 原文地址:https://www.cnblogs.com/lbhym/p/11896395.html
Copyright © 2011-2022 走看看