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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 掌握这些数据筛选技能比你学python还有用

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

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

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

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

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

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

这是今天的

    1. 目录
      学会使用 WHERE 子句,如何使用比较运算符对字段的数值进行比较筛选;
      如何使用逻辑运算符,进行多条件的过滤;
      学会使用通配符对数据条件进行复杂过滤。

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

    比较运算符

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

    image.gif编辑

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

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

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

    你:我只见过》答:略。

    黄啊码:。。。

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

    你:啊码,什么是DBMS?

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

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

    select * from user_info where user_age > 11

    image.gif编辑

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

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

    你:一般叫做第三者

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

    你:啊码,I love chinese

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

    select * from user_info where user_age BETWEEN 10 and 15

    image.gif编辑

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

    逻辑运算符

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

    image.gif编辑

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

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

    image.gif编辑

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

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

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

    你:好吧。。。

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

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

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

    image.gif编辑

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

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

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

    好啦,接下来说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)

    image.gif编辑

    你:我去,这也行。

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

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

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

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

    你:来啦,来啦

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

    image.gif编辑

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

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

    通配符

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

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

    select * from user_info where user_name like '%三'

    image.gif编辑

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

    image.gif编辑

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

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

    image.gif编辑

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

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

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

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

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

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

    image.gif编辑

    你:啊码威武霸气!

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

    你:谨听啊码之言。

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

    你:回去再说,告辞!

    总结

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

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

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

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

    相关实践学习
    基于CentOS快速搭建LAMP环境
    本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
    全面了解阿里云能为你做什么
    阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
    目录
    相关文章
    |
    1天前
    |
    前端开发 关系型数据库 MySQL
    SpringBoot-----从前端更新数据到MySql数据库
    SpringBoot-----从前端更新数据到MySql数据库
    8 1
    |
    1天前
    |
    easyexcel Java 关系型数据库
    厉害了!12秒将百万数据通过EasyExcel导入MySQL数据库中
    厉害了!12秒将百万数据通过EasyExcel导入MySQL数据库中
    8 1
    |
    1天前
    |
    前端开发 easyexcel 关系型数据库
    EasyExcel处理Mysql百万数据的导入导出案例,秒级效率,拿来即用!
    EasyExcel处理Mysql百万数据的导入导出案例,秒级效率,拿来即用!
    12 1
    |
    1天前
    |
    Python 索引 C语言
    Python3从零基础到入门(2)—— 运算符-3
    Python3从零基础到入门(2)—— 运算符
    |
    1天前
    |
    关系型数据库 MySQL 分布式数据库
    如何将数据从MySQL迁移到PolarDB?
    【5月更文挑战第13天】如何将数据从MySQL迁移到PolarDB?
    17 0
    |
    1天前
    |
    NoSQL 测试技术 API
    Python 入门指南(七)(4)
    Python 入门指南(七)
    9 0
    |
    1天前
    |
    测试技术 程序员 数据库
    Python 入门指南(七)(3)
    Python 入门指南(七)
    7 0
    |
    1天前
    |
    存储 设计模式 程序员
    Python 入门指南(七)(2)
    Python 入门指南(七)
    9 1
    |
    1天前
    |
    XML 算法 uml
    Python 入门指南(七)(1)
    Python 入门指南(七)
    8 0
    |
    1天前
    |
    机器学习/深度学习 存储 算法
    Python 入门指南(六)(4)
    Python 入门指南(六)
    7 1