今天在學習資料庫的索引優化時,關於memory儲存引擎的的hash索引時,看到了操作符<=> ,這個操作符還是第一次見到,於是上網查了一下。我想大家應該知道 = != <>操作符吧,特別說明一下<> 與!=都是不等於的意思,但是一般都是用<>來**不等於因為<>在任何sql中都起作用但是!=在sql2000中用到,則是語法錯誤,不相容的。好了,那我們的的<=>是什麼意思呢?
正確回答
1.和=號的相同點
像常規的=運算子一樣,兩個值進行比較,結果是0(不等於)或1(相等);換句話說:』a'<=>』b'得0和』a'<=>』a『得1。
2.和=號的不同點
和=運算子不同的是,null的值是沒有任何意義的。所以=號運算子不能把null作為有效的結果。所以:請使用<=>,
'a' <=> null
得0
null<=> null
得出1。和=運算子正相反,=號運算子規則是 'a'=null 結果是null 甚至null = null 結果也是null。順便說一句,mysql上幾乎所有的操作符和函式都是這樣工作的,因為和null比較基本上都沒有意義。
用處
當兩個運算元中可能含有null時,你需要乙個一致的語句。
1where col_a <=> ?
這裡的佔位符有可能是常量也有可能是null,當使用<=>運算子時,你沒有必要對查詢語句做任何修改。
相關操作符
除了 <=> ,還有兩個其他的操作符用來處理某個值和null做比較,也就是is null
andis not null。他們是ansi標準中的一部分,因此也可以用在其他資料庫中。而<=>只能在mysql中使用。
你可以把<=>當作mysql中的方言。
1'a'isnull
==>'a
'<=>
null2'
a'isnot
null
==>
not('a'
<=>
null)
據此,你可以把這個查詢語句段改的更具移植性一點:
1where p.name is
null
MySQL的and操作符和or操作符
有時對where的要篩選的列不止乙個時,那麼就用到了and操作符和or操作符,and操作符顧名思義的意思是 並且 而or操作符的意思是 或者 比如以部門員工表為例 查詢部門編號為d001並且入職日期為 1985 02 02的員工編號,那麼就要用到and操作符 那如果是查詢部門編號為d001或者入職日...
MySQL中的比較操作符
對於 操作符,兩個值被比較,結果是0 不相等 或者1 相等 比較操作符 表示null安全的等價。這個比較操作符執行等價比較,和 操作符類似,但是如果兩個運算元都是null,會返回1,而不是返回null 如果其中乙個運算元是null,會返回0,而不是返回null。當參與比較的兩個運算元都可能包含nul...
ruby中的 操作符和 操作符
url str foo foo str bar foobar str foo foo str.object id 606274188 str bar foobar str.object id 606283808 str foobar foobarfoobar str.object id 606283...