這裏是個例:什麼是在MySQL SELECT查詢*和列名之間的差異
表1 -columnA -columnB
問:
是什麼
SELECT * FROM Table1
之間的區別
and
SELECT columnA, columnB FROM Table1
我知道這兩個查詢返回相同的結果。但有沒有區別,或者這兩個查詢是否完全相同?
此外,MySQL服務器如何處理這些?
有人可以指出任何文件嗎?
謝謝!
塞巴斯蒂安
這裏是個例:什麼是在MySQL SELECT查詢*和列名之間的差異
表1 -columnA -columnB
問:
是什麼
SELECT * FROM Table1
之間的區別
and
SELECT columnA, columnB FROM Table1
我知道這兩個查詢返回相同的結果。但有沒有區別,或者這兩個查詢是否完全相同?
此外,MySQL服務器如何處理這些?
有人可以指出任何文件嗎?
謝謝!
塞巴斯蒂安
沒有區別。這是列投影的問題。
當您使用*
時,您無法控制列名稱。它只是選擇你的表中的所有列。
在指定的列名可以更加靈活,在我自己的意見,因爲你可以給列名的alias
,您可以執行在列的一些行動,如將其傳遞到函數。
select * from table1
返回Table1中的所有列。
參考手冊http://dev.mysql.com/doc/refman/5.1/en/index.html(MySQL 5.1中)
謝謝你的文檔! – Sebastien 2013-04-05 12:40:32
這是不同之處:
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列表中列名不爲空的所有寄存器
如果您專門選擇列,並且稍後通過添加,刪除或重命名列來更改表的結構,那麼您將被迫編輯查詢以使他們工作(或者,在添加列的情況下,包括附加數據)。選擇*
將加載所有列,無論這些列是什麼,所以如果表結構稍後更新,您的查詢仍然可以完全工作。但是,如果您的查詢意圖包含連接,則需要在表名稱前附*
,如果兩個表都具有相同名稱的列,則存在列名衝突的風險。因此,在加入查詢的情況下,我認爲從每個表中選擇單個列是一個好主意,而不是從一個表中選擇*
,從另一個表中選擇各個列。
選擇單個列,您還可以使用別名重命名列,如這樣的:
SELECT column_1 AS first, column_2 AS second
FROM some_table
作爲一項規則,避免「SELECT *」。這是邪惡的,緩慢的,並讓你的代碼難以閱讀,當你幾個月後回到它。相反,請命名並限定您的列。別名您的表實例(和你列太多,如果你喜歡)...
SELECT x.something, y.something_else FROM my_table x JOIN my_other_table y ON y.id = x.id
如果你看看我的許多其它響應上的話,你會看到,我並不總是聽從這一建議,但儘管如此,這是個好建議!
此外,當某人在將來向表中添加columnC時,'select *'的行爲與'SELECT columnA,columnB'的行爲不同。 – nos 2013-04-05 12:37:56
謝謝你這是非常有益的,並回答了我的所有問題!並感謝@AlessandroFalivene的文檔! – Sebastien 2013-04-05 12:42:58
不用謝@Sebastien':D' – 2013-04-05 12:46:48