美文网首页
[Mysql]WHERE条件查询

[Mysql]WHERE条件查询

作者: RamboL | 来源:发表于2022-08-12 08:52 被阅读0次

    数据库中如果包含大量的数据,很少需要检索表中所有的行信息,通常只会根据特定的需要提取对应的数据子集。只检索所需要数据的制定搜索条件。搜索条件也称为过滤条件。

    使用Where子句

    select * from data_test where id = 1;
    #
    +----+--------+------+
    | id | name   | sex  |
    +----+--------+------+
    |  1 | 王武   | 男   |
    +----+--------+------+
    1 row in set (0.01 sec)
    #
    

    使用操作符

    操作符 说明
    = 等于
    <> 不等于
    != 不等于
    < 小于
    <= 小于等于
    > 大于
    >= 大于等于
    Between 两者之间-between...and...

    注意:在同时使用where和order by 子句时,请务必保证order by子句位于where之后,否则将会产生错误

    select * from data_test;#先用update语句将sex字段的值进行一下修改,以便后面的演示
    +----+--------+-------+
    | id | name   | sex   |
    +----+--------+-------+
    |  1 | 王武   | Women |
    |  2 | 张三   | man   |
    |  3 | 李四   | Man   |
    +----+--------+-------+
    3 rows in set (0.00 sec)
    

    检查单个值

    select * from data_test where sex = "man";
    #
    +----+--------+------+
    | id | name   | sex  |
    +----+--------+------+
    |  2 | 张三   | man  |
    |  3 | 李四   | Man  |
    +----+--------+------+
    2 rows in set (0.00 sec)
    #
    

    注意:如上所示,mysql在执行匹配时,默认不区分大小写

    不匹配检查

    select * from data_test where sex <> "man";
    #
    +----+--------+-------+
    | id | name   | sex   |
    +----+--------+-------+
    |  1 | 王武   | Women |
    +----+--------+-------+
    1 row in set (0.00 sec)
    #
    select * from data_test where sex != "man";
    #
    +----+--------+-------+
    | id | name   | sex   |
    +----+--------+-------+
    |  1 | 王武   | Women |
    +----+--------+-------+
    1 row in set (0.00 sec)
    #
    

    注意:以上两个语句分别使用了!=和<>,返回的结果一致

    范围检查

    select * from data_test;
    #
    +----+--------+-------+-------+
    | id | name   | sex   | score |
    +----+--------+-------+-------+
    |  1 | 王武   | Women |    11 |
    |  2 | 张三   | man   |    21 |
    |  3 | 李四   | Man   |    31 |
    |  4 | 马六   | man   |    33 |
    |  5 | 李七   | women |    53 |
    |  6 | 周八   | women |    43 |
    +----+--------+-------+-------+
    6 rows in set (0.00 sec)
    #
    #为了使操作更加清晰,在data_test基础上新增一列score,作为范围查询的依据
    
    
    -------------------------------------------------------------------------------------
    
    select * from data_test where score between 10 and 50;
    #
    +----+--------+-------+-------+
    | id | name   | sex   | score |
    +----+--------+-------+-------+
    |  1 | 王武   | Women |    11 |
    |  2 | 张三   | man   |    21 |
    |  3 | 李四   | Man   |    31 |
    |  4 | 马六   | man   |    33 |
    |  6 | 周八   | women |    43 |
    +----+--------+-------+-------+
    5 rows in set (0.00 sec)
    #
    

    空值检查

    #为了演示时能够清晰的看到效果,我们把其中一项值设置为空
    select * from data_test;
    #
    +----+--------+-------+-------+
    | id | name   | sex   | score |
    +----+--------+-------+-------+
    |  1 | 王武   | Women |    11 |
    |  2 | 张三   | man   |    21 |
    |  3 | 李四   | NULL  |    31 |
    |  4 | 马六   | man   |    33 |
    |  5 | 李七   | women |    53 |
    |  6 | 周八   | women |    43 |
    +----+--------+-------+-------+
    6 rows in set (0.00 sec)
    #
    
    select * from data_test where sex IS NULL;
    #
    +----+--------+------+-------+
    | id | name   | sex  | score |
    +----+--------+------+-------+
    |  3 | 李四   | NULL |    31 |
    +----+--------+------+-------+
    1 row in set (0.00 sec)
    #
    

    注意:NULL与不匹配,在通过过滤选择出不具有特定值的行时,你可能希望返回具有NULL值的行。但是,不行,因为在未知具有特殊的含义,数据库不知道他们是否匹配,所以在匹配过滤或者不匹配过滤时不返回他们。所以在过滤数据时,一定要验证返回的数据中确实给出了被过滤列具有NULL的行。

    相关文章

      网友评论

          本文标题:[Mysql]WHERE条件查询

          本文链接:https://www.haomeiwen.com/subject/wrjxgrtx.html