• 【黄啊码】MySQL入门—5、掌握这些数据筛选技能比你学python还有用-2


    大家好!我是黄啊码,上节课我们将了DISTINCT、 FROM 、 GROUP BY、 HAVING 、 ORDER BY 这些筛选数据的技能,是不是总感觉少了些啥?

    你:啊码,你把最重要的where给漏了!

    黄啊码:啪,不是漏了,是想单独拿出来讲讲,毕竟讲那么多你们不一定能消化得完

    你:每节课的开始,就是啪我一下吗?

    黄啊码:额,不是,纯粹是感觉你有点欠揍,哈哈哈。

    好了,进入正题吧:WHERE 子句,说起来 SQL 其实很简单,只要能把满足条件的内容筛选出来即可,但在实际使用过程中,不同人写出来的 WHERE 子句存在很大差别,比如执行效率的高低,有没有遇到莫名的报错等。

    这是今天的

    1. 目录

      学会使用 WHERE 子句,如何使用比较运算符对字段的数值进行比较筛选;

      如何使用逻辑运算符,进行多条件的过滤;

      学会使用通配符对数据条件进行复杂过滤。


    学会使用 WHERE 子句,如何使用比较运算符对字段的数值进行比较筛选;

    比较运算符 

    在 SQL 中,我们可以使用 WHERE 子句对条件进行筛选,在此之前,你需要了解 WHERE 子句中的比较运算符。这些比较运算符的含义你可以参见下面这张表格:

    啊码贴出的这图只是常用数据库的运算符,建议别直接copy就用。

    你:为啥?作为老师,不应该是直接给准确答案吗?

    黄啊码:啪,你见过参考答案上边写标准答案四个字吗?

    你:我只见过》答:略。

    黄啊码:。。。

    你需要查看使用的 DBMS 是否支持,不同的 DBMS 支持的运算符可能是不同的,比如 Access 不支持(!=),不等于应该使用(<>)。在 MySQL 中,不支持(!>)(!<)等。

    你:啊码,什么是DBMS?

    黄啊码:啪!!Database Management System的缩写啊。要知其然,也要知其所以然。至于什么是DBMS,要么等啊码有空解释一下,要么自己搜索一下,这不在这节课主要内容里。

    比如我们想要查询年龄大于11岁数据:

    select * from user_info where user_age > 11

    你:如果要查询10-15的数据呢

    黄啊码:在英文中,介于你我中间表示什么?

    你:一般叫做第三者

    黄啊码:啪,什么鬼?between你没学过吗?

    你:啊码,I love chinese

    黄啊码:啪,那你还说英文,看例子

    select * from user_info where user_age BETWEEN 10 and 15

     如何使用逻辑运算符,进行多条件的过滤;

    逻辑运算符

    我刚才介绍了比较运算符,如果我们存在多个 WHERE 条件子句,可以使用逻辑运算符:

    比如要查询user_age10-15的数据,其实不止有一种方式,还有可以用and,and就跟我们平常的汉语所说的,前者跟后者相关联结合:

    select * from user_info where user_age>=10 and user_age<=15

    黄啊码:结果是不是一模一样?

    你:这居然都一样,那为什么还用between?

    黄啊码:啪。哪来哪么多why,古汉语一个字不还有多种意思?

    你:好吧。。。

    那比如我们需要拿到user_age=10或者user_age=15的数据呢?

    你:比吃饭还简单,看我的:

    select * from user_info where user_age=10 or user_age=15

    黄啊码:小瞧你的悟性了,看来打你没打错。

    你:错是没错,就是少打点吧,打多容易笨。

    黄啊码:看你后边表现啦。

    好啦,接下来说in,给in其实和between和and有共通之处,比如说数组里有1,2,3,我们可以拿between 1 and 3,也可以1<=变量名<=3,那么我们也可以理解成1,2,3就在这数组里,如下:

    如果我们想要拿到user_age为10,11,12,15的数据,我们该怎么表示:

    select * from user_info where user_age in(10,11,12,15)

    你:我去,这也行。

    黄啊码:是的,所以用中文解释编程完全行得通,周杰仑说过:中文才是最屌的【轮是假的,所以车跑了】

    来,那么问题来了,我想拿到user_age不是10,11,12,15的数据呢

    你:这不简单,直接加not就行了,比如别人说谢谢用的是Thanks,我们就直接用No thanks,哈哈哈哈

    黄啊码:啪,写出来,别飞了

    你:来啦,来啦

    select * from user_info where user_age not in(10,11,12,15)

    黄啊码:孺子可教也,不得不给你个赞啊,大聪明今天不错。

    学会使用通配符对数据条件进行复杂过滤。

    通配符

    我们要检索文本中包含某个词的所有数据,这里就需要使用通配符。通配符就是我们用来匹配值的一部分的特殊字符。这里我们需要使用到 LIKE 操作符。 

    如果我们想要匹配任意字符串出现的任意次数,需要使用(%)通配符。比如我们想要查找user_name中包含“三”字的数据都有哪些:

    select * from user_info where user_name like '%三'

    你:那如果我们想要找有关刘三姐这条数据呢,我们先把user_id=7改为刘三姐试试看:

    黄啊码:呜呼,数据呢???

    其实%用在前边表示前缀,用在后边表示后缀,所以我们查有关刘三姐这条数据,肯定是要变成

    那如果我们想要匹配单个字符,就需要使用下划线 (_) 通配符。(%)和(_)的区别在于,(%)代表一个或多个字符,而(_)只代表一个字符。 

    我们现在把刘三姐改成刘六三姐看看,然后我们只取有刘六三姐这条数据,怎么取呢,大聪明?

    你:啥?肯定是明媒正娶啊。

    黄啊码:啪,单身太久了,连学习都想着讨老婆了?好好听课,看着

    select * from user_info where user_name like '__三%';

    记得,因为前边是两个字,所以用两个_  看,这不就出来了吗?

    你:啊码威武霸气!

    黄啊码:少拍马屁,不好好学习,如果没有钱,以后看你怎么明媒正娶。

    你:谨听啊码之言。

    黄啊码:是吗?今天的课后作业来了:如果where后边有and和or,哪个先执行?

    你:回去再说,告辞!

    总结

    今天啊码对 SQL 语句中的 WHERE 子句进行了讲解,你可以使用比较运算符、逻辑运算符和通配符这三种方式对检索条件进行过滤。

    比较运算符是对数值进行比较,不同的 DBMS 支持的比较运算符可能不同,你需要事先查阅相应的 DBMS 文档。通配符可以让我们对文本类型的字段进行模糊查询,不过检索的代价也是很高的,通常都需要用到全表扫描,所以效率很低。只有当 LIKE 语句后面不用通配符,并且对字段进行索引的时候才不会对全表进行扫描,这个等后边我们深入学习后再讲数据库查询如何优化。

    好了,今天的课程学到这里,有问题的留个言,别忘了一键三连,下次我们还会再见!

    我是黄啊码,码字的码,退。。。退。。。退。。。朝! 

  • 相关阅读:
    IntelliJ IDEA 插件推荐
    这年头谁还不会抓包,WireShark 抓包及常用协议分析送给你
    HDFS-FSCK命令输出
    【Android】-- 数据存储(二)(存储卡上读写文件、Application保存数据)
    计算机网络基础
    解析post requests方法返回的response信息
    在 Java 中,如何创建泛型对象与泛型数组
    推荐系统笔记(六):LightGCN代码实现
    SSM酒店管理系统的设计与实现毕业设计源码260839
    缓存更新策略中级总结
  • 原文地址:https://blog.csdn.net/TiaoZhanJi_Xian/article/details/125846350