2013-04-05 154 views
0

這裏是個例:什麼是在MySQL SELECT查詢*和列名之間的差異

表1 -columnA -columnB

問:

是什麼

SELECT * FROM Table1 
之間的區別

and

SELECT columnA, columnB FROM Table1 

我知道這兩個查詢返回相同的結果。但有沒有區別,或者這兩個查詢是否完全相同?

此外,MySQL服務器如何處理這些?

有人可以指出任何文件嗎?

謝謝!

塞巴斯蒂安

回答

4

沒有區別。這是列投影的問題。

當您使用*時,您無法控制列名稱。它只是選擇你的表中的所有列。

在指定的列名可以更加靈活,在我自己的意見,因爲你可以給列名的alias,您可以執行在列的一些行動,如將其傳遞到函數。

+0

此外,當某人在將來向表中添加columnC時,'select *'的行爲與'SELECT columnA,columnB'的行爲不同。 – nos 2013-04-05 12:37:56

+1

謝謝你這是非常有益的,並回答了我的所有問題!並感謝@AlessandroFalivene的文檔! – Sebastien 2013-04-05 12:42:58

+0

不用謝@Sebastien':D' – 2013-04-05 12:46:48

0

這是不同之處:

select count(*) from table, count all registers on that table, 

非常相似

select count(1) from table, count all registers on that table 

而且

select count(column_name) from table, 

COUN t列表中列名不爲空的所有寄存器

0

如果您專門選擇列,並且稍後通過添加,刪除或重命名列來更改表的結構,那麼您將被迫編輯查詢以使他們工作(或者,在添加列的情況下,包括附加數據)。選擇*將加載所有列,無論這些列是什麼,所以如果表結構稍後更新,您的查詢仍然可以完全工作。但是,如果您的查詢意圖包含連接,則需要在表名稱前附*,如果兩個表都具有相同名稱的列,則存在列名衝突的風險。因此,在加入查詢的情況下,我認爲從每個表中選擇單個列是一個好主意,而不是從一個表中選擇*,從另一個表中選擇各個列。

選擇單個列,您還可以使用別名重命名列,如這樣的:

SELECT column_1 AS first, column_2 AS second 
FROM some_table 
0

作爲一項規則,避免「SELECT *」。這是邪惡的,緩慢的,並讓你的代碼難以閱讀,當你幾個月後回到它。相反,請命名並限定您的列。別名您的表實例(和你列太多,如果你喜歡)...

SELECT x.something, y.something_else FROM my_table x JOIN my_other_table y ON y.id = x.id 

如果你看看我的許多其它響應上的話,你會看到,我並不總是聽從這一建議,但儘管如此,這是個好建議!

相關問題