台灣最大程式設計社群網站
線上人數
1136
 
會員總數:242640
討論主題:187614
歡迎您免費加入會員
討論區列表 >> Oracle >> sql 不等於 是空值
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
sql 不等於 是空值
價值 : 10 QP  點閱數:11255 回應數:2

樓主

ORACLE新人
門外漢
0 35
451 36
發送站內信

為什麼會這樣呢??
我要抓出資料表中不是"Y"的資料出來
我下的指令如下
select * from nam where ok <> 'Y'

照理說,這個指令下下去,只要ok這個來為不是"Y"的資料都會出來....
為什麼當ok這個欄位是空值(null)時,下了這個指令卻未帶出是空值的資料出來呢???
P.S資料中確實有null的資料存在
使用的資料褲是oracle

本篇文章發表於2011-02-14 11:20
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
1樓
最有價值解答

花旗蔘
檢舉此回應
你先要釐清rdbms中data:null的定義
--->NULL 值表示資料行的資料值為未知或無效的。NULL 並不是"0"、"零長度字串"或"空白字元值"
所以從此觀點出發,你欄位為<>'Y',而NULL 值表示"未知/無效的",
所以根本無法判斷NULL為啥,那怎能判斷它為<>'Y'呢?
有follow sql-92後規則的rdbms 對這情況應都是一樣的,(前提為預設值)

ex:你在 mssql or oracle 執行 ,狀況也會一樣。

create table bennull (a int,b varchar2(10))
insert into bennull values(null,'ben');
insert into bennull values(1,'jason');
insert into bennull values(2,'qqd');

select *
from bennull
where a<>1
or a is null -->這裡加句 or a is null 我想就符合你的需求了。
本篇文章回覆於2011-02-14 12:04
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
回應

Takashi
檢舉此回應
空(NULL)判斷

NULL ---> 從資料庫定義上屬於一個未知數據

任何情況下如果任何一個數字與空進行計算結果還是空


在某些資料列上是允許存在有NULL值的,但是對於NULL不能夠使用關係運算判斷。

NULL 不是 空字串 也不是數字0

因此在SQL中 只能夠透過 IS NULL 來判斷為空

以及 IS NOT NULL(NOT 字串 IS NULL) 判斷不為空

Ex: 查詢出所有領取傭金的僱員資訊

(comm字串代表傭金,若有領取傭金,意思就是 comm欄位內容非NULL)

select *
from emp
where comm IS NOT NULL;


0 是存在的 NULL 非指 0 的意思



第22個冬天
本篇文章回覆於2017-05-16 14:16
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.