2017-08-07 265 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