一、操作符优先级
展示了所有操作符的执行优先级,从高到低,同一行中的操作符优先级相同,相同优先级的情况下则从左到右执行
如果想改变优先级执行顺序,则可以使用括号:
mysql> SELECT 1 2*3; #7 mysql> SELECT (1 2)*3;#9
二、对比操作符
#对比操作符的执行结果为true,false,null三种 Between A and B #代表检查值是否在A和B之间 Coalesce() #代表返回第一个非Null的值 = #代表相等操作符 > #代表大于操作符 >= #代表大于等于操作符 Greatest() #代表返回最大的值 In() #代表检查值是否在一系列的值之中 Interval() #代表返回比第一个参数小的参数的位置 is/is not #代表检查值是否与布尔值相同/不同 Is not null #代表检查值是否是非NULL Is null #代表检查值是否是NULL Isnull() #代表检查参数是NULL Least() #代表返回最小的参数 < #代表小于操作符 <= #代表小于等于操作符 Like #代表字符匹配 Not between A and B #代表检查值是否不在A和B的范围之内 !=/<> #代表不等于操作符 Not in() #代表检查值是否不在一系列值的当中 Not like #代表检查值是否不匹配 Strcmp() #对比两个字符串 ----------------------------------------------------------------------------------------- #=号对比操作符 mysql> SELECT 1 = 0; #0 mysql> SELECT ‘0‘ = 0; #1 mysql> SELECT ‘0.0‘ = 0; #1 mysql> SELECT ‘0.01‘ = 0; #0 mysql> SELECT ‘.01‘ = 0.01; #1 #<>/!=号对比操作符 mysql> SELECT ‘.01‘ <> ‘0.01‘; #1 mysql> SELECT .01 <> ‘0.01‘; #0 mysql> SELECT ‘zapp‘ <> ‘zappp‘; #1 #<=小于等于对比操作符 mysql> SELECT 0.1 <= 2; #1 #<小于对比操作符 mysql> SELECT 2 < 2; #0 #>=大于等于对比操作符 mysql> SELECT 2 >= 2; #1 #>大于对比操作符 mysql> SELECT 2 > 2; #0 #is操作符 mysql> SELECT 1 IS TRUE, 0 IS FALSE, NULL IS UNKNOWN; #1, 1, 1 #Is not操作符 mysql> SELECT 1 IS NOT UNKNOWN, 0 IS NOT UNKNOWN, NULL IS NOT UNKNOWN; #1, 1, 0 #Is null对比操作符 mysql> SELECT 1 IS NULL, 0 IS NULL, NULL IS NULL; #0, 0, 1 #Is not null对比操作符 mysql> SELECT 1 IS NOT NULL, 0 IS NOT NULL, NULL IS NOT NULL; #1, 1, 0 #Expr between min and max对比操作符 #相当于min <= expr AND expr <= max mysql> SELECT 2 BETWEEN 1 AND 3, 2 BETWEEN 3 and 1; #1, 0 mysql> SELECT 1 BETWEEN 2 AND 3; #0 mysql> SELECT ‘b‘ BETWEEN ‘a‘ AND ‘c‘; #1 mysql> SELECT 2 BETWEEN 2 AND ‘3‘; #1 mysql> SELECT 2 BETWEEN 2 AND ‘x-3‘; #0 #expr NOT BETWEEN min AND max #相当于NOT (expr BETWEEN min AND max) #COALESCE(value,...)对比操作符 #返回第一个非NULL的值,如果没有非null值,则返回NULL mysql> SELECT COALESCE(NULL,2); #2 mysql> SELECT COALESCE(NULL,NULL,NULL); #NULL #GREATEST(value1,value2,...) #返回其中最大的值 mysql> SELECT GREATEST(2,0); #2 mysql> SELECT GREATEST(34.0,3.0,5.0,767.0); #767.0 mysql> SELECT GREATEST(‘B‘,‘A‘,‘C‘); #‘C‘ #expr IN (value,...)对比操作符 #当expr值能在values中找到,则返回1,否则返回0 mysql> SELECT 2 IN (0,3,5,7); #0 mysql> SELECT ‘wefwf‘ IN (‘wee‘,‘wefwf‘,‘weg‘); #1 mysql> SELECT (3,4) IN ((1,2), (3,4)); #1 mysql> SELECT (3,4) IN ((1,2), (3,5)); #0 #expr NOT IN (value,...)对比操作符 #Isnull(expr)操作符 #如果expr是null,则返回1,否则返回0 mysql> SELECT ISNULL(1 1); #0 mysql> SELECT ISNULL(1/0); #1 #LEAST(value1,value2,...) #返回最小值,如果其中有值为null,则返回null mysql> SELECT LEAST(2,0); #0 mysql> SELECT LEAST(34.0,3.0,5.0,767.0); #3.0 mysql> SELECT LEAST(‘B‘,‘A‘,‘C‘); #‘A‘
三、逻辑操作符
逻辑操作符返回1 (TRUE), 0 (FALSE), 或者NULL
#NOT, !逻辑操作符代表非操作 mysql> SELECT NOT 10; #0 mysql> SELECT NOT 0; #1 mysql> SELECT NOT NULL; #NULL mysql> SELECT ! (1 1); #0 mysql> SELECT ! 1 1; #1 #And,&&逻辑操作符 mysql> SELECT 1 AND 1; #1 mysql> SELECT 1 AND 0; #0 mysql> SELECT 1 AND NULL; #NULL mysql> SELECT 0 AND NULL; #0 mysql> SELECT NULL AND 0; #0 #Or, ||逻辑操作符 mysql> SELECT 1 OR 1; #1 mysql> SELECT 1 OR 0; #1 mysql> SELECT 0 OR 0; #0 mysql> SELECT 0 OR NULL; #NULL mysql> SELECT 1 OR NULL; #1 #Xor逻辑操作符 mysql> SELECT 1 XOR 1; #0 mysql> SELECT 1 XOR 0; #1 mysql> SELECT 1 XOR NULL; #NULL mysql> SELECT 1 XOR 1 XOR 1; #1
四、分配操作符
分配操作符是指赋值操作
mysql> SELECT @var1, @var2; #NULL, NULL mysql> SELECT @var1 := 1, @var2; #1, NULL mysql> SELECT @var1, @var2; #1, NULL mysql> SELECT @var1, @var2 := @var1; #1, 1 mysql> SELECT @var1, @var2; #1, 1 mysql> SELECT @var1:=COUNT(*) FROM t1; #如果是4 mysql> SELECT @var1; #4 #":="操作符也可以用在update等语句 mysql> SELECT @var1; #4 mysql> SELECT * FROM t1; #1, 3, 5, 7 mysql> UPDATE t1 SET c1 = 2 WHERE c1 = @var1:= 1; mysql> SELECT @var1; #1 mysql> SELECT * FROM t1; #2, 3, 5, 7 #=操作符在两种情况下会被认为是赋值操作,而其他情况下会认为是对比操作符 #在set语句中,=操作符会被认为是赋值操作 mysql> set @a=1; mysql> select @a; #1 #在update语句中的set子句中,=操作符会被认为是赋值操作
五、流程控制函数
流程控制函数包含以下四种函数
#语法格式 CASE value WHEN [compare_value] THEN result [WHEN [compare_value] THEN result ...] [ELSE result] END #当value等于compare_value时,则返回result,否则返回else里的result,如果没有else子句则返回null mysql> SELECT CASE 1 WHEN 1 THEN ‘one‘ WHEN 2 THEN ‘two‘ ELSE ‘more‘ END; #‘one‘ #语法格式 CASE WHEN [condition] THEN result [WHEN [condition] THEN result ...] [ELSE result] END #当第一个condition满足时,则返回result,否则返回else里的result,如果没有else子句时则返回null mysql> SELECT CASE WHEN 1>0 THEN ‘true‘ ELSE ‘false‘ END; #‘true‘ mysql> SELECT CASE BINARY ‘B‘ WHEN ‘a‘ THEN 1 WHEN ‘b‘ THEN 2 END; #NULL --------------------------------------------------------------------------------------------------------- IF(expr1,expr2,expr3) #当expr1为1/true时,则返回expr2,否则返回expr3 mysql> SELECT IF(1>2,2,3); #3 mysql> SELECT IF(1<2,‘yes‘,‘no‘); #‘yes‘ mysql> SELECT IF(STRCMP(‘test‘,‘test1‘),‘no‘,‘yes‘); #select STRCMP(‘test‘,‘test1‘);==>-1 #‘no‘ --------------------------------------------------------------------------------------------------------- IFNULL(expr1,expr2) #当expr1为非null时,则返回expr1,否则返回expr2 mysql> SELECT IFNULL(1,0); #1 mysql> SELECT IFNULL(NULL,10); #10 mysql> SELECT IFNULL(1/0,10); #10 mysql> SELECT IFNULL(1/0,‘yes‘); #‘yes‘ --------------------------------------------------------------------------------------------------------- NULLIF(expr1,expr2) #当expr1等于expr2时,则返回null,否则返回expr1 mysql> SELECT NULLIF(1,1); #NULL mysql> SELECT NULLIF(1,2); #1
六、字符串函数
6.1、ASCII(str)
返回str字符串中最左边字符的ascii码值,如果是空串则返回0,如果str是null则返回null
mysql> SELECT ASCII(‘2‘); #50 mysql> SELECT ASCII(2); #50 mysql> SELECT ASCII(‘dx‘); #100 mysql> SELECT ASCII(‘d‘); #100
6.2、CHAR(N,... [USING charset_name])
将括号中的N转化成ascii码对应的字符,返回这些字符组成的字符串,其中的null会被忽略
mysql> SELECT CHAR(77,121,83,81,‘76‘); #‘MySQL‘ -> ‘MySQL‘ mysql> SELECT CHAR(77,77.3,‘77.3‘); #‘MMM‘ -> ‘MMM‘ mysql> SELECT CHARSET(CHAR(X‘65‘)), CHARSET(CHAR(X‘65‘ USING utf8)); ---------------------- --------------------------------- | CHARSET(CHAR(X‘65‘)) | CHARSET(CHAR(X‘65‘ USING utf8)) | ---------------------- --------------------------------- | binary | utf8 | ---------------------- ---------------------------------
6.3、CHAR_LENGTH(str)
返回字符串的字符长度
mysql> select char_length(‘mysql‘); ---------------------- | char_length(‘mysql‘) | ---------------------- | 5 | ---------------------- 1 row in set (0.00 sec)
6.4、CONCAT(str1,str2,...)
返回括号里所有参数字符串连接在一起,当其中有参数为NULL时则返回NULL
mysql> SELECT CONCAT(‘My‘, ‘S‘, ‘QL‘); #‘MySQL‘ mysql> SELECT CONCAT(‘My‘, NULL, ‘QL‘); #NULL mysql> SELECT CONCAT(14.3); #‘14.3‘
6.5、CONCAT_WS(separator,str1,str2,...)
返回以第一个参数为分隔符的连接后的一个字符串,当有参数为NULL时则null被忽略
mysql> SELECT CONCAT_WS(‘,‘,‘First name‘,‘Second name‘,‘Last Name‘); #‘First name,Second name,Last Name‘ mysql> SELECT CONCAT_WS(‘,‘,‘First name‘,NULL,‘Last Name‘); #‘First name,Last Name‘
6.6、INSERT(str,pos,len,newstr)
将str中从pos位置开始后的len个字符替换成newstr字符串
mysql> SELECT INSERT(‘Quadratic‘, 3, 4, ‘What‘); #‘QuWhattic‘ mysql> SELECT INSERT(‘Quadratic‘, -1, 4, ‘What‘); #‘Quadratic‘ mysql> SELECT INSERT(‘Quadratic‘, 3, 100, ‘What‘); #‘QuWhat‘
6.7、INSTR(str,substr)
返回str字符串中第一个出现substr字符串的位置
mysql> SELECT INSTR(‘foobarbar‘, ‘bar‘); #4 mysql> SELECT INSTR(‘xbar‘, ‘foobar‘); #0
6.8、LEFT(str,len)
返回str字符串中从左边开始的len个长度的字符
mysql> SELECT LEFT(‘foobarbar‘, 5); #‘fooba‘
6.9、LENGTH(str)
返回str字符串的byte字节长度
mysql> SELECT LENGTH(‘text‘); #4