mysql08-常见运算符
1、运算符主要有四大类分别是:
- 算术运算符
- 算术运算符用于各类数值运算。
- 算术运算符包括:加(+)、减(-)、乘(*)、除(/)、求余(或称模运算,%) 。
- 比较运算符
- 比较运算符用于比较运算。
- 比较运算符包括:大于(>)、小于(<)、等于(=)、大于等于(>=)、小于等于(<=)、不等于(!=),以及IN、BETWEEN AND、IS NULL、GREATEST、LEAST、LIKE、REGEXP等。
- 逻辑运算符
- 逻辑运算符的求值所得结果均为1(TRUE)或0(FALSE).
- 逻辑运算符包括:辑非(NOT或者!)、逻辑与(AND或者&&)、逻辑或(OR或者||)、逻辑异或(XOR) 。
- 位操作运算符
- 位操作运算符参与运算的操作数按二进制位进行运算。
- 位操作运算符包括:位与(&)、位或(1)、位非(~)、位异或(^)、左移(<<)、右移(>>)。
2、MySQL中如何使用特殊字符?
- 诸如单引号(')、双引号(")、反斜线(\)等符号,在MySQL中不能直接输入使用,否则会产生意料之外的结果。
- 在MySQL中,这些特殊字符称为转义字符,在输入时需要以反斜线符号('\')开头,即在使用单引号和双引号时应分别输入(\')、(\"),输入反斜线时应该输入(\\)。其他特殊字符还有同车符(\r)、换行符(\n)、制表符(\tab)、退格符(\b)等。
- 在向数据库中插入特殊字符时,一定要进行转义。
1、算术运算符
- MySQL中的算术运算符
- 在数学运算时,除数为0的除法是没有意义的,因此除法运算中的除数不能为0。如果被0除,则返回结果为NULL。
示例:
--创建表 create table tb_ss( a int ); mysql> insert into tb_ss(a) values(100); --插入数据 mysql> select a,a+3,a-3,a*3,a/3,a%3 from tb_ss; --查看数据 +------+------+------+------+---------+------+ | a | a+3 | a-3 | a*3 | a/3 | a%3 | +------+------+------+------+---------+------+ | 100 | 103 | 97 | 300 | 33.3333 | 1 | +------+------+------+------+---------+------+
2、比较运算符
- 一个比较运算符的结果总是1、0或者是NULL。
- 比较运算符经常在SELECT的查询条件子句中使用,用来查询满足指定条件的记录。
- MySQL中的比较运算符
1、等于运算符(=)
- 等号(=)用来判断数字、字符串和表达式是否相等。如果相等返回值为1,否则返回值为0。
- 数值比较时有如下规则:
- 若两个参数都是整数,则按照整数进行比较。
- 若两个参数都是字符串,则按照字符串进行比较。
- 若一个字符串和数字进行相等比较,则MySQL可以自动将字符串转换为数字。
- 若有一个或两个参数为NULL,则比较运算的结果为NULL。
示例:
mysql> select 2=2,'2'=2,'abc'='abc',2=1,'abc'=2,1+3=2+2,null=null,null=1; +-----+-------+-------------+-----+---------+---------+-----------+--------+ | 2=2 | '2'=2 | 'abc'='abc' | 2=1 | 'abc'=2 | 1+3=2+2 | null=null | null=1 | +-----+-------+-------------+-----+---------+---------+-----------+--------+ | 1 | 1 | 1 | 0 | 0 | 1 | NULL | NULL | +-----+-------+-------------+-----+---------+---------+-----------+--------+
2、安全等于运算符(<=>)
- “<=>”操作符和“=”操作符执行相同的比较操作。
- “<=>”可以用来判断NULL值。在两个操作数均为NULL时,其返回值是1,而不是NULL;而当一个操作数是NULL时,其返回值是0而不是NULL。
示例:
mysql> select 2<=>2,'2'<=>2,'abc'<=>'abc',2<=>1,'abc'<=>2,1+3<=>2+2,null<=>null,null<=>1; +-------+---------+---------------+-------+-----------+-----------+-------------+----------+ | 2<=>2 | '2'<=>2 | 'abc'<=>'abc' | 2<=>1 | 'abc'<=>2 | 1+3<=>2+2 | null<=>null | null<=>1 | +-------+---------+---------------+-------+-----------+-----------+-------------+----------+ | 1 | 1 | 1 | 0 | 0 | 1 | 1 | 0 | +-------+---------+---------------+-------+-----------+-----------+-------------+----------+
3、不等于运算符(<>或者!=)
- “<>”或者“!=”用于判断数字、字符串、表达式不相等的判断。如果不相等,返回值为1;否则返回值为0。
- “<>”和“!=”运算符不能用于判断空值NULL。
示例:
mysql> select 2!=2,'2'!=2,'abc'!='abc',2!=1,'abc'!=2,1+3!=2+2,null!=null,null!=1; +------+--------+--------------+------+----------+----------+------------+---------+ | 2!=2 | '2'!=2 | 'abc'!='abc' | 2!=1 | 'abc'!=2 | 1+3!=2+2 | null!=null | null!=1 | +------+--------+--------------+------+----------+----------+------------+---------+ | 0 | 0 | 0 | 1 | 1 | 0 | NULL | NULL | +------+--------+--------------+------+----------+----------+------------+---------+
4、小于或等于运算符(<=)
- “<=”用来判断左边的操作数是否小于或者等于右边的操作数。如果小于或者等于,返回值为1,否则返回值为0。
- “<=”不能用于判断空值NULL。
示例:
mysql> select 2<=2,'2'<=2,'abc'<='abc',2<=1,'abc'<=2,1+3<=2+2,null<=null,null<=1; +------+--------+--------------+------+----------+----------+------------+---------+ | 2<=2 | '2'<=2 | 'abc'<='abc' | 2<=1 | 'abc'<=2 | 1+3<=2+2 | null<=null | null<=1 | +------+--------+--------------+------+----------+----------+------------+---------+ | 1 | 1 | 1 | 0 | 1 | 1 | NULL | NULL | +------+--------+--------------+------+----------+----------+------------+---------+
5、小于运算符(<)
- “<”运算符用来判断左边的操作数是否小于右边的操作数。如果小于,返回值为1,否则返回值为0。
- “<”不能用于判断空值NULL
示例:
mysql> select 2<2,'2'<2,'abc'<'abc',2<1,'abc'<2,1+3<2+2,null<null,null<1; +-----+-------+-------------+-----+---------+---------+-----------+--------+ | 2<2 | '2'<2 | 'abc'<'abc' | 2<1 | 'abc'<2 | 1+3<2+2 | null<null | null<1 | +-----+-------+-------------+-----+---------+---------+-----------+--------+ | 0 | 0 | 0 | 0 | 1 | 0 | NULL | NULL | +-----+-------+-------------+-----+---------+---------+-----------+--------+
6、大于或等于运算符(>=)
- “>=”运算符用来判断左边的操作数是否大于或者等于右边的操作数。如果大于或者等于,返回值为1,否则返回值为0。
- “>=”不能用于判断空值NULL。
示例:
mysql> select 2>=2,'2'>=2,'abc'>='abc',2>=1,'abc'>=2,1+3>=2+2,null>=null,null>=1; +------+--------+--------------+------+----------+----------+------------+---------+ | 2>=2 | '2'>=2 | 'abc'>='abc' | 2>=1 | 'abc'>=2 | 1+3>=2+2 | null>=null | null>=1 | +------+--------+--------------+------+----------+----------+------------+---------+ | 1 | 1 | 1 | 1 | 0 | 1 | NULL | NULL | +------+--------+--------------+------+----------+----------+------------+---------+
7、大于运算符(>)
- “>”运算符用来判断左边的操作数是否大于右边的操作数。如果大于,返回值为1,否则返回值为0。
- “>”不能用于判断空值NULL。
示例:
mysql> select 2>2,'2'>2,'abc'>'abc',2>1,'abc'>2,1+3>2+2,null>null,null>1; +-----+-------+-------------+-----+---------+---------+-----------+--------+ | 2>2 | '2'>2 | 'abc'>'abc' | 2>1 | 'abc'>2 | 1+3>2+2 | null>null | null>1 | +-----+-------+-------------+-----+---------+---------+-----------+--------+ | 0 | 0 | 0 | 1 | 0 | 0 | NULL | NULL | +-----+-------+-------------+-----+---------+---------+-----------+--------+
8、IS NULL和IS NOT NULL
- IS NULL和ISNULL检验一个值是否为NULL。如果为NULL,返回值为1,否则返回值为0。
- IS NOT NULL检验一个值是否为非NULL。如果是非NULL,返回值为1,否则返回值为0。
示例:
mysql> SELECT NULL IS NULL, ISNULL (NULL), ISNULL (10), 10 IS NOT NULL; +--------------+---------------+-------------+----------------+ | NULL IS NULL | ISNULL (NULL) | ISNULL (10) | 10 IS NOT NULL | +--------------+---------------+-------------+----------------+ | 1 | 1 | 0 | 1 | +--------------+---------------+-------------+----------------+ mysql> SELECT NULL IS NOT NULL, 10 IS NOT NULL; +------------------+----------------+ | NULL IS NOT NULL | 10 IS NOT NULL | +------------------+----------------+ | 0 | 1 | +------------------+----------------+
9、BETWEEN AND
- 基本语法格式如下:
- 假如expr大于或等于min且小于或等于max,则BETWEEN的返回值为1,否则返回值为0。
expr BETWEEN min AND max
示例:
mysql> SELECT 4 BETWEEN 2 AND 5, 4 BETWEEN 4 AND 6,12 BETWEEN 9 AND 10; +-------------------+-------------------+---------------------+ | 4 BETWEEN 2 AND 5 | 4 BETWEEN 4 AND 6 | 12 BETWEEN 9 AND 10 | +-------------------+-------------------+---------------------+ | 1 | 1 | 0 | +-------------------+-------------------+---------------------+ mysql> SELECT 'x' BETWEEN 'f' AND 'g', 'b' BETWEEN 'a' AND 'c'; +-------------------------+-------------------------+ | 'x' BETWEEN 'f' AND 'g' | 'b' BETWEEN 'a' AND 'c' | +-------------------------+-------------------------+ | 0 | 1 | +-------------------------+-------------------------+
10、LEAST
- 在有两个或多个参数的情况下,返回最小值。假如任意一个自变量为NULL,则LEAST()的返回值为NULL。
- 当参数中是整数或者浮点数时,LEAST将返回其中最小的值。
- 当参数为字符串时,返回字母表中顺序最靠前的字符。
- 当比较值列表中有NULL时,不能判断大小,返回值为NULL。
- 基本语法格式如下:
LEAST(值1, 值2, ..., 值n) --值n表示参数列表中有n个值
示例:
mysql> SELECT least(2, 0), least(20.0,3.0,100.5), least('a','c','b'), least(10, NULL); +-------------+-----------------------+--------------------+-----------------+ | least(2, 0) | least(20.0,3.0,100.5) | least('a','c','b') | least(10, NULL) | +-------------+-----------------------+--------------------+-----------------+ | 0 | 3.0 | a | NULL | +-------------+-----------------------+--------------------+-----------------+
11、GREATEST
- 当有两个或多个参数时,返回值为最大值。假如任意一个自变量为NULL,则GREATEST()的返回值为NULL。
- 当参数中是整数或者浮点数时,GREATEST将返回其中最大的值。
- 当参数为字符串时,返回字母表中顺序最靠后的字符。
- 当比较值列表中有NULL时,不能判断大小,返回值为NULL。
- 基本语法格式如下:
GREATEST(值1, 值2, ..., 值n) --值n表示参数列表中有n个值
示例:
mysql> SELECT greatest(2, 0), greatest(20.0,3.0,100.5), greatest('a','c','b'), greatest(10, NULL); +----------------+--------------------------+-----------------------+--------------------+ | greatest(2, 0) | greatest(20.0,3.0,100.5) | greatest('a','c','b') | greatest(10, NULL) | +----------------+--------------------------+-----------------------+--------------------+ | 2 | 100.5 | c | NULL | +----------------+--------------------------+-----------------------+--------------------+
12、IN和NOT IN
- IN运算符用来判断操作数是否为IN列表中的其中一个值。如果是,返回值为1,否则返回值为0。
- NOT IN运算符用来判断表达式是否为IN列表中的其中一个值。如果不是,返回值为1,否则返回值为0。
示例:
mysql> SELECT 2 IN (1,3,5,'thks'), 'thks' IN (1,3,5,'thks'); +---------------------+--------------------------+ | 2 IN (1,3,5,'thks') | 'thks' IN (1,3,5,'thks') | +---------------------+--------------------------+ | 0 | 1 | +---------------------+--------------------------+ mysql> SELECT 2 NOT IN (1,3,5,'thks'), 'thks' NOT IN (1,3,5,'thks'); +-------------------------+------------------------------+ | 2 NOT IN (1,3,5,'thks') | 'thks' NOT IN (1,3,5,'thks') | +-------------------------+------------------------------+ | 1 | 0 | +-------------------------+------------------------------+
13、LIKE
- LIKE运算符用来匹配字符串。
- 基本语法格式如下:
- 如果expr满足匹配条件,则返回值为1(TRUE);如果不匹配,则返回值为0(FALSE)。
- 若expr或匹配条件中任何一个为NULL,则结果为NULL。
expr LIKE 匹配条件
- LIKE运算符在进行匹配时,可以使用两种通配符:
- (1) '%',匹配任何数目的字符(包括0个字符)。
- (2) '_',只能匹配一个字符。
示例:
mysql> SELECT 'stud' LIKE 'stud', 'stud' LIKE 'stu_', 'stud' LIKE '%d', 'stud' LIKE 'st__', 'stud' LIKE '_tu_', 'stud' LIKE '_t_d', 'stud' LIKE NULL; +--------------------+--------------------+------------------+--------------------+--------------------+--------------------+------------------+ | 'stud' LIKE 'stud' | 'stud' LIKE 'stu_' | 'stud' LIKE '%d' | 'stud' LIKE 'st__' | 'stud' LIKE '_tu_' | 'stud' LIKE '_t_d' | 'stud' LIKE NULL | +--------------------+--------------------+------------------+--------------------+--------------------+--------------------+------------------+ | 1 | 1 | 1 | 1 | 1 | 1 | NULL | +--------------------+--------------------+------------------+--------------------+--------------------+--------------------+------------------+
14、REGEXP
- REGEXP运算符用来匹配字符串。
- 基本语法格式如下:
- 如果expr满足匹配条件,返回1;如果不满足,则返回0。
- 若expr或匹配条件任意一个为NULL,则结果为NULI。
expr REGEXP 匹配条件 --‘匹配条件’只要是expr的子串,就返回1
- REGEXP运算符在进行匹配时,常用的有下面几种通配符:
- (1) '^'匹配以该字符后面的字符开头的字符串。
- (2) '$'匹配以该字符前面的字符结尾的字符串。
- (3) '.'匹配任意一个单字符。
- (4) '[...]'匹配在方括号内的任意一个字符。
- 为了命名字符的范围,"[a-2]"匹配任意字母,"[0-9]"匹配任意数字。
- 例如, "[abc]"匹配"a"、"b"或"c"
- (5) '*'匹配零个或多个在它前面的字符。
- 例如, "x*"匹配任意数量的'x,字符,"[0-9]*”匹配任意数量的数字,而“.*”匹配任意数量的任意字符。
示例:
mysql> SELECT 'ssky' REGEXP '^s', 'ssky' REGEXP 'y$', 'ssky' REGEXP 's', 'ssky' REGEXP '[as]'; +--------------------+--------------------+-------------------+----------------------+ | 'ssky' REGEXP '^s' | 'ssky' REGEXP 'y$' | 'ssky' REGEXP 's' | 'ssky' REGEXP '[as]' | +--------------------+--------------------+-------------------+----------------------+ | 1 | 1 | 1 | 1 | +--------------------+--------------------+-------------------+----------------------+
3、逻辑运算符
- 在SQL中,所有逻辑运算符的求值所得结果均为TRUE,FALSE或NULL。在MysQL中,它们体现为1(TRUE)、0(FALSE)和NULL。
- MySQL中的逻辑运算符
1、NOT或者!
- 逻辑非运算符NOT或者!表示:
- 当操作数为0时,所得值为1;
- 当操作数为非零值时,所得值为0;
- 当操作数为NULL时,所得的返回值为NULL。
示例:
mysql> SELECT NOT 10, NOT (1-1), NOT -5, NOT NULL, NOT 1 + 1; +--------+-----------+--------+----------+-----------+ | NOT 10 | NOT (1-1) | NOT -5 | NOT NULL | NOT 1 + 1 | +--------+-----------+--------+----------+-----------+ | 0 | 1 | 0 | NULL | 0 | +--------+-----------+--------+----------+-----------+ mysql> SELECT ! 10, ! (1-1), ! -5, ! NULL, ! 1 + 1; +------+---------+------+--------+---------+ | ! 10 | ! (1-1) | ! -5 | ! NULL | ! 1 + 1 | +------+---------+------+--------+---------+ | 0 | 1 | 0 | NULL | 1 | +------+---------+------+--------+---------+
2、AND或者&&
- 逻辑与运算符AND或者&&表示: #(两个操作数,有0为0;无0有null为null;其他为1)
- 当所有操作数均为非零值、并且不为NULL时,结果为1;
- 当一个或多个操作数为0时,所得结果为0;
- 其余情况返回值为NULL。
示例:
mysql> SELECT 1 AND -1, 1 AND 0, 1 AND NULL, 0 AND NULL; +----------+---------+------------+------------+ | 1 AND -1 | 1 AND 0 | 1 AND NULL | 0 AND NULL | +----------+---------+------------+------------+ | 1 | 0 | NULL | 0 | +----------+---------+------------+------------+ mysql> SELECT 1 && -1, 1 && 0, 1 && NULL, 0 && NULL; +---------+--------+-----------+-----------+ | 1 && -1 | 1 && 0 | 1 && NULL | 0 && NULL | +---------+--------+-----------+-----------+ | 1 | 0 | NULL | 0 | +---------+--------+-----------+-----------+
3、OR或者||
- 逻辑或运算符OR或者||表示: #(两个操作数,有1为1;双0为0;其他为null)
- 当两个操作数均为非NULL值,且任意一个操作数为非零值时,结果为1,否则结果为0。
- 当有一个操作数为NULL,且另一个操作数为非零值时,则结果为1,否则结果为NULL。
- 当两个操作数均为NULL时,则所得结果为NULL。
示例:
mysql> SELECT -1 OR 0, 1 OR NULL, 1 OR 2, 1 OR -1 OR 0, NULL OR NULL, 0 OR NULL, 0 OR 0; +---------+-----------+--------+--------------+--------------+-----------+--------+ | -1 OR 0 | 1 OR NULL | 1 OR 2 | 1 OR -1 OR 0 | NULL OR NULL | 0 OR NULL | 0 OR 0 | +---------+-----------+--------+--------------+--------------+-----------+--------+ | 1 | 1 | 1 | 1 | NULL | NULL | 0 | +---------+-----------+--------+--------------+--------------+-----------+--------+ mysql> SELECT -1 || 0, 1 || NULL, 1 || 2, 1 || -1 || 0, NULL || NULL, 0 || NULL, 0 || 0; +---------+-----------+--------+--------------+--------------+-----------+--------+ | -1 || 0 | 1 || NULL | 1 || 2 | 1 || -1 || 0 | NULL || NULL | 0 || NULL | 0 || 0 | +---------+-----------+--------+--------------+--------------+-----------+--------+ | 1 | 1 | 1 | 1 | NULL | NULL | 0 | +---------+-----------+--------+--------------+--------------+-----------+--------+
4、XOR
- 逻辑异或运算符XOR表示: #(两个操作数,有null为null;不同为1;相同为0。)
- 当任意一个操作数为NULL时,返回值为NULL。
- 对于非NULL的操作数,如果两个操作数都是非0值或者都是0值,则返回结果为0。
- 如果一个为0值,另一个为非0值,返回结果为1。
示例:
mysql> SELECT 1 XOR 1, 0 XOR 0, 1 XOR 0, 1 XOR NULL, 1 XOR 1 XOR 1; +---------+---------+---------+------------+---------------+ | 1 XOR 1 | 0 XOR 0 | 1 XOR 0 | 1 XOR NULL | 1 XOR 1 XOR 1 | +---------+---------+---------+------------+---------------+ | 0 | 0 | 1 | NULL | 1 | +---------+---------+---------+------------+---------------+
4、位运算符
- MySQL中的位运算符
5、运算符的优先级
- 运算符优先级由低到高排列