2017-10-12 64 views
1

空數據我想了解處理的黑斑羚

我使用下表

╔════╦══════════════╦══════════╗ 
║ id ║ name  ║ salary ║ 
╠════╬══════════════╬══════════╣ 
║ 1 ║ cde   ║ 5636  ║ 
║ 2 ║ asd   ║ 148  ║ 
║ 3 ║ pwe   ║ null ║ 
║ 4 ║ lmn   ║ 959  ║ 
╚════╩══════════════╩══════════╝ 
當我執行以下查詢

在因帕拉算術運算的行爲

select salary+20 as sum1 from table where id=3; 

它返回我

 |sum1 
    ---|----- 
    1 |NULL 

當我運行在列總和與

select sum(salary) as sum1 from table; 

    |sum1 
    ---|----- 
    1 |6743 

我無法瞭解相同的算術運算表現不同

回答

0

這些都是不同的算術查詢。

在第一個查詢你想要的DB從第3行3井行的salaryNULL返回salary+20。所以DB將看到NULL+20=NULL並返回NULL

但在第二個查詢中:sum(salary) from table;要求數據庫對整個salary列進行求和並將其返回給您。所以它看起來並且不會5636+148+959=6743(忽略NULL)。

總結在第一個查詢中,您正在執行一個基本的算術運算符。但第二個查詢sum()是應用於返回行的運算符。作爲一個更好的測試,嘗試運行select sum(salary) as sum1 from table where id=3,看看你能更好地理解正在發生的事情。

+0

按照你的理論,當我這樣做從表總和(工資),其中id = 3應該忽略空並打印總和爲zero.But還是它返回NULL – sri

+0

啊我看你可能會感到困惑。因此,在sum()中,如果數據庫中有有效值,它將返回這些有效值的總和。但是,如果你試圖總結無效的值,即。 'a + null + 1.144es'或者它會抱怨並返回'null'。但是'10 + null + 20 + a'會返回'30'。 – Francisco

+0

10 + null + 20 + a也返回NULL – sri

0

NULL不是零(0),零不是NULL,它是一個值,這是最重要的。 NULL是沒有值的,什麼也沒有。 sum()僅限聚合值。如果數據集中沒有任何值,則返回NULL。如果它是一些值,sum()會聚合它們,忽略空值。如果你想NULL其轉換爲零,使用NVL()功能:

select nvl(sum(salary),0) as sum1 from table where ... 

這個查詢將返回的情況下0有數據集中沒有值。

相關問題