2017-08-07 141 views
-4

表名:學生。 表我有:MySQL查詢結果

mysql> SELECT * from Students; 
+-----------+-------------+-------+ 
| Rollno | Name  | Marks | 
+-----------+-------------+-------+ 
| 251602122 | Sumit Tyagi | 70 | 
| 251602121 | parveen  | 90 | 
+-----------+-------------+-------+ 

以下查詢返回以下結果甚至8是不是一個屬性。

mysql> select 8 from Students; 
+---+ 
| 8 | 
+---+ 
| 8 | 
| 8 | 
+---+ 

同樣

mysql> SELECT 'some_string' from Students; 
+-------------+ 
| some_string | 
+-------------+ 
| some_string | 
| some_string | 

我只是想知道爲什麼會這樣。

+0

你每次在表中有行時選擇一個字面值(數字和值在引號中是字面值並按原樣選擇),當然結果是正確的。 – scaisEdge

+0

爲什麼「MySql錯誤的查詢結果」是標題,如果你不知道行爲? – money

+0

我明白這個問題不是一個很有趣的問題,因爲它是一個基本的sql的東西,但問題不是太糟糕而留下太多的負面影響。這個問題寫得很好,OP正在努力學習。 –

回答

1

該查詢返回表中每條記錄的一行。

但是你不從這些記錄中選擇數據。您只需爲每行選擇號碼8。然後返回。

+0

但爲什麼這返回? –

+0

我認爲如果你做'SELECT name,8',就很容易理解。發生這種情況是因爲,如果需要像「SELECT name,2 * marks' –

1

Select語句在表中查找列名。您可以確保SQL使用TableName.ColumnName在表中查找列名。

在您編寫的示例中,您要求從不是列名稱的表中返回一個常量或硬編碼值8/some_string。所以它會返回您要求的硬編碼或常量值,次數等於表中的行數。

如果您想確保它查找列名稱,請使用我提到的語法作爲TableName.ColumnName。您也可以爲您的表提供別名。所以在上面的例子中,如果您使用的語法

SELECT Students.8 from Students; 

SELECT s.8 FROM Students s; 

它會尋找列名作爲8,而不是常量或硬編碼值8

如果我沒有錯,在編寫查詢時最好使用TableName.ColumnNamealias.ColumnName,因爲它會檢查該特定表中的列名。

+0

'表等計算結果,您總是可以創建額外的字段列。列「不是」強迫「的問題;當且僅當只有一個包含該列的表時,SQL才允許使用「列」。 – philipxy