这里是个例:什么是在MySQL SELECT查询*和列名之间的差异
表1 -columnA -columnB
问:
是什么
SELECT * FROM Table1
之间的区别
and
SELECT columnA, columnB FROM Table1
我知道这两个查询返回相同的结果。但有没有区别,或者这两个查询是否完全相同?
此外,MySQL服务器如何处理这些?
有人可以指出任何文件吗?
谢谢!
塞巴斯蒂安
这里是个例:什么是在MySQL SELECT查询*和列名之间的差异
表1 -columnA -columnB
问:
是什么
SELECT * FROM Table1
之间的区别
and
SELECT columnA, columnB FROM Table1
我知道这两个查询返回相同的结果。但有没有区别,或者这两个查询是否完全相同?
此外,MySQL服务器如何处理这些?
有人可以指出任何文件吗?
谢谢!
塞巴斯蒂安
没有区别。这是列投影的问题。
当您使用*
时,您无法控制列名称。它只是选择你的表中的所有列。
在指定的列名可以更加灵活,在我自己的意见,因为你可以给列名的alias
,您可以执行在列的一些行动,如将其传递到函数。
select * from table1
返回Table1中的所有列。
参考手册http://dev.mysql.com/doc/refman/5.1/en/index.html(MySQL 5.1中)
谢谢你的文档! – Sebastien 2013-04-05 12:40:32
这是不同之处:
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列表中列名不为空的所有寄存器
如果您专门选择列,并且稍后通过添加,删除或重命名列来更改表的结构,那么您将被迫编辑查询以使他们工作(或者,在添加列的情况下,包括附加数据)。选择*
将加载所有列,无论这些列是什么,所以如果表结构稍后更新,您的查询仍然可以完全工作。但是,如果您的查询意图包含连接,则需要在表名称前附*
,如果两个表都具有相同名称的列,则存在列名冲突的风险。因此,在加入查询的情况下,我认为从每个表中选择单个列是一个好主意,而不是从一个表中选择*
,从另一个表中选择各个列。
选择单个列,您还可以使用别名重命名列,如这样的:
SELECT column_1 AS first, column_2 AS second
FROM some_table
作为一项规则,避免“SELECT *”。这是邪恶的,缓慢的,并让你的代码难以阅读,当你几个月后回到它。相反,请命名并限定您的列。别名您的表实例(和你列太多,如果你喜欢)...
SELECT x.something, y.something_else FROM my_table x JOIN my_other_table y ON y.id = x.id
如果你看看我的许多其它响应上的话,你会看到,我并不总是听从这一建议,但尽管如此,这是个好建议!
此外,当某人在将来向表中添加columnC时,'select *'的行为与'SELECT columnA,columnB'的行为不同。 – nos 2013-04-05 12:37:56
谢谢你这是非常有益的,并回答了我的所有问题!并感谢@AlessandroFalivene的文档! – Sebastien 2013-04-05 12:42:58
不用谢@Sebastien':D' – 2013-04-05 12:46:48