MYSQL中 != 和 is not的區別


id name
1 mike
2 jack
3 null
select name form table where name !='jack';

  該語句只能查出第1行,也就是mike;

select name form table where name !='jack' or name is null;

該語句可以查出第1行和第3行,也就是mike和NULL;

   總結:也就是說,!= 和=用來判斷具體的值,而NULL需要用is或者is not判斷(只能用is或is not,且like或not like不能判斷)

  如果你一定想要使用 != Null來判斷,需要加上這個語句: 

set ANSI_NULLS off

   這時會發現 is not NULL 和 != null 是等效的。???但是我一直不會設置

  當 SET ANSI_NULLS 為 ON 時,即使 column_name 中包含空值,使用 WHERE column_name = NULL 的 SELECT 語句仍返回零行。即使 column_name 中包含非空值,使用 WHERE column_name <> NULL 的 SELECT 語句仍會返回零行。

  當 SET ANSI_NULLS 為 OFF 時,等於 (=) 和不等於 (<>) 比較運算符不遵守 ISO 標准。使用 WHERE column_name = NULL 的 SELECT 語句返回 column_name 中包含空值的行。使用 WHERE column_name <> NULL 的 SELECT 語句返回列中包含非空值的行。此外,使用 WHERE column_name <> XYZ_value 的 SELECT 語句返回所有不為 XYZ_value 也不為 NULL 的行。

  當 SET ANSI_NULLS 為 ON 時,所有對 null 值的比較均取值為 UNKNOWN。當 SET ANSI_NULLS 為 OFF 時,如果數據值為 NULL,則所有數據對空值的比較將取值為 TRUE。如果未指定 SET ANSI_NULLS,則應用當前數據庫的 ANSI_NULLS 選項設置。有關 ANSI_NULLS 數據庫選項的詳細信息,請參閱 ALTER DATABASE (Transact-SQL) 和設置數據庫選項。

僅當某個比較操作數是值為 NULL 的變量或文字 NULL 時,SET ANSI_NULLS ON 才會影響比較。如果比較雙方是列或復合表達式,則該設置不會影響比較。


為使腳本按預期運行,不管 ANSI_NULLS 數據庫選項或 SET ANSI_NULLS 的設置如何,請在可能包含空值的比較中使用 IS NULL 和 IS NOT NULL。


在執行分布式查詢時應將 SET ANSI_NULLS 設置為 ON。

  對 計算列或索引視圖創建或更改索引時,SET ANSI_NULLS 也必須為 ON。如果 SET ANSI_NULLS 為 OFF,則針對表(包含計算列或索引視圖的索引)的 CREATE、UPDATE、INSERT 和 DELETE 語句將失敗。SQL Server 將返回一個錯誤消息,該錯誤消息會列出所有違反所需值的 SET 選項。另外,在執行 SELECT 語句時,如果 SET ANSI_NULLS 為 OFF,則 SQL Server 將忽略計算列或視圖的索引值並解析選擇操作,就好像表或視圖沒有這樣的索引一樣。

1、我字段類型是not null,為什么我可以插入空值
可以插入‘’,這樣子的空值,但是不能插入null 2、為毛not null的效率比null高
另外’'可以走索引,null走不了索引
空值是不占用空間的。MySQL中的NULL是占用空間的
打個比方來說,你有一個杯子,空值代表杯子是真空的,NULL代表杯子中裝滿了空氣,雖然杯子看起來都是空的,但是區別是很大的。 NULL 其實並不是空值,而是要占用空間,所以mysql在進行比較的時候,NULL 會參與字段比較,所以對效率有一部分影響,而且B樹索引時不會存儲NULL值的,所以如果索引的字段可以為NULL,索引的效率會下降很多。 3、判斷字段不為空的時候,到底要  select * from table where column <> '' 還是要用 select * from table where column is not null 呢。
而"null" 表示什么也不是, 用“=、>、< ...” 所有的判斷,結果都是false,所有只能用 is null進行判斷。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM