2013-04-05 158 views
0

这里是个例:什么是在MySQL SELECT查询*和列名之间的差异

表1 -columnA -columnB

问:

是什么

SELECT * FROM Table1 
之间的区别

and

SELECT columnA, columnB FROM Table1 

我知道这两个查询返回相同的结果。但有没有区别,或者这两个查询是否完全相同?

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

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

谢谢!

塞巴斯蒂安

回答

4

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

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

在指定的列名可以更加灵活,在我自己的意见,因为你可以给列名的alias,您可以执行在列的一些行动,如将其传递到函数。

+0

此外,当某人在将来向表中添加columnC时,'select *'的行为与'SELECT columnA,columnB'的行为不同。 – nos 2013-04-05 12:37:56

+1

谢谢你这是非常有益的,并回答了我的所有问题!并感谢@AlessandroFalivene的文档! – Sebastien 2013-04-05 12:42:58

+0

不用谢@Sebastien':D' – 2013-04-05 12:46:48

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, 

COUN t列表中列名不为空的所有寄存器

0

如果您专门选择列,并且稍后通过添加,删除或重命名列来更改表的结构,那么您将被迫编辑查询以使他们工作(或者,在添加列的情况下,包括附加数据)。选择*将加载所有列,无论这些列是什么,所以如果表结构稍后更新,您的查询仍然可以完全工作。但是,如果您的查询意图包含连接,则需要在表名称前附*,如果两个表都具有相同名称的列,则存在列名冲突的风险。因此,在加入查询的情况下,我认为从每个表中选择单个列是一个好主意,而不是从一个表中选择*,从另一个表中选择各个列。

选择单个列,您还可以使用别名重命名列,如这样的:

SELECT column_1 AS first, column_2 AS second 
FROM some_table 
0

作为一项规则,避免“SELECT *”。这是邪恶的,缓慢的,并让你的代码难以阅读,当你几个月后回到它。相反,请命名并限定您的列。别名您的表实例(和你列太多,如果你喜欢)...

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

如果你看看我的许多其它响应上的话,你会看到,我并不总是听从这一建议,但尽管如此,这是个好建议!

相关问题