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

2022-07-22 10:42:54 浏览数 (3)

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

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

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

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

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

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

这是今天的目录

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

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

比较运算符

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

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

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

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

你:我只见过》答:略。

黄啊码:。。。

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

你:啊码,什么是DBMS?

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

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

代码语言:javascript复制
select * from user_info where user_age > 11

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

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

你:一般叫做第三者

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

你:啊码,I love chinese

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

代码语言:javascript复制
select * from user_info where user_age BETWEEN 10 and 15

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

逻辑运算符

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

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

代码语言:javascript复制
select * from user_info where user_age>=10 and user_age<=15

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

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

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

你:好吧。。。

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

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

代码语言:javascript复制
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,哈哈哈哈

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

你:来啦,来啦

代码语言:javascript复制
select * from user_info where user_age not in(10,11,12,15)

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

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

通配符

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

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

代码语言:javascript复制
select * from user_info where user_name like '%三'

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

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

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

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

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

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

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

代码语言:javascript复制
select * from user_info where user_name like '__三%';

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

你:啊码威武霸气!

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

你:谨听啊码之言。

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

你:回去再说,告辞!

总结

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

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

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

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

0 人点赞