Mysql的不等於:!=和<>
用法:
select * from tab_name where column_name != 'value';
select * from tab_name where column_name <> 'value';
我只想說,對於不等於來說,這兩種方式都可行。查出來的數據是一樣的,但是我這邊要給大家說一種情況。
一個不等於判斷條件查不出NUll數據
例:
mysql中有一個t_user表,其中有id, username,password字段,有以下幾條數據
id username password
1 xiaoming1 password
2 xiaoming2 123
3 xiaoming3 NULL
4 xiaoming4 123
5 xiaohong NULL
1.查出password不等於123的數據,預期結果:第1,3,5這3條數據
select * from t_user where password != 123;
-- 或
select * from t_user where password <> 123;
結果:只查出了一條數據
id username password
1 xiaoming1 password
兩種寫法查出來的數據一樣,問題顯而易見,沒有查出來password是NUll的數據。
解決方法:加入NULL值判斷
select * from t_user where password != 123 or password is NULL;
-- 或
select * from t_user where password <> 123 or password is NULL;
2.查出username中包含xiaoming且password不等於123的數據
select * from t_user where username like '%xiaoming%' and password != 123 or password is NULL;
-- 或
select * from t_user where username like '%xiaoming%' and password <> 123 or password is NULL;
結果
1 xiaoming1 password
3 xiaoming3
5 xiaohong
哪來的xiaohong啊喂?正確寫法
select * from t_user where username like '%xiaoming%' and (password <> 123 or password is NULL);
-- 或
select * from t_user where username like '%xiaoming%' and (password <> 123 or password is NULL);
所以,同一字段聯合判斷要加()。
結語
什麼是國際知識點?唉!(戰術後仰)。學到的快拿出小本本記下來,要考的。