Oracle中,關於空值的問題

2021-09-27 06:51:29 字數 767 閱讀 1644

在oracle資料庫中,空值是乙個特殊的。比如要查詢出乙個表中,某個欄位為空或者不為空的資料,不能直接用=或者<>,要使用is null或者is not null

以上可以說是乙個常識性問題,一般都不會犯。不過,下面要說的問題,可能會被大多數人忽略:

比如,在許可權系統中,根據角色id,要找出具有這個角色的使用者和不具有這個角色的使用者。所以,這裡相關的表有fyk_user(使用者表)、fyk_user_role(使用者和角色的關聯關係表)。

先來看下不帶條件輸出的結果,所有的使用者共有11個,其中只有兩個使用者和角色關聯了。

如果現在我需要找出沒有關聯到角色id為1的所以使用者,以便給他們賦值該角色。那麼我所期望的應該是找出9個使用者(3~11)

,所以加上條件:where ur.role_id <> 『1』

結果是一條資料也查不出來。其實,這裡就犯了一開始說的那種錯誤,空值的比較,是不能用=或者!=的。

在條件上,在加上空值的判斷:where ur.role_id <> 『1』 or ur.role_id is null

Oracle中的空值問題

空值既不是零也不是空格,它是未定義的,無效的值。只要包含空值的數學表示式都為空值。在資料庫表示式中,如果不對空值進行特殊處理,例如使用通用函式對空值進行替換的話,預設空值最大。1.建立表 create table s user id number 10 primary key,name varcha...

關於多行子查詢中的空值問題,not null

在操作表查詢時,發現乙個問題,進行子查詢時使用not in的查詢結果不存在 如下的操作 查詢不是老闆的員工 select from emp where empno not in select mager from emp 這條語句執行的結果為空,但是從資料上來看並不會為空,看來還是語法的錯誤,查詢了...

關於Oracle資料庫中SQL空值排序的問題

在oracle中進行查詢排序時,如果排序字段裡面有空值的情況下,排序結果可能會達不到自己想要的結果。如 select from tabletest order by visits desc 上圖可以看到表示服務訪問次數的 visits 欄位上的空值記錄排序時放在前面,和實際邏輯不對 將原來的sql語...