遇见SQL|下课看着文档走回实验室,我重新拾起了遗忘的SQL运算符


SQL门下那些可爱的运算符

    • 一、算术运算符
    • 二、比较运算符(本篇重点)
      • 比较运算符运用场景
      • 常见的比较运算符
        • 1、等于运算符
        • 2、安全运算符
        • (一)、IS NULL \ IS NOT NULL \ ISNULL
        • (二)、获得 最小值 LEAST\ 最大值GREATEST
        • (三)、BETWEEN 条件1 AND 条件2
        • (四)、IN \ NOT IN
        • (五)、LIKE:模糊查询
        • 六、REGEXP \ RLIKE
    • 三、逻辑运算符(作为了解)
    • 四、位运算符(作为了解)
    • 运算符的优先级
    • 总结
    • 小练习

一、算术运算符 算术运算符整体的使用是比较简单清晰的。没有太多的花里胡哨的玩法。
遇见SQL|下课看着文档走回实验室,我重新拾起了遗忘的SQL运算符
文章图片

系统的介绍一下它们吧~
一、作用和种类
算术运算符主要用于数学运算,其可以连接运算符前后的两个数值或表达式,对数值或表达式进行加(+)、减(-)、乘(*)、除(/)和取模(%)运算
二、需要注意的点
和常规理解中的算术运算符的使用是差不多,注意事项也差不多,比如除法的时候,分母不能为0(否则运算结果为NULL)。唯一需要注意的是这些运算符和NULL进行运算的时候,都返回NULL
三、算术运算符总汇表
遇见SQL|下课看着文档走回实验室,我重新拾起了遗忘的SQL运算符
文章图片

好啦~,现在就几乎没有可爱的算术运算符的事儿啦
遇见SQL|下课看着文档走回实验室,我重新拾起了遗忘的SQL运算符
文章图片

二、比较运算符(本篇重点) 比较运算符运用场景
比较运算符用来对表达式左边的操作数和右边的操作数进行比较,比较的结果为真则返回1,比较的结果为假则返回0,其他情况则返回NULL。
比较运算符经常被用来作为SELECT查询语句的条件来使用,返回符合条件的结果记录。
常见的比较运算符
用于比较的运算符其实蛮多的,我就草率的将它们分为两类了吧
一、符号类型的
遇见SQL|下课看着文档走回实验室,我重新拾起了遗忘的SQL运算符
文章图片

看着和咱们正常观念里的比较运算符是差不多。下面我就系统的演示一下它们,顺带标注一下需要小心留意的地方。
遇见SQL|下课看着文档走回实验室,我重新拾起了遗忘的SQL运算符
文章图片

1、等于运算符
顾名思义,直接比较等号两边的值是否相等。常规来说,数值和数值比较,字符串和字符串比较确实是这么搞的。
需要注意的是当出现数值和字符串比较的时候:
遇见SQL|下课看着文档走回实验室,我重新拾起了遗忘的SQL运算符
文章图片

其次需要知道的是字符串和字符串的比较是基于ANSI码,可以通过这篇文章了解一下基本的编码的联系和区别
排队取快递这会我理清楚了各种编码集
最后需要注意的是NULL值的事儿
遇见SQL|下课看着文档走回实验室,我重新拾起了遗忘的SQL运算符
文章图片

2、安全运算符
对于安全运算符,它和等于运算符在大体是差不多的,最大的区别依旧是对NULL值的处理上。
遇见SQL|下课看着文档走回实验室,我重新拾起了遗忘的SQL运算符
文章图片

其作用了,可以通过安全等于运算符查询出表中为NULL的数据有哪些。

其他的大于、小于、小于等于这些运算符就和咱们常规理解中的是一致的,只是比较的基于ANSI码
二、字母类的
遇见SQL|下课看着文档走回实验室,我重新拾起了遗忘的SQL运算符
文章图片

这里一大堆是最容易搞混淆的,可以粗糙的结合着它们的英文含义记忆理解呀
遇见SQL|下课看着文档走回实验室,我重新拾起了遗忘的SQL运算符
文章图片

(一)、IS NULL \ IS NOT NULL \ ISNULL
它们的效果,就如同它们直白的中文翻译一样。直接用于查询表某个数据值为NULL的信息有哪些。
遇见SQL|下课看着文档走回实验室,我重新拾起了遗忘的SQL运算符
文章图片

容易让人产生疑惑的应该是IS NULLISNULLISNULL严格来说不是运算符的,它是函数,这里只是因为它的功能相似,顺带提及它
遇见SQL|下课看着文档走回实验室,我重新拾起了遗忘的SQL运算符
文章图片

(二)、获得 最小值 LEAST\ 最大值GREATEST
这个也是比较容易理解的,也是直接用中文翻译记忆就好。 l e a s t least least的意思是最小, g r e a t e s t greatest greatest的意思是最大。比较的原则依旧是基于ANSI码
遇见SQL|下课看着文档走回实验室,我重新拾起了遗忘的SQL运算符
文章图片

(三)、BETWEEN 条件1 AND 条件2
BETWEEN ... AND 的玩法就比较简单了,注意逻辑上不要写错,比如查询的时候写成查询大于等于8000,小于等于6000。
遇见SQL|下课看着文档走回实验室,我重新拾起了遗忘的SQL运算符
文章图片

(四)、IN \ NOT IN
查询在集合中或者不在集合中的数据,主要的作用领域是用于查询离散的数据
遇见SQL|下课看着文档走回实验室,我重新拾起了遗忘的SQL运算符
文章图片

(五)、LIKE:模糊查询
需要掌握的两个通配符: % 和 _

% 的意思:对于%a%而言,代表的意思是a前面可能有0个或者多个字符,以及a后面了,可能会有零个或者多个字符。
举一反三的思考一下,倘若是%a,代表的意思是a前面可能有0个或者多个字符

_的意思:一个下划线_代表的是一个不确定的字符
这是LIKE 和 % 的玩法:
遇见SQL|下课看着文档走回实验室,我重新拾起了遗忘的SQL运算符
文章图片

下面演示一下LIKE 和下划线 _的玩法:
遇见SQL|下课看着文档走回实验室,我重新拾起了遗忘的SQL运算符
文章图片

六、REGEXP \ RLIKE 它两是正则表达式的内容,我暂时不想去碰,我想后面写python爬虫的文章时,再详细的阐述它们
遇见SQL|下课看着文档走回实验室,我重新拾起了遗忘的SQL运算符
文章图片

三、逻辑运算符(作为了解)
逻辑运算符的作用:逻辑运算符主要用来判断表达式的真假,在MySQL中,逻辑运算符的返回结果为1、0或者NULL
逻辑运算符的总汇:
遇见SQL|下课看着文档走回实验室,我重新拾起了遗忘的SQL运算符
文章图片

我对逻辑运算符的理解
我暂时还没有见到它们在SQL中玩出什么花来(可能也是因为我无知,不知有没有大佬指点一下了,我会及时补上的(狗头保命))
遇见SQL|下课看着文档走回实验室,我重新拾起了遗忘的SQL运算符
文章图片

我现在遇到的设计逻辑运算符的主要也仅限于判断上叭。

先系统的介绍一下它们,心中有个概念。搞算法的同学可能对逻辑运算符比较熟了,它们和下文的位运算联合起来,确实可以玩出点花来~
遇见SQL|下课看着文档走回实验室,我重新拾起了遗忘的SQL运算符
文章图片

1、逻辑非运算符:逻辑非(NOT或!)
表示当给定的值为0时返回1;当给定的值为非0值时返回0;当给定的值为NULL时,返回NULL。
2、逻辑与运算符 逻辑与(AND或&&)
逻辑与运算符是当给定的所有值均为非0值,并且都不为NULL时,返回1;
当给定的一个值或者多个值为0时则返回0;否则返回NULL。
3、逻辑或运算符 逻辑或(OR或||)
逻辑或运算符是当给定的值都不为NULL,并且任何一个值为非0值时,则返回1,否则返回0;
当一个值为NULL,并且另一个值为非0值时,返回1,否则返回NULL;
当两个值都为NULL时,返回NULL。
4、逻辑异或运算符 逻辑异或(XOR)
逻辑异或运算符是当给定的值中任意一个值为NULL时,则返回NULL;
如果两个非NULL的值都是0或者都不等于0时,则返回0;
如果一个值为0,另一个值不为0时,则返回1。
大致浏览一遍的小伙伴应该能get到了,SQL中的它们和咱们在计算机基础课中学到的是差不多的,只是依旧需要考虑NULL 的问题
四、位运算符(作为了解)
位运算的效果:
位运算符是在二进制数上进行计算的运算符。位运算符会先将操作数变成二进制数,然后进行位运算,最后将计算结果从二进制变回十进制数。
位运算总汇:
遇见SQL|下课看着文档走回实验室,我重新拾起了遗忘的SQL运算符
文章图片

我感觉在SQL中,位运算也作为一个了解吧,我也不太能get到它的作用。钱学森先生说过,有剑不用和没剑是两回事,先大致拿捏上。
遇见SQL|下课看着文档走回实验室,我重新拾起了遗忘的SQL运算符
文章图片

系统的介绍一下它们,老规矩,不用刻意记忆,扫一遍,有个印象就好,倘若确实要用了,再翻出这里的内容看一下就能明白原理的
1、&(位与)
上下运算,按照与的运算规则:0&0=0 ;0&1=0;1&1=1
例如:
170 & 75 结果为:0000 0000 0000 1010
再把二进制转换为十进制:10
2、~(位非)
运算法则:0变1,1变0
例如:
~170 的二进制:1111 1111 0101 0101 十进制为:-171
~75 的二进制:1111 1111 1011 0100 十进制为:-76
3、|(位或)
上下运算,按照与的运算规则:0&0=0 ;0&1=1;1&1=1
例如:
170 & 75 结果为:0000 0000 1110 1011
再把二进制转换为十进制:235
4、^(位异或)
上下运算,按照与的运算规则:0&0=0 ;0&1=1;1&1=0
例如:
170 & 75 结果为:0000 0000 1110 0001
再把二进制转换为十进制:225
5、按位右移运算符
按位右移(>>)运算符将给定的值的二进制数的所有位右移指定的位数。右移指定的位数后,右边低位的数值被移出并丢弃,左边高位空出的位置用0补齐。

6、按位左移运算符
*按位左移(<<)运算符将给定的值的二进制数的所有位左移指定的位数。左移指定的位数后,左边高位的数值被移出并丢弃,右边低位空出的位置用0补齐。

运算符的优先级
运算符优先级的这个表,也是不用刻意去背的,我观念里,除了可爱考试中会遇到优先级的题目,在实际使用的时候可以使用括号解决的。老规矩,过一遍,有印象就很好了。
遇见SQL|下课看着文档走回实验室,我重新拾起了遗忘的SQL运算符
文章图片

总结
1、首先对于常规概率中的=、<、>这些和咱们观念里也在使用的运算符,要特别注意遇到SQL中特有的NULL值的时候,返回的结果大多都是NULL,因此孕育而生了安全运算符<=>来处理这个事儿

2、着重掌握那些是英文单词的比较运算符,结合着中文意思进行理解还是不错的

3、逻辑运算符和位运算作为了解就好啦~,当做自己的内功。以及优先级拿来对付考试就可以了。
走到实验室啦~,看一会小王子
遇见SQL|下课看着文档走回实验室,我重新拾起了遗忘的SQL运算符
文章图片

小练习
想加深一下理解或者加深一下记忆的小伙伴可以从这个链接中获取几道习题练练手喔,都比较简单的,相信大家七八分钟就能秒了它们
遇见SQL|下课看着文档走回实验室,我重新拾起了遗忘的SQL运算符
文章图片

注:我不知道gitee是怎么回事儿,有时候我上传上去的内容第一打开会显示什么违法了吧啦吧啦,所以特别说明一下,都是正规内容,F5刷新一下就好喔~
遇见SQL|下课看着文档走回实验室,我重新拾起了遗忘的SQL运算符
文章图片

点击这里获取习题
点击获取对应的sql文件
【遇见SQL|下课看着文档走回实验室,我重新拾起了遗忘的SQL运算符】点击这里获取参考代码

    推荐阅读