前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【黄啊码】MySQL入门—5、掌握这些数据筛选技能比你学python还有用-2

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

作者头像
黄啊码
发布2022-09-09 15:29:28
3470
发布2022-09-09 15:29:28
举报

大家好!我是黄啊码,上节课我们将了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 语句后面不用通配符,并且对字段进行索引的时候才不会对全表进行扫描,这个等后边我们深入学习后再讲数据库查询如何优化。

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

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-07-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 比较运算符 
  • 逻辑运算符
  • 通配符
  • 总结
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档