美文网首页mysqlMySQL 入门教程
19《MySQL 教程》 WHERE 条件

19《MySQL 教程》 WHERE 条件

作者: 木子教程 | 来源:发表于2022-03-27 19:06 被阅读0次

    前面介绍了如何对表数查询、更新、删除,本小节介绍如何在查询、更新、删除操作加上 WHERE 条件约束,使这些语句的操作更加准确,满足业务需求。WHERE 条件的操作符类型有如下:

    符号 说明 举例
    < 小于,< 左边的值如果小于右边的值,则结果为 TRUE,否则为 FALSE 如 : 满足年龄小于 18 的条件 age < 18
    = 等于,= 左边的值如果等于右边的值,则结果为 TRUE,否则为 FALSE 如 : 姓名为 小明 的条件 name = '小明'
    > 大于,> 左边的值如果大于右边的值,则结果为 TRUE,否则为 FALSE 如 : 时间戳大于 2020-03-30 00:00:00的条件 time > 1585497600
    <> 不等于,<>还可写成 != ,左边的值如果不等于右边的值,则结果为 TRUE,否则为 FALSE 如 : 年份不等于2012的条件 year !=year <> 2012
    <= 小于等于,<= 左边的值如果大于右边的值,则结果为 FALSE,否则为 TRUE 如 : 满足年龄小于等于 18 的条件 age <= 18
    >= 大于等于,>= 左边的值如果小于右边的值,则结果为 FALSE,否则为 TRUE 如 : 满足年龄大于等于 18 的条件 age >= 18
    LIKE 模糊条件,LIKE 右边的值如果包含左边的值,则结果返回TRUE,否则为 FALSE 如 : 满足身份证号为 420 开头的条件 id_number LIKE '420%',其中 % 表示任意值
    NOT LIKE 不满足模糊条件,LIKE 右边的值如果不包含左边的值,则结果返回TRUE,否则为 FALSE 如 : 满足身份证号不是 X 结尾的条件 id_number NOT LIKE '%X',其中 % 表示任意值
    BETWEEN AND 在两个值之间(包含两端值) 如 : 年龄满足 大于等于20 和 小于等于30 的条件 age BETWEEN 20 AND 30
    NOT BETWEEN AND 不在在两个值之间(不包含两端值) 如 : 年龄满足 小于20 和 大于30 的条件 age NOT BETWEEN 20 AND 30
    IS NULL 空,IS NULL 左边的值如果为空,则返回TRUE,否则为FALSE 如 : 年龄满足 邮箱为空 的条件 email IS NULL
    IS NOT NULL 不是空,IS NOT NULL 左边的值如果不为空,则返回TRUE,否则为FALSE 如 : 年龄满足 邮箱不为空 的条件 email IS NOT NULL

    1.单条件查询

    以 teacher 表为例,查询年龄大于 18 的教师信息:

    SELECT * FROM teacher WHERE age > 18;
    
    

    执行结果如下图:

    5e99c462095df0e808070696.jpg

    再比如使用 LIKE 模糊查询身份证号以 020X 结尾的教师信息:

    SELECT * FROM teacher WHERE id_number LIKE '%020X';
    
    

    执行结果如下图:

    [图片上传失败...(image-f53914-1648379120315)]

    2.AND 多条件查询

    以 teacher 表为例,查询年龄大于 18 和 教师姓氏 的教师信息:

    SELECT * FROM teacher WHERE age > 18 AND name LIKE  '王%';
    
    

    执行结果如下图:
    [图片上传失败...(image-7dbeda-1648379120315)]

    Tips:这里还想加更多的条件可以在后面继续跟 AND,LIKE 后面表达式中 % 表示指代任意内容。

    3.OR 多条件查询

    以 teacher 表为例,查询年龄大于 25 或 教师姓氏 的教师信息:

    SELECT * FROM teacher WHERE age > 25 OR name LIKE  '王%';
    
    

    执行结果如下图:


    5e99c48b095be54910750257.jpg

    Tips:这里还想加更多的条件可以在后面继续跟 OR,若 ANDOR 混合使用则需要把同一组表达式用 () 包起来,如 : (age > 25 AND name LIKE '王%') OR (age < 20 AND name LIKE '刘%')

    4.BETWEEN AND 更新数据

    以 teacher 表为例,将 age 在 20 和 30 之间的教师身份证设置为:

    UPDATE teacher SET id_number = '无' WHERE age BETWEEN 20 AND 30;
    
    
    5e99c4ac09da319a08110717.jpg

    Tips:注意 BETWEEN AND 包含两端的值。

    5.IS NULL 查询

    为了演示方便,我们先给 teacher 表增加一个字段 email:

    ALTER TABLE `item_name`.`teacher` 
    ADD COLUMN `email` varchar(50) NULL AFTER `id_number`;
    
    

    执行结果如下图:


    5e99c4bd09d2865911740717.jpg

    清空表数据:

    TRUNCATE TABLE teacher;
    
    

    然后往 teacher 表插入几条测试数据:

    INSERT INTO teacher
    (name,age,id_number,email)
    VALUES
    ('姓名甲',19,'42011720200604077X',NULL),
    ('姓名乙',18,'42011720200604099X','123@qq.com'),
    ('姓名丙',20,'42011720200604020X',NULL),
    ('姓名丁',21,'42011720200604022X','345@qq.com'),
    ('姓名戊',22,'42011720200604033X',NULL)
    
    

    然后查询 email 为 NULL 的教师信息结果集:

    SELECT * FROM teacher WHERE email IS NULL;
    
    

    执行结果如下图:


    5e99c4d10907b0c515990521.jpg

    6.小结

    本小节介绍了如果在查询、更新语句后面加上 WHERE 条件约束,需要注意的是当使用 ><、这样的操作符和空值比较的时候,NULL值与任何其它值的比较(即使是NULL)永远不会为 TRUE,例如要查询 name 为 NULL 的结果集要写成 name IS NULL,而不能使用 name=NULL

    相关文章

      网友评论

        本文标题:19《MySQL 教程》 WHERE 条件

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