0

这是一个例子:

表 1 -columnA -columnB

问题:

和有什么区别

SELECT * FROM Table1

SELECT columnA, columnB FROM Table1

我知道这两个查询返回相同的结果。但是有区别还是这两个查询做完全相同的事情?

此外,MySQL 服务器如何处理这些?

有人可以指出这方面的任何文件吗?

谢谢!

塞巴斯蒂安

4

5 回答 5

4

没有区别。这是列的投影问题。

使用 时*,您无法控制列名。它只是选择表中的所有列。

虽然指定列名可以更灵活,但在我自己看来,因为您可以给列名 analias并且您可以在列中执行一些操作,例如将其传递给函数。

于 2013-04-05T12:35:31.183 回答
0

从表 1 中选择 *

返回 Table1 中的所有列。

参考手册http://dev.mysql.com/doc/refman/5.1/en/index.html (MySql 5.1)

于 2013-04-05T12:36:09.460 回答
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, 

计算该表上 column_name 不为空的所有寄存器

于 2013-04-05T12:39:21.053 回答
0

如果您专门选择列,然后通过添加、删除或重命名列来更改表的结构,您将被迫编辑查询以使其工作(或者,在添加列的情况下,包括附加数据)。选择*将加载所有列,无论这些列是什么,因此如果稍后更新表结构,您的查询仍将完全有效。

但是:如果您的查询要包含连接,则需要*在表名前面加上前缀,如果两个表都具有相同名称的列,则存在列名冲突的风险。因此,在连接查询的情况下,我认为从每个表中选择单个列总是一个好主意,而不是*从一个表中选择另一个表中的单个列。

选择单个列还允许您使用别名重命名列,如下所示:

SELECT column_1 AS first, column_2 AS second
FROM some_table
于 2013-04-05T12:40:02.353 回答
0

通常,避免使用“SELECT *”。它是邪恶的、缓慢的,并且当您在几个月后返回它时,会使您的代码更难阅读。相反,命名并限定您的列。为您的表实例(如果您愿意,也可以为您的列)命名...

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

如果您查看我对 SO 的许多其他回复,您会发现我并不总是听从这个建议,但这仍然是个好建议!

于 2013-04-05T12:40:13.087 回答