mysql 聚合函数内比较运算符_关于常用 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 來說 有些比較優秀,但是缺少很多 關于元數據的函數,還有一些其他函數
總結
以上是生活随笔為你收集整理的mysql 聚合函数内比较运算符_关于常用 MYSQL 聚合函数,其他函数 ,类型转换,运算符 总结...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java什么是网络接口_java接口和类
- 下一篇: mysql链路跟踪工具_SkyWalki