2014-11-24 30 views
2
獲取的行

請考慮一個名爲Employee表與以下兩列:不正確。在SQL

  1. EMPID - 數(12)
  2. 的empType - VARCHAR2(2個字節)

的empType有兩個有效值爲ES或NULL。

當我火了下面的查詢,我得到100行

select * from Employee; 

下面的查詢給了我60行:

select * from Employee where EmpType = 'ES' 

雖然select * from Employee where EmpType <> 'ES「給我0行。

爲什麼這麼說?我應該得到40行,其中EmpType不是ES。

我正在使用Oracle Sql DB。

+2

嘗試使用'select * from Employee where EmpType is null'來獲得nulls'emptype'和'select * from Employee其中EmpType不爲null'來獲得'emptype' ='ES' – Aramillo 2014-11-24 16:51:49

+1

相關:[不等於<>!=操作符o n NULL](http://stackoverflow.com/questions/5658457/not-equal-operator-on-null) – 2014-11-24 16:53:11

回答

2

Null不等於任何東西,甚至沒有其他的空。所以說不等於ES,空是不是不等於ES。如果你明白我的意思。

所以要得到你想要的值你需要is null

select * from Employee where EmpType is null 

退房這篇文章handling null values

編輯:正如@Allan指出,在甲骨文空字符串等同於空。使用數不爲nvarchar

+0

在Oracle中,一個空字符串等同於null,所以最後的SQL語句將不起作用。 – Allan 2014-11-24 17:00:06

+0

@Allan,謝謝你,我已經忘記了。 – paqogomez 2014-11-24 17:01:56

0

的 「<>」

,所以你應該使用:

SELECT * FROM員工那裏的empType + '' 喜歡 '空'

SELECT * FROM員工其中EmpType爲空

+0

「*」數字不與nvarchar *一起使用「的」<>「顯然是錯誤的。不相等的運算符'<>'可以很好地用於varchar列。另一方面,運算符「+」僅用於SQL中的數字(要連接字符串,您必須在標準和Oracle中使用「||」)。而'EmpType +'這個表達式''null''根本不起作用 – 2014-11-25 08:31:49