2012-06-29 322 views
0

解釋SQL查詢執行我使用SQL查詢即在這種情況下

SELECT * FROM TABLE_NAME 

在這種TABLE_NAME表具有10行和5列。當我運行這個上面的查詢時,它運行良好並返回10行和5列。

現在我運行一個新的查詢,即

SELECT 8 FROM TABLE_NAME 

現在只返回一個列,但10行,這個單個列各行中,即具有相同的值8。

我想知道爲什麼它返回10行和一列只有8個值,當我使用*而不是8時,它將返回10行和5列。

這兩個查詢和它的執行過程究竟有什麼區別?

回答

1

如果您沒有定義where子句,那麼將獲取所有行。

如果您定義了8而不是*,則將在每行中返回數字8*是所有列名的通配符,並且像做SELECT col1, col2, ..., col10 FROM TABLE_NAME

1

SELECT 8只是選擇一個常量。它爲表中的每一行返回該值。這就像說:

SELECT 8, some_other_column FROM dbo.table_name; 

在這種情況下,你會得到一個列的每一行舉辦8,但你的另一列了。如果您沒有指定任何其他列,SQL Server將掃描該表併爲每行獲取常量,但不會獲取其他數據。

1

SELECT之後,您指定您想要返回的列。

*這裏是一個簡單的「給我所有的存在」的佔位符,因此所有存在的列都被返回。

如果你僅僅傳遞一個常數,在你的情況下,在列表中,它將返回每一行的那個常量,從而產生10行,一列,其內容爲8

您也可以結合這兩個像

SELECT *, 8 FROM TABLE_NAME 

在你的情況下,這回你6列 - 從原始表和一個常數列5。

1

SELECT clause指定要返回的列。 *告訴服務器返回表中每條記錄可用的所有列。 8意味着返回表中每個記錄的值8。

1

SELECT子句就像循環遍歷FROM子句中的所有行,受JOIN和GROUP BY的限制。

在您的簡單查詢中,第一個版本說「返回表中每行的行的所有值。「

第二個版本是說‘返回值8表中的每一行’。

這是SQL如何工作的,並沒有具體發動機的功能。

2

您選擇列SELECT後像SELECT col1, col2, col3 FROM table。 如果鍵入8你「剛剛得到一個常數8」。

如果你只想8行,在SQL Server你SELECT TOP 8 col1, col2 FROM table指定。

如果您想了解一般更多關於SQL這裏是一個良好的開端:http://www.w3schools.com/sql/default.asp

1

所有答案都具有非常好的方法,SQL是很好編程select *語法。 當我們寫select 8它試圖找到開發者的需求。只是根據表格,我們正在申請的條件。select 8將行爲像*就行數而言就像只選擇一些隨機where條件並適用於這兩個8 and *行數將相同,但在列*將是精確的表,並且在8的情況下它將只是一個,因爲8不是sql的保留字面量,它需要8作爲硬編碼的列名,並且其值將由程序員由硬編碼或由某些公式。

0

爲此,你應該考慮你正在做一個查詢表TABLE_NAME,這個表應該有10行,現在當你查詢

SELECT * FROM TABLE_NAME 

你說,它必須將所有的從表和行顯示的所有列,但如果你這樣做

SELECT 8 FROM TABLE_NAME 

你說,它必須將所有的行從表中,但,而不是呈現出F欄或者它將顯示一個表8,並且它會執行10次,因爲該表有10行;您可以執行這個查詢

SELECT 8 

而且它只會顯示一排有8值,因爲你沒有做一個查詢表,如果你做一個查詢X表這個它會告訴你的N行爲N行,但只有8行。