关于常用 MYSQL 聚合函数,其他函数 ,类型转换,运算符 总结

/* 关于MYSQL 聚合函数,其他函数 ,类型转换,运算符 总结,*/


-- 1 运算符优先级 
/*
12.1.1. 操作符优先级
以下列表显示了操作符优先级的由低到高的顺序。排列在同一行的操作符具有相同的优先级。 


:=


||, OR, XOR


&&, AND


NOT


BETWEEN, CASE, WHEN, THEN, ELSE


=, <=>, >=, >, <=, <, <>, !=, IS, LIKE, REGEXP, IN


|


&


<<, >>


-, +


*, /, DIV, %, MOD


^


- (一元减号), ~ (一元比特反转)


!


BINARY, COLLATE
*/




比较特别的:


1. :=赋值运算符,这与MSSQL中的=赋值一样,在MYSQL中 =运算符还是一个比较运算。
 
在MYSQL中 SELECT 1=2 返回是 0 布尔值,在MSSQL中 则是语法错误。


2. CASE WHEN THEN ELSE  
# 在MYSQL 中 CASE WHEN THEN ELSE 语句 可以写一些MSSQL 不能写的表达式 操作。


3. <=> NULL 比较运算符 在MSSQL 中只能是IS /IS NOT NULL,ISNULL 判断 


4. >> << 多了跟前台语言一样的位移运算符。




5. 表达式使用问题 
SET @a=1 在MYSQL 中可以这样使用(他会自动推断类型,有点像现在编程语言中的var变量类型),但是MSSQL 必须先声明@a的变量类型,我觉得这样比较好。
SELECT @a:=1 用SELECT 必须这么赋值。








-- 2.控制流程函数 
IF(expr1,expr2,expr3) 
# 如果 expr1 是TRUE (expr1 <> 0 and expr1 <> NULL),则 IF()的返回值为expr2; 否则返回值则为 expr3。IF() 的返回值为数字值或字符串值,具体情况视其所在语境而定
# 在MSSQL 中没有 这个函数,只能用CASE WHEN 代替 ,IF关键字 是判断流程的,这个IF函数跟前台的三值逻辑IIF函数一样。


IFNULL(expr1,expr2) 
# 假如expr1 不为 NULL,则 IFNULL() 的返回值为 expr1; 否则其返回值为 expr2。IFNULL()的返回值是数字或是字符串,具体情况取决于其所使用的语境。
# 这个函数 跟MSSQL 中的ISNULL 一样的


NULLIF(expr1,expr2) 
# 如果expr1 = expr2  成立,那么返回值为NULL,否则返回值为 expr1。这和CASE WHEN expr1 = expr2 THEN NULL ELSE expr1 END相同。
# 此函数也跟MSSQL 一样。




-- 3.其他函数
-- 加解密函数 
AES_ENCRYPT(str,key_str) , AES_DECRYPT(crypt_str,key_str) 
# 这些函数允许使用官方AES进行加密和数据加密 (高级加密标准 ) 算法, 即以前人们所熟知的 “Rijndael”。 
# 保密关键字的长度为128比特,不过你可以通过改变源而将其延长到 256 比特。我们选择了 128比特的原因是它的速度要快得多,且对于大多数用途而言这个保密程度已经够用。


DECODE(crypt_str,pass_str) 
# 使用 pass_str 作为密码,解密加密字符串 crypt_str, crypt_str 应该是由ENCODE()返回的字符串。 


ENCODE(str,pass_str) 
# 使用pass_str 作为密码,解密 str 。 使用DECODE()解密结果。




DES_DECRYPT(crypt_str[,key_str])  DES_ENCRYPT(str[,(key_num|key_str)]) 
使用DES_ENCRYPT()加密一个字符串。若出现错误,这个函数会返回 NULL。


注意,这个函数只有当MySQL在SSL 的支持下配置完毕时才会运作。请参见5.8.7节,“使用安全连接”. 


假如没有给定 key_str 参数,  DES_DECRYPT() 会首先检查加密字符串的第一个字节, 从而确定用来加密原始字符串的DES密码关键字数字,
之后从DES关键字文件中读取关键字从而解密信息。为使其运行,用户必须享有 SUPER 特权。可以选择--des-KEY-file服务器指定关键字文件。


假如你向这个函数传递一个key_str 参数,该字符串被用作解密信息的关键字。


若 crypt_str 参数看起来不是一个加密字符串, MySQL 会返回给定的 crypt_str。 




OLD_PASSWORD(str) 
当PASSWORD()的执行变为改善安全性时,OLD_PASSWORD()会被添加到 MySQL。OLD_PASSWORD()返回从前的PASSWORD()执行值( 4.1之前),
同时允许你为任何4.1 之前的需要连接到你的5.1 版本MySQL服务器前客户端设置密码,从而不至于将它们切断。请参见5.7.9节,“MySQL 4.1中的密码哈希处理”。 


PASSWORD(str) 
从原文密码str 计算并返回密码字符串,当参数为 NULL 时返回 NULL。这个函数用于用户授权表的Password列中的加密MySQL密码存储


mysql> SELECT PASSWORD('badpwd');


-> '7f84554057dd964b'


PASSWORD() 加密是单向的 (不可逆 )。




SHA1 SHA MD5 等 加密函数。




# 加密解密函数 在MSSQL 中是2005以上版本提供的,而且更为丰富。有对称和非对称的加密方式。  










-- 信息函数
1 .CHARSET() 返回 字符集。
2. COLLATION() 返回排序方式,在MSSQL中相当于是排序规则。
3. CONNECTION_ID()  返回当前连接的ID,在MSSQL中的话可以通过动态管理对象查询相关的东西。
4. CURRENT_USER(),USER();SYSTEM_USER(),SESSION_USER() -- 太多重复了。
# 返回当前话路被验证的用户名和主机名组合。这个值符合确定你的存取权限的MySQL 账户。在被指定SQL SECURITY DEFINER特征的存储程序内, CURRENT_USER() 返回程序的创建者。
# CURRENT_USER()的值可以和USER()的值有所不同。如果权限不够 则可能CURRENT_USER 只返回主机名。
5. DATABASE() 返回当前数据库名 在MSSQL 中更丰富 关于DB的属性 DB_NAME DB_ID DATABASEPROPERTY 等相关的函数。
6. FOUND_ROWS() 

/* A SELECT语句可能包括一个 LIMIT 子句,用来限制服务器返回客户端的行数。在有些情况下,需要不用再次运行该语句而得知在没有LIMIT 时到底该语句返回了多少行。为了知道这个行数, 包括在SELECT 语句中选择  SQL_CALC_FOUND_ROWS ,随后调用 FOUND_ROWS() :


mysql> SELECT SQL_CALC_FOUND_ROWS * FROM tbl_name


   -> WHERE id > 100 LIMIT 10;


mysql> SELECT FOUND_ROWS();


第二个 SELECT返回一个数字,指示了在没有LIMIT子句的情况下,第一个SELECT返回了多少行 (若上述的 SELECT语句不包括 SQL_CALC_FOUND_ROWS 选项,则使用LIMIT 和不使用时,FOUND_ROWS() 可能会返回不同的结果)。 */

7. 
LAST_INSERT_ID() LAST_INSERT_ID(expr) 
/* 自动返回最后一个INSERT或 UPDATE 问询为 AUTO_INCREMENT列设置的第一个 发生的值。


mysql> SELECT LAST_INSERT_ID();


-> 195


产生的ID 每次连接后保存在服务器中。这意味着函数向一个给定客户端返回的值是该客户端产生对影响AUTO_INCREMENT列的最新语句第一个 AUTO_INCREMENT值的。这个值不能被其它客户端影响,即使它们产生它们自己的 AUTO_INCREMENT值。这个行为保证了你能够找回自己的 ID 而不用担心其它客户端的活动,而且不需要加锁或处理。 


假如你使用一个非“magic”值来更新某一行的AUTO_INCREMENT 列,则LAST_INSERT_ID() 的值不会变化(换言之, 一个不是 NULL也不是 0的值)。


重点: 假如你使用单INSERT语句插入多个行,  LAST_INSERT_ID() 只返回插入的第一行产生的值。其原因是这使依靠其它服务器复制同样的 INSERT语句变得简单。*/
# 在MSSQL 中 返回自增ID 的方式 有三种 函数,各自针对的级别不一样。
/*
@@IDENTITY、SCOPE_IDENTITY 和 IDENT_CURRENT 是相似的函数,因为他们都返回插入到表的 IDENTITY 列的最后一个值。
@@IDENTITY 和 SCOPE_IDENTITY 可以返回当前会话中的所有表中生成的最后一个标识值。但是,SCOPE_IDENTITY 只在当前作用域内返回值,而 @@IDENTITY 不限于特定的作用域。
在2005以后可以用 INSERT OUTPUT 返回值更为稳妥。
*/


8. ROW_COUNT() 
# ROW_COUNT()返回被前面语句升级的、插入的或删除的行数。 这个行数和 mysql 客户端显示的行数及 mysql_affected_rows() C API 函数返回的值相同。
# 此函数 在MSSQL 中是@@rowcount

9.  VERSION(); 返回版本住处。 在MSSQL中 @@VERSION 全局变量。


10. UUID () 返回全球唯一标识 符,与 MSSQL NEWID()一样。


-- 聚合函数 


比较特别的有 
1.
GROUP_CONCAT(expr) 
该函数返回带有来自一个组的连接的非NULL值的字符串结果。其完整的语法如下所示:  


GROUP_CONCAT([DISTINCT] expr [,expr ...]


    [ORDER BY {unsigned_integer | col_name | expr}


[ASC | DESC] [,col_name ...]]


    [SEPARATOR str_val])


# 最常用 可以实现 聚合累加字符串 值,但是在MSSQL中2000以前只能自己写自定义函数,在2005以后可以用FOR XML 表达式来实现

其他 一些 MAX MIN COUNT SUM 还有一些数学统计函数 基本都类似。




-- CONVERT ,CAST 显式转换。
关于隐式转换 MYSQL 没有 类型优先级说明,不过大致应该也类似 MSSQL 中的
显示转换的话 MSSQL 中也是这两种函数。

CAST(expr AS TYPE), CONVERT(expr,TYPE) , CONVERT(expr USING transcoding_name) 
CAST() 和CONVERT() 函数可用来获取一个类型的值,并产生另一个类型的值。 


这个类型 可以是以下值其中的 一个:  


BINARY[(N)] 
CHAR[(N)] 
DATE 
DATETIME 
DECIMAL 
SIGNED [INTEGER] 
TIME 
UNSIGNED [INTEGER] 

-- 在MSSQL 中 CAST 是类似 的,不过TYPE 则不一样,比如可以转成 你可以写的任意类型,只要能转的过去。
-- 在MSSQL 中 CONVERT 则带有 一个 转换的格式 标志,比如时间的格式 代号,还有 金额,浮点 转成字符的 代号,




-- 总体来说 MYSQL 函数 比起MSSQL 来说 有些比较优秀,但是缺少很多 关于元数据的函数,还有一些其他函数

相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页