2013-04-07 54 views
0

我對SQL很陌生,從表中選擇時無法找到描述*和NULL之間區別的資源。從SQL中的表中選擇時,*和NULL之間有什麼區別?

例如:

SELECT null, null, *, null FROM items 

那是比任何不同:

SELECT null, null, null, null FROM items 

,是這個有什麼不同比:

SELECT * FROM items 

如果只有四列開始?

+0

你正在使用什麼RDBMS? – 2013-04-07 06:44:26

+0

我不知道,這不是我的服務器 – Ci3 2013-04-07 06:47:04

+4

我不是說任何冒犯,但你應該找到一個關於SQL的教程。這是一個非常基本的問題,如果你需要問它,你將需要學習很多來完成任何事情。 :-) – 2013-04-07 06:54:30

回答

-2

當然有。

第一招:

SELECT null, null, null, null FROM items 

將選擇在每個NULL值,四列無論此表items值和列。但是返回的行數將等於items表中的行數,如果items表中有n行,它將返回n行,所有列的值都爲NULL

SQL Fiddle Demo


但是:

SELECT * FROM items 

將選擇所有與此表items所有值的列。

硒它們是完全不同的。

在你的情況,因爲只有四列,第一個將總是選擇四種NULL列,其中是第二個將包含價值選擇。

+0

但是我說如果表格中只有4列......他們還會給出不同的結果嗎? – Ci3 2013-04-07 06:49:22

+0

@ChrisHarris - 第一個將***總是選擇四個可爲空的列,每個列都有一個「NULL」值,但第二個選擇列中包含所有值的列。 – 2013-04-07 06:51:41

+0

您不應將它們稱爲「可空列」,這意味着它們包含值,但其基礎表允許NULL。實際上,它們是「包含所有NULLL的列」中真正的「NULL列」。 – ErikE 2013-04-07 08:09:32

0

的第一個查詢將顯示相同數量的記錄如在表格中。但是這些值將在選擇查詢中被替換爲空值。

SELECT null, null, null, null FROM items 

這類似於

SELECT 5, 5, 5, 5 FROM items 

第二個查詢,

SELECT * FROM items 

Diplays與價值觀行。

0

添加到馬哈茂德的回答,我可以解釋一種情況,當你需要一個SELECT NULL。

假設你有2個表,T1 3列和t2有4列。你決定寫一個涉及這些表的UNION的查詢。

SELECT * FROM t1 
UNION 
SELECT * FROM t2 

以上查詢不起作用,因爲每個表中的列數不同,因此聯合操作不能由SQL引擎執行。爲了解決這個問題,您需要從t1中選擇一個空列,並在訪問查詢結果集時在應用代碼中正確處理它。

SELECT *, null FROM t1 
UNION 
SELECT * FROM t2 

現在無論是單個查詢上面會有4列,從而導致一個成功的UNION操作。

也就是說,如果使用UNION ALL,相同的查詢將會正常工作,因爲如果列數不同,它會自動將NULLS添加到結果集。

我知道的例子並沒有太大的意義,但我希望你明白使用空值的點。

+0

謝謝,這是也有幫助。 – Ci3 2013-04-07 07:19:41

相關問題