程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> 關於MYSQL數據庫 >> MySQL操作符學習筆記

MySQL操作符學習筆記

編輯:關於MYSQL數據庫

發現許多MySQL的基礎知識掌握不是很牢固,手頭一本《SQL必知必會》,就參照它,另外再自己做一些擴展學習吧。

    以下基本來源手冊:。作為筆記而記錄吧。

==========================================================

    除非在文檔編制中對一個函數或操作符另有指定的情況外,一個包含NULL 的表達式通常產生一個NULL 值。

    在默認狀態下, 在函數和緊隨其後的括號之間不得存在空格。這能幫助  MySQL 分析程序區分一些同函數名相同的函數調用以及表或列。不過,函數自變量周圍允許有空格出現。

    可以通過選擇--sql-mode=IGNORE_SPACE來打開MySQL服務器的方法使服務器接受函數名後的空格。 個人客戶端程序可通過選擇MySQL_real_connect()的CLIENT_IGNORE_SPACE 實現這一狀態。在以上兩種情況中, 所有的函數名都成為保留字。請參見5.3.2節,“SQL服務器模式”. 

    MySQL按照以下規則進行數值比較: 

以下是引用片段:
若有一個或兩個參數為 NULL,除非NULL-safe <=> 等算符,則比較運算的結果為NULL。

若同一個比較運算中的兩個參數都是字符串,則按照字符串進行比較。

若兩個參數均為整數,則按照整數進行比較。 

十六進制值在不需要作為數字進行比較時,則按照二進制字符串進行處理。

假如參數中的一個為 TIMESTAMP 或 DATETIME 列,而其它參數均為常數, 則在進行比較前將常數轉為 timestamp。這樣做的目的是為了使ODBC的進行更加順利。 注意,這不適合IN()中的參數!為了更加可靠,在進行對比時通常使用完整的 datetime/date/time字符串。

在其它情況下,參數作為浮點數進行比較。  

在默認狀態下,字符串比較不區分大小寫,並使用現有字符集(默認為cp1252 Latin1,同時對英語也適合)。

為了進行比較,可使用CAST()函數將某個值轉為另外一種類型。 使用CONVERT()將字符串值轉為不同的字符集

    注意,在將一個字符串列同一個數字進行比較時, MySQL 不能使用列中的索引進行快速查找。假如str_col 是一個編入索引的字符串列,則在以下語句中,索引不能執行查找功能:

以下是代碼片段:
SELECT * FROM tbl_name WHERE str_col=1;

    其原因是許多不同的字符串都可被轉換為數值 1: '1'、 ' 1'、 '1a'、 ……

    以下記錄一些我沒見過或不熟悉的操作符:

    IS boolean_value IS NOT boolean_value

    根據一個布爾值來檢驗一個值,在這裡,布爾值可以是TRUE、FALSE或UNKNOWN。 

以下是代碼片段:
MySQL> SELECT 1 IS TRUE, 0 IS FALSE, NULL IS UNKNOWN;
        -> 1, 1, 1
MySQL> SELECT 1 IS NOT UNKNOWN, 0 IS NOT UNKNOWN, NULL IS NOT UNKNOWN;
        -> 1, 1, 0

    IS NULL IS NOT NULL

    檢驗一個值是否為 NULL。

以下是代碼片段:
MySQL> SELECT 1 IS NULL, 0 IS NULL, NULL IS NULL;
        -> 0, 0, 1
MySQL> SELECT 1 IS NOT NULL, 0 IS NOT NULL, NULL IS NOT NULL;
        -> 1, 1, 0

    為了能夠順利的使用ODBC 程序工作,在使用IS NULL時,MySQL支持一下額外特性:

    在一個值產生後,立即運行一個以下格式的語句,從而找到最新AUTO_INCREMENT 值的所在行:

以下是代碼片段:
SELECT * FROM tbl_name WHERE auto_col IS NULL

    當設置SQL_AUTO_IS_NULL=0時,這項操作無法運行。請參見13.5.3節,“SET語法”。

   對於命名為NOT NULL 的DATE 和DATETIME列,可通過使用如下的 語句找到特定日期 '0000-00-00':

以下是代碼片段:
SELECT * FROM tbl_name WHERE date_column IS NULL

    運行這一步需要使用一些 ODBC 應用軟件,因為 ODBC本身不支持 一個 '0000-00-00'的時間值。 

    expr BETWEEN min AND max

    假如expr大於或等於 min 且expr 小於或等於max, 則BETWEEN 的返回值為1,或是0。若所有參數都是同一類型,則上述關系相當於表達式   (min <= expr AND expr <= max)。其它類型的轉換根據本章開篇所述規律進行,且適用於3種參數中任意一種。  

以下是代碼片段:
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,1);
        -> 1
MySQL> SELECT COALESCE(NULL,NULL,NULL);
        -> NULL

    GREATEST(value1,value2,...)

    當有2或多個參數時,返回值為最大(最大值的)參數。比較參數所依據的規律同LEAST()相同。

以下是代碼片段:
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'

    在沒有自變量為NULL的情況下,GREATEST()的返回值為NULL。

    ISNULL(expr)

    如expr 為NULL,那麼ISNULL() 的返回值為 1,否則返回值為 0。 

以下是代碼片段:
MySQL> SELECT ISNULL(1+1);
        -> 0
MySQL> SELECT ISNULL(1/0);
        -> 1

    使用= 的NULL 值對比通常是錯誤的。

    ISNULL() 函數同 IS NULL比較操作符具有一些相同的特性。請參見有關IS NULL 的說明。

    INTERVAL(N,N1,N2,N3,...)

    假如N < N1,則返回值為0;假如N < N2 等等,則返回值為1;假如N 為NULL,則返回值為 -1 。所有的參數均按照整數處理。為了這個函數的正確運行,必須滿足 N1 < N2 < N3 < ……< Nn 。其原因是使用了二分查找(極快速)。

以下是代碼片段:
MySQL> SELECT INTERVAL(23, 1, 15, 17, 30, 44, 200);
        -> 3
MySQL> SELECT INTERVAL(10, 1, 10, 100, 1000);
        -> 2
MySQL> SELECT INTERVAL(22, 23, 30, 44, 200);
        -> 0

    LEAST(value1,value2,...)

    在有兩個或多個參數的情況下, 返回值為最小 (最小值) 參數。用一下規則將自變量進行對比:
假如返回值被用在一個 INTEGER 語境中,或是所有參數均為整數值,則將其作為整數值進行比較。

    假如返回值被用在一個 REAL語境中,或所有參數均為實值,則 將其作為實值進行比較。 
假如任意一個參數是一個區分大小寫的字符串,則將參數按照區分大小寫的字符串進行比較。 
在其它情況下,將參數作為區分大小寫的字符串進行比較。

    假如任意一個自變量為NULL,則 LEAST()的返回值為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'

    注意,上面的轉換規則在一些邊界情形中會產生一些奇特的結果:   

以下是代碼片段:
MySQL> SELECT CAST(LEAST(3600, 9223372036854775808.0) as SIGNED);
        -> -9223372036854775808

    發生這種情況的原因是MySQL在整數語境中讀取9223372036854775808.0。整數表示法不利於保存數值,因此它包括一個帶符號整數。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved