mysql 运算符

目录

1、运算符简介

2、算术运算符

3、比较运算符

4、逻辑运算符

5、位运算

6、运算符的优先级

 7、比较运算符的运算结果只能是0和1吗?

8、十进制的数也可以直接使用位运算符吗?


运算符是用来连接表达式中各个操作数的符号,其作用是用来指明对操作数所进行的运算。MySQL 数据库支持使用运算符。通过运算符,可以使数据库的功能更加强大。而且,可以更加灵活的使用表中的数据。MySQL运算符包括4类,分别是算术运算符、比较运算符、逻辑运算符和位运算符。

1、运算符简介

当数据库中的表定义完成后,表中的数据代表的意义就已经定下来了。通过使用运算符进行运算,可以得到包含另一层意义的数据。例如,学生表中存在一个birth字段,这个字段是表示学生的出生年份。如果,用户现在希望查找这个学生的年龄。而学生表中只有出生年份,没有字段表示年龄。这就需要进行运算,用当前的年份减去学生的出生年份,这就可以计算出学生的年龄了。

可以知道,MySQL运算符可以指明对表中数据所进行的运算,以便得到用户希望得到的数据。这样可以使MySQL 数据库更加灵活。MySQL运算符包括算术运算符、比较运算符、逻辑运算符和位运算符等4类。

  • 算术运算符:包括加、减、乘、除和求余这几种算数运算符。这类运算符主要是用在数值计算上。其中,求余运算也称为模运算。
  • 比较运算符:包括大于、小于、等于、不等于和为空等比较运算符。主要用于数值的比较、字符串的匹配等方面。尤其值得注意的是,LIKE、IN、BETWEEN AND和 IS NULL等都是比较运算符。还有用于使用正则表达式的REGEXP也是比较运算符。
  • 逻辑运算符:包括与、或、非和异或等逻辑运算。这种运算的结果只返回真值(1或true)和假值(0或false)。
  • 位运算符:包括按位与、按位或、按位取反、按位异或、按位左移和按位右移等位运算。这些运算都必须先数值变为二进制。然后在二进制数上进行操作的。 

!!!逻辑运算符和位运算符都有与、或和异或等操作。但是,位运算必须先把数值变成二进制类型,然后再进行按位操作。运算完成后,将这些二进制的值再变回其原来的类型,返回给用户。逻辑运算直接进行运算,结果只返回真值(1或true)和假值(О或false )。

2、算术运算符

算术运算符是MySQL中最常用的一类运算符.MySQL支持的算术运算符包括加、减、乘、除、求余。下面是各种算术运算符的符号、作用、表达式的形式。

加号(+)、减号(-)和乘号(*)可以同时运算多个操作数。除号(/)和求余运算符(%)也可以同时计算多个操作数,但是这两个符号计算多个操作数不太好。DIV()和MOD()这两个运算符只有两个参数。除法和求余的运算时,如果x2参数是0时,计算结果将是空值(NULL )。

下面将t1表中字段a的值进行加法、减法和乘法运算。计算结果显示如下:

下面将t1表中字段a的值进行除法和求余运算。计算结果显示如下:

进行除法和求余运算时,若操作数x2为0,不管操作数x1的值是什么,计算的结果将为空值(NULL)。

下面将除法和求余运输的操作数x2设置为0。计算结果显示如下:

 !!!除法运算和求余运算中,x2参数一定不能为0。如果x2参数为О时,除法运算和求余运算的结果都是NULL。而且,x2参数也不能是NULL。如果x2参数为NULL时,运算结果也会是NULL。因此,在使用除法运算和求余运算时,一定要注意x2参数的值是否合法.

3、比较运算符

比较运算符是查询数据时最常用的一类运算符。SELECT语句中的条件语句经常要使用比较运算符。通过这些比较运算符,可以判断表中的哪些记录是符合条件的。下面是各种比较运算符的符号、作用和表达式的形式,如表所示。

3.1 运算符"="

“=”可以用来判断数字、字符串和表达式等是否相等。如果相等,结果返回1;如果不相等,结果返回0。空值(NULL)不能使用“=”来判断。

下面是使用“=”的例子:

 

“=”可以用来判断两个字符是否相同,如果相同就返回1,否则返回0。判断字符时,数据库系统都是根据字符的ASCII码进行判断的。如果ASCII码相等,则表示这两个字符相同。如果ASCII码不相等,则表示两个字符不同。

3.2 运算符'<>'和'!='

 “<>”和“!=”可以用来判断数字、字符串、表达式等是否不相等。如果不相等,结果返回1。如果相等,结果返回0。这两个符号也不能用来判断空值(NULL)。

下面是使用“”和“!=”的例子:

 

3.3 运算符'<=>'

“<=>”的作用与“=”是一样的,也是用来判断操作数是否相等。不同的是,“<=>”可以用来判断NULL。

下面是使用“<=>”的例子:

3.4 运算符'>'

“>”用来判断左边的操作数是否大于右边的操作数。如果大于,返回1;如果不大于1,返回0。空值(NULL)不能使用“>”来判断。

下面是使用“>”的例子:


3.5 运算符'>='

“>=”用来判断左边的操作数是否大于或等于右边的操作数。如果大于或者等于,则返回1。如果小于,返回0。空值(NULL)不能使用“>=”来判断。

下面是使用“>=”的例子:

3.6 运算符'<' 

“<”用来判断左边的操作数是否小于右边的操作数。如果小于,返回1;如果不小于1,则返回0。空值(NULL)不能使用“<”来判断。

下面是使用“<”的例子:

 

3.7 运算符'<='

“<=”用来判断左边的操作数是否小于或等于右边的操作数。如果小于或者等于,返回1。如果大于,返回0。空值(NULL)不能使用“<=”来判断。

下面是使用“<=”的例子:

 

3.8 运算符'is null' 

 “IS NULL”用来判断操作数是否为空值(NULL)。操作数为NULL时,结果返回1;操作数不为NULL时,结果返回0。IS NOT NULL刚好与IS NULL相反。

下面是使用“IS NULL”和“IS NOT NULL”的例子:

“=”、“>”、“!= ”、“>”、“>=”、“<”和“<=”等操作数都不能用来判断空值(NULL )。一旦使用,结果将返回NULL。如果需要判断一个值是否为空值,可以使用“<=>”、IS NULL和IS NOT NULL来判断。NULL和‘NULL’是不一样的。后者表示一个有4个字母组成的字符串。

3.9 运算符“between and”

“BETWEEN AND”可以判断操作数是否落在某个取值范围内。在表达式 x1 BETWEEN m  AND n中,如果x1大于等于m,而且小于等于n,结果将返回1,如果不是,结果将返回0。

下面是使用“BETWEEN AND”的例子:

 

3.10 运算符'in' 

“IN”可以判断操作数是否落在某个集合中。表达式“ x1 IN(值1,值2,...值 n)”中,如果x1等于值1到值n中的任何一个值,结果将返回1。如果不是,结果将返回0。

下面是使用“IN”的例子:

3.11 运算符'like' 

“LIKE”用来匹配字符串。在表达式 x1 LIKE s1中,如果x1与字符串s1匹配,结果将返回1。如果不匹配,结果将返回0。

下面是使用“LIKE”的例子:

LIKE关键字经常和通配符“_”和“%”一起使用。“_”代表单个字符,“%”代表任意长度的字符。只配置字符串开头或者末尾的几个字符,可以使用“%”来替代字符串中不需要匹配的字符。这样就不用关心那些字符的个数,因为“%”可以匹配任意长度的字符。

3.12 运算符'regexp'

“REGEXP”也用来匹配字符串,但其是使用正则表达式进行匹配的。表达式“x1 REGEXP'匹配方式”中,如果x1满足匹配方式,结果将返回1。如果不满足,结果将返回0。

下面是使用“REGEXP”的例子:

使用REGEXP关键字可以匹配字符串,其使用方法非常灵活。REGEXP关键字经常与“^”、“$”和“.”一起使用。“^”用来匹配字符串的开始部分,如“AL”可以匹配任何以字母L开头的字符串。“S”用来匹配字符串的末尾部分。“、”用来代表字符串中的一个字符。

4、逻辑运算符

逻辑运算符用来判断表达式的真假。逻辑运算符的返回结果只有1和0。如果表达式是真,结果返回1。如果表达式是假,结果返回0。逻辑运算符又称为布尔运算符。MySQL中支持四种逻辑运算符。这四种逻辑运算符分别是与、或、非和异或。

4.1 与运算 

 “&&”或者AND表示与运算。所有操作数不为0且不为空值(NULL)时,结果返回1;存在任何一个操作数为0时,结果返回0;存在一个操作数为NULL且没有操作数为0时,结果返回NULL。

与运算符“&&”可以有多个操作数同时进行与运算,其基本形式为“x1&&x2&&...&&xn”。

下面是使用“&&”的例子:

结果显示,“-1&&2&&3”中没有值为О和 NULL,所以结果返回1;“0&&3”和“0&&NULL”中存在操作数为0,所以结果返回0;“3&&NULL”中存在操作数为NULL,且没有没有操作数为0,所以结果返回NULL。

与运算符AND可以有多个操作数同时进行与运算,其基本形式为x1 AND x2AND...AND xn。但是多操作数与AND之间要用空格隔开。

下面是使用“AND”的例子:

结果显示,“-1 AND 2 AND 3”中没有值为0和NULL,所以结果返回1;“0 AND 3”和“0 AND NULL”中存在操作数为0,所以结果返回0;“3 AND NULL”中存在操作数为NULL,且没有操作数为0,所以结果返回NULL。

只要与运算中存在操作数为0,则运算结果一定为0。如“3&&-1&&NULL&&0”中,尽管表达式中包含NULL和负数,但是结果由操作数О最终决定。如果操作数都是非0数,而且不包含NULL,那么结果返回1。如“-1&&-2&&-3&&0.3”中,尽管操作数包括负数和小数,结果依然是1。因为与运算时,负数和大于0的数都等价与1。

4.2 或运算

“II”或者OR表示或运算。所有操作数中存在任何一个操作数不为非0的数字时,结果返回1;如果操作数中不包含非0的数字,但包含NULL时,结果返回NULL;如果操作数中只有0时,结果返回0。或运算符“II”可以有多个操作数同时进行或运算,其基本形式为“x1|| x2 ||.….|| xn”。

下面是使用“II”的例子。

结果显示,“1 || -1 || NULL || 0”中尽管包含NULL和0,由于其中也包含1和-1这两个非0的数字,所以结果返回1:“3 || NULL”中包含数字3,所以结果也返回1;“0 || NULL”中只包含0和 NULL,所以结果返回NULL;“NULL || NULL”中只包含NULL,所以结果返回NULL;“0 || 10”中只有数字0,所以结果返回0。

或运算符OR可以有多个操作数同时进行或运算,其基木形式为x1 OR x2 OR...OR xn。

下面是使用“OR”的例子。

4.3 非运算符

“!”或者NOT表示非运算。通过非运算,将返回与操作数相反的结果。如果操作数是非0的数字,结果返回0;如果操作数是0,结果返回1;如果操作数是NULL,结果返回NULL。非运算符“!”只能有一个操作数进行非运算,其基本形式为“!x1”。

下面是使用“!”的例子。

非运算符NOT只能有一个操作数进行非运算,其基本形式为NOT x1.

下面是使用NOT的例子

4.4 异或运算

XOR表示异或运算。异或运算符XOR的基本形式为“x1 XOR x2”。只要其中任何一个操作数为NULL时,结果返回NULL;如果x1和x2都是非0的数字或者都是0时,结果返回0;如果x1和x2中一个是非o,另一个是0时,结果返回1。

下面是使用“XOR”的例子。

“3 XOR 2 XOR 0 XOR 1”中有多个操作数,计算时是从左到右依次计算的。先将“3 XOR 2”计算出来,将计算结果与0再进行计算,依次类推。

MySQL中进行异或运算时,所有大于-1小于1的数字都被视为逻辑0,其他数字被视为逻辑1。如果两个操作数同为逻辑0,或者同为逻辑1时,结果返回0。即逻辑相同时,返回0。如果两个操作数一个是逻辑0,另一个是逻辑1,结果返回1。即逻辑不同时,返回1。“0.3 XOR 3.3”返回的结果是1。因为0.3属于逻辑0,3.3属于逻辑1。

5、位运算

位运算符是在二进制数上进行计算的运算符。位运算会先将操作数变成二进制数,然后进行位运算,最后再将计算结果从二进制数变回十进制数。在MySQL中支持6种位运算符。这6种位运算符分别是按位与、按位或、按位取反、按位异或、按位左移和按位右移。

5.1 按位与

“&”表示按位与。进行该运算时,数据库系统会先将十进制的数转换为二进制的数。然后对应操作数的每个二进制位上进行与运算。1和1相与得1,与0相与得0。运算完成后再将二进制数变回十进制数。

下面是使用“&”的例子。

5的二进制数为101,6的二进制数为110。两个二进制数的对应位上进行与运算,得到的结果100。然后将二进制数100转换十进制数,结果即为4。在“5&6&7”中,先将“5&6”进行计算,得到结果为4。然后再将4与7进行按位与。7的二进制数为111。按位与的结果为110。转换为十进制就是4。

5.2 按位或

“|”表示按位或。将操作数化为二进制数后,每位都进行或运算。1和任何数进行或运算的结果都是1,0与0或运算的结果为0

下面是使用“|”的例子。

5的二进制数是101,6的二进制数是110。两个二进制数的对应位上进行或运算,得到的结果为111。然后将二进制数111转换十进制数,结果就是7了。"5|6|7”中,先将“5|6”进行计算,得到的结果为4。然后再将4与7进行按位或。7的二进制数为111。按位与的结果为111。转换为十进制即为7。

5.3 按位取反

“~”表示按位取反。将操作数化为二进制数后,每位都进行取反运算。1取反后变成0,0取反后变成1。

下面是使用“~”的例子。


对数字1进行按位取反后,结果变成了18446744073709551614。因为在MySQL中常量是8个字节,每个字节是8位,那么一个常量就是64位。数字1变成二进制数以后,是由64位构成的,最后一位是1,前面的63位是0。进行按位取反后,前63位的值是1,最后一位是0。这个二进制数最后转换为十进制数就是18446744073709551614。使用BIN(函数可以查看二进制数。下面使用BIN()函数来查看常数1取反结果的二进制数,结果显示如下: 

5.4 按位异或

“^”表示按位异或。将操作数化为二进制数后,每位都进行异或运算。相同的数异或之后结果是0,不同的数异或之后结果为1。

下面是使用“^”的例子。

5的二进制数是101,6的二进制数是110。按位异或之后结果为011。转换为十进制数就是3。

5.5 按位左移与按位右移

“<<”表示按位左移。"m<<n”表示m的二进制数向左移n位,右边补上n个0。例如,二进制数001左移1位后将变成0010。“>>”表示按位右移。“m>>n”表示m的二进制数向右移n位,左边补上n个0。二进制数011右移1位后变成001,最后一个1被移出去了,直接就不要了。

下面是使用“<<”和“>>”的例子。

5的二进制数为101,左移两位后变为10100。这个数转换为十进制数即为20。101右移两位后变为001,这个数转换为二进制数即为1。

!!!位运算都是在二进制数上进行的。用户输入的操作数可能是十进制数,数据库系统在进行位运算之前会将其转换为二进制数。等位运算完成后,再将这些数字转换回十进制数。而且,位运算都是对应位上运算,如数1的第一位只与数2的第一位进行运算,数1的第二位只与数2的第二位进行运算。

6、运算符的优先级

由于在实际应用中可能需要同时使用多个运算符。这就必须考虑运算符的运算顺序。到底谁先运算。谁后运算?MySQL的表达式都是从左到右开始运算,哪个运算符的优先级高?哪个运算符先进行计算?

下面列出了MySQL支持的所有运算符的优先级。按照表从上到下,优先级依次降低。同一行中的优先级相同。优先级相同时,表达式左边的运算符先运算。

 7、比较运算符的运算结果只能是0和1吗?

MySQL中,比较运算符是用来判断运算符两边的操作数的大小关系。例如a>b就是用来判断a是否大于b。如果大于,则返回true。如果不大于,则返回false。在 MySQL中,真(True)是用1来表示的,假(False)是用0来表示的。所以,比较运算符的运算结果只有0和1。不仅比较运算符是如此,逻辑运算符的运算结果也只有0和1。

8、十进制的数也可以直接使用位运算符吗?

在进行位运算时,数据库系统会先将所有的操作数转换为二进制数。然后将这些二进制数进行位运算,然后将这些运算结果转换为十进制数。所以,位运算符的操作数是十进制数。十进制数与二进制数之间的互换是数据库系统实现的。因此,位运算的操作数必须是十进制数,否则计算的结果就会是错误的。在使用位运算符时,如果操作数是二进制数、八进制数、十六进制数时,要先通过CONV()函数将操作数转换为十进制数。然后,才能进行相应的位运算。

  • 3
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值