自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

MySQL查詢中的非空問題

數(shù)據(jù)庫 MySQL
在MySQL查詢過程中,難免會(huì)出現(xiàn)一些問題,而由于字段沒有設(shè)置NOT NULL而帶來的問題,尤其值得我們?nèi)プ⒁狻?/div>

MySQL查詢是我們經(jīng)常會(huì)用到的操作,下面將為您分析MySQL查詢中的非空問題,希望對(duì)您學(xué)習(xí)MySQL查詢方面能夠有些許的幫助。

表的訂單狀態(tài)字段設(shè)計(jì)為varchar類型,有以下值:NULL,pending,pending refund,refund,cancel.我們知道查詢狀態(tài)為cancel的訂單,SQL語句可以這樣寫:

  1. SELECT o.oid,o.moneyreceipt,o.moneyget,o.thecurrency,o.status FROM qorder o WHERE o.status = 'cancel' 

SQL語句能查詢出正確的數(shù)據(jù),但是當(dāng)我們想查詢狀態(tài)為非cancel的訂單時(shí),可能會(huì)出麻煩, 因?yàn)閟tatus字段沒有設(shè)置NOT NULL,所以大部分訂單的status值都是NULL,這樣的話,用'<>'查詢出來的數(shù)據(jù)不正確,只有status除了cancel之外 的非空數(shù)據(jù)查詢出來了,而為NULL的沒有查詢出來。SELECT o.oid,o.moneyreceipt,o.moneyget,o.thecurrency,o.status FROM qorder o WHERE o.status <> 'cancel'原 因:NULL值操作
NULL值可能令人感 到奇怪直到你習(xí)慣它。概念上,NULL意味著“沒有值”或“未知值”,且它被看作與眾不同的值。為了測(cè)試NULL,你不能使用算術(shù)比較 操作符例如=、<或!=。為了說明它,試試下列查詢:

  1. mysql> SELECT 1 = NULL, 1 <> NULL, 1 < NULL, 1 > NULL;  
  2. +----------+-----------+----------+----------+  
  3. 1 = NULL | 1 <> NULL | 1 < NULL | 1 > NULL |  
  4. +----------+-----------+----------+----------+  
  5. |     NULL |      NULL |     NULL |     NULL |  
  6. +----------+-----------+----------+----------+  

很 顯然你不能通過這些比較得到有意義的結(jié)果。相反使用IS NULL和IS NOT NULL操作符:

  1. mysql> SELECT 1 IS NULL, 1 IS NOT NULL;  
  2. +-----------+---------------+  
  3. | 1 IS NULL | 1 IS NOT NULL |  
  4. +-----------+---------------+  
  5. |         0 |             1 |  
  6. +-----------+---------------+  

請(qǐng)注意在MySQL中,0或 NULL意味著假而其它值意味著真。布爾運(yùn)算的默認(rèn)真值是1。根據(jù)以上的NULL值操作結(jié)果,最終使用此種方式解決:SELECT o.oid,o.moneyreceipt,o.moneyget,o.thecurrency,o.status FROM qorder o WHERE IFNULL(o.status,'pending') <> 'cancel'學(xué)習(xí):IFNULL(expr1,expr2)
如果expr1不是NULL,IFNULL()返回expr1,否則它返回expr2。IFNULL()返回一個(gè)數(shù)字或字符串值,取決于它被使 用的上下文環(huán)境。

  1. mysql> select IFNULL(1,0);  ->1  
  2. mysql> select IFNULL(0,10);  ->0  
  3. mysql> select IFNULL(1/0,10);  ->10.0000  
  4. mysql> select IFNULL(1/0,'yes');          
  5.  
  6. ->'yes'IF(expr1,expr2,expr3)  
  7.  

如果expr1是TRUE(expr1<>0且expr1<>NULL),那么IF()返回 expr2,否則它返回expr3。IF()返回一個(gè)數(shù)字或字符串值,取決于它被使用的上下文。

  1. mysql> select IF(1>2,2,3);  -> 3  
  2. mysql> select IF(1<2,'yes','no'); -> 'yes'  
  3. mysql> select IF(strcmp('test','test1'),'yes','no'); -> 'no'  

expr1作為整數(shù)值被計(jì)算,它意味著如 果你正在測(cè)試浮點(diǎn)或字符串值,你應(yīng)該使用一個(gè)比較操作來做。

  1. mysql> select IF(0.1,1,0);  -> 0  
  2. mysql> select IF(0.1<>0,1,0);  -> 1  

在上面的第一種情況中,IF(0.1)返回0,因?yàn)?.1被變換 到整數(shù)值, 導(dǎo)致測(cè)試IF(0)。這可能不是你期望的。在第二種情況中,比較測(cè)試原來的浮點(diǎn)值看它是否是非零,比較的結(jié)果被用作一個(gè)整數(shù)。

  1. CASE value WHEN [compare-value] THEN result [WHEN [compare-value] THEN result ...] [ELSE result] END   
  2.  
  3. CASE WHEN [condition] THEN result [WHEN [condition] THEN result ...] [ELSE result] END   
  4.  

第一個(gè)版本返回 result,其中value=compare-value。第二個(gè)版本中如果第一個(gè)條件為真,返回result。如果沒有匹配的result值,那么結(jié) 果在ELSE后的result被返回。如果沒有ELSE部分,那么NULL被返回。

  1. mysql> SELECT CASE 1 WHEN 1 THEN "one" WHEN 2 THEN "two" ELSE "more" END; -> "one"  
  2. mysql> SELECT CASE WHEN 1>0 THEN "true" ELSE "false" END;  -> "true"  
  3. mysql> SELECT CASE BINARY "B" when "a" then 1 when "b" then 2 END; -> NULL   

 

 

 

【編輯推薦】

MySQL查詢超時(shí)問題的解決

MySQL無重復(fù)查詢的實(shí)現(xiàn)

詳解mysql命令行給列起假名

MySQL查詢優(yōu)化器的工作原理

MySQL日期函數(shù)和時(shí)間函數(shù)

 

責(zé)任編輯:段燃 來源: 互聯(lián)網(wǎng)
相關(guān)推薦

2010-11-25 11:15:11

MySQL查詢超時(shí)

2010-01-04 13:44:41

SQL

2010-11-25 15:57:49

mysql查詢語句

2010-10-14 09:15:20

MySQL查詢

2009-10-14 13:43:12

綜合布線系統(tǒng)

2010-10-27 13:39:34

Oracle查詢

2010-11-25 16:09:58

mysql查詢大小寫

2011-05-18 10:24:55

Oracle

2011-07-25 09:03:30

WAMPMySQL空密碼

2022-07-08 17:13:32

MySQL數(shù)據(jù)死鎖

2010-09-02 14:59:23

非授權(quán)DHCP

2010-06-07 14:50:50

jsp MySQL

2018-12-14 15:35:20

MySQL索引數(shù)據(jù)庫

2010-09-24 15:46:23

SQL查詢

2010-07-02 13:26:56

SQL Server處

2011-04-01 14:14:42

SQL Server空值

2021-10-20 20:27:55

MySQL死鎖并發(fā)

2009-06-04 09:47:48

MySQL隱藏控件TMPDIR

2010-05-28 18:05:22

jsp MySQL

2009-04-24 09:33:12

LINQ查詢非泛型
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)