MySQL SELECT查询中*和column_name之间的区别是什么

时间:2013-04-05 12:32:16

标签: mysql select

这是一个例子:

表1 -columnA -columnB

问题:

之间有什么区别
SELECT * FROM Table1

SELECT columnA, columnB FROM Table1

我知道这两个查询返回相同的结果。但是,这两个查询是否存在差异或完全相同?

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

有人可以指出任何文件吗?

谢谢!

的Sebastien

5 个答案:

答案 0 :(得分:4)

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

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

虽然指定列名可以更灵活,但我自己认为 ,因为您可以为列名提供alias,并且您可以在列中执行某些操作,例如传递它进入功能。

答案 1 :(得分:0)

从table1中选择*

返回Table1中的所有列。

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

答案 2 :(得分: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不为空的所有寄存器

答案 3 :(得分:0)

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

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

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

SELECT column_1 AS first, column_2 AS second
FROM some_table

答案 4 :(得分:0)

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

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

如果你看看我在SO上的其他许多回复,你会发现我并不总是听从这个建议,但这仍然是一个很好的建议!