本文要的主題就是MySQL比較運算符,也就是通過各類案例來看看其運行得到的結果是什麼,以及掌握其規則。
首先,我們看看比較運算符有哪些種類。
接下來我們就通過案例的案例的方式來逐一學習。
【1】等於運算符:=
「=」是用來判斷數字、字符串和表達式是否相等,如果相等,返回值為,否則返回值為0。
select 5=6,'9'=9,668=668,'luo'='luo',(2*3)=(4*5),NULL=NULL,0=NULL;
【結論】
若有一個兩個操作數為NULL,比較運算的結果就是NULL;若同一個比較運算符中兩個操作數都是字符串,則按照字符串進行比較;若同一個比較運算符中兩個操作數都是數值,則按照數值進行比較;若是一個數值和一個字符串進行比較,則MySQL自動將字符串轉化為數值;不管何種情況,「=」比較返回的確實只有1、0與NULL三類值。【2】安全等於運算符:<=>
「<=>」運算符在具備「=」所有功能的基礎上增加了判斷NULL值的功能。
select 5<=>6,'9'<=>9,668<=>668,'luo'<=>'luo',(2*3)<=>(4*5),NULL<=>NULL,0<=>NULL;
【結論】
「<=>」運算符確實具備「=」所有功能,返回值也是1、0與NULL;當兩個操作數均為NULL時,「<=>」運算符返回的結果為1,而不是NULL;當只有一個操作數為NULL時,「<=>」運算符返回的結果也不是NULL而是0。【3】不等於運算符:<>或!=
select 5<>6,'9'<>9,668<>668,'luo'<>'luo',(2*3)<>(4*5),NULL<>NULL,0<>NULL;select 5!=6,'9'!=9,668!=668,'luo'!='luo',(2*3)!=(4*5),NULL!=NULL,0!=NULL;
【結論】
「<>」或「!=」運算符也是可以用於數字、字符串與表達式的判斷;其比較邏輯與「=」相反,但返回值也是1、0與NULL;【4】小於或等於運算符:<=
select 5<=6,'9'<=9,668<=668,'luo'<='luo',(2*3)<=(4*5),NULL<=NULL,0<=NULL;
【結論】
「<=」運算符也是可以用於數字、字符串與表達式的判斷;其邏輯:判斷左邊的操作數是否小於右邊的操作數,如果是則返回1,否則返回0;針對含有NULL的操作數則好不猶豫地返回NULL。【5】小於運算符:<
【6】大於或等於運算符:>=
【7】大於運算符:>
這三類運算符與上面的「<=」邏輯一致,大家可以自己去分析其過程並得到結論。
select 5<6,'9'<9,668<668,'luo'<'luo',(2*3)<(4*5),NULL<NULL,0<NULL;
【8】IS NULL(ISNULL)、IS NOT NULL運算符
select NULL IS NULL,ISNULL(NULL),ISNULL(2019),2019 IS NULL;
【結論】
這類比較運算符是用來判斷數字、字符、表達式結果是否為NULL;返回的結果值有1、0,沒有NULL;IS NULL(ISNULL)與IS NOT NULL返回的值相反。【9】BETWEEN AND運算符
其語法格式為「expr BETWEEN min AND max」。
SELECT 19 BETWEEN 0 AND 20,19 BETWEEN 0 AND 15,19 BETWEEN 0 AND 19,19 BETWEEN 19 AND 20;SELECT 'a' BETWEEN 'a' AND 'z',(2*3) BETWEEN 0 AND 10,NULL BETWEEN 0 AND 10;
【結論】
這類比較運算符是用來判斷數字、字符、表達式結果是否為NULL;返回的結果值有1、0與NULL;等同於:min <= expr <=max,即包含上下限的值。【10】IN與NOT IN運算符
SELECT 2019 IN('2019',2019,'A'),'A' IN('2019',2019,'A'),2018 IN('2019',2019,'A');SELECT 2019 NOT IN('2019',2019,'A'),'A' NOT IN('2019',2019,'A'),2018 NOT IN('2019',2019,'A');
【結論】
這類比較運算符是用來判斷數字、字符、表達式結果是否為NULL;返回的結果值有1、0與NULL;IN用來判斷操作數是否為IN列表中的一個值,如果是則返回1,否則返回0,對於NULL則返回NULL。NOT IN則於IN相反。【11】LIKE運算符
其語法格式為「expr LIKE 匹配條件」。
SELECT 'luo' LIKE 'luo','luo' LIKE 'luo_','luo' LIKE '%l','luo' LIKE 'l__','luo' LIKE NULL;SELECT 3 LIKE '345',3 LIKE 345;
【結論】
LIKE運算符用於匹配字符串;返回的結果值有1、0與NULL;包含兩種通配符。「%」匹配任何字符,甚至包括零字符;「_」只能匹配一個字符。【12】REGEXP運算符
REGEXP是LIKE的逆運算。語法格式類似:「expr REGEXP 匹配條件」。只是其包含的通配符更多。
^:匹配以該字符後面的字符開頭的字符串;$:匹配以該字符後面的字符結尾的字符串;.:匹配任何一個單字符;[···]:匹配方括號內的任何字符;*:匹配零個或多個在它前面的字符。SELECT 'luo' REGEXP '^l', 'luo' REGEXP 'o$', 'luo' REGEXP '.l', 'luo' REGEXP '[abc]';SELECT 'luo' REGEXP '[a-z]*','luo' REGEXP '[0-9]*','luo' REGEXP '.*';
【結論】
REGEXP運算符用於匹配字符串;返回的結果值有1、0與NULL;根據匹配條件判斷返回結果。總結MySQL支持的比較運算符有12類;一個比較運算符的結果總是1、0或NULL;只有「<=>」才支持NULL的比較,其他對有NULL操作數時返回的結果就是NULL。