这是一个例子:
表1 -columnA -columnB
问题:
之间有什么区别
SELECT * FROM Table1
和
SELECT columnA, columnB FROM Table1
我知道这两个查询返回相同的结果。但是,这两个查询是否存在差异或完全相同?
此外,MySQL服务器如何处理这些?
有人可以指出任何文件吗?
谢谢!
的Sebastien
答案 0 :(得分:4)
没有区别。这是列投影的问题。
使用*
时,无法控制列名称。它只选择表中的所有列。
虽然指定列名可以更灵活,但我自己认为 ,因为您可以为列名提供alias
,并且您可以在列中执行某些操作,例如传递它进入功能。
答案 1 :(得分:0)
答案 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上的其他许多回复,你会发现我并不总是听从这个建议,但这仍然是一个很好的建议!