如果我为我的表命名,为啥 SQL 查询顺序会发生变化? [关闭]
Posted
技术标签:
【中文标题】如果我为我的表命名,为啥 SQL 查询顺序会发生变化? [关闭]【英文标题】:Why does the SQL query order changes if I name my table? [closed]如果我为我的表命名,为什么 SQL 查询顺序会发生变化? [关闭] 【发布时间】:2022-01-23 19:02:59 【问题描述】:一个问题:
执行标准 SQL 查询时,这两者有什么区别?因为我得到不同的排序:
SELECT col1, col2, col3 FROM database.table order by col2
SELECT col1, col2, col3 FROM database.table L order by col2
(命名为 L)
谢谢
【问题讨论】:
你能告诉我们区别吗? L 只是表名的别名 没有区别。请使用 DBFiddle 演示不同的排序。 你能分享一个例子吗? 【参考方案1】:执行标准 SQL 查询时,这两者有什么区别?因为我得到不同的排序:
它们是不同的查询,因此与运行相同的查询两次相比,它们更有可能获得不同的查询计划,尽管这也可能发生。
如果col2
不是唯一的,则按它进行排序不会强制对行进行完整排序,并且不同的查询计划可以产生不同的排序。
如果您需要稳定的排序,例如分页实现,请确保 ORDER BY 是唯一的。通常,您只需将 PK 列添加到 ORDER BY 的末尾。
【讨论】:
谢谢!!!确实:D【参考方案2】:L 只是表的别名。 在那个查询中它没有任何目的。
别名不会对 ORDER BY 子句定义的顺序产生影响。 col2 最多不是唯一的,在不同时间运行任一查询可能会更改 col1、col3 的顺序。
在连接多个具有共同列名的表时更有用。
例如。
SELECT
long_winded_table_name_full_of_stuff.id,
long_winded_table_name_full_of_stuff.name as name1,
other_table_not_named_by_a_golfcoder.name as name2
FROM long_winded_table_name_full_of_stuff
LEFT JOIN other_table_not_named_by_a_golfcoder
ON other_table_not_named_by_a_golfcoder.fk_id = long_winded_table_name_full_of_stuff.id
通过使用别名可以缩短它。
SELECT
s.id,
s.name as name1,
other.name as name2
FROM long_winded_table_name_full_of_stuff AS s
LEFT JOIN other_table_not_named_by_a_golfcoder AS other
ON other.fk_id = s.id
有助于提高可读性。 所以人们在查询中使用别名,即使表没有共同的列名。
【讨论】:
很好奇为什么你在这里删除了你的好答案***.com/questions/70441318/… @AlexGordon 他们正在争论使用 table 变量的方法如何无助于提高性能。所以这个答案无论如何都会被否决。我想你有足够的声誉来看到这个答案。 ;) 此外,您还有其他选择。交叉应用于值。就个人而言,我也认为应该为小东西保留这种方法。不是大报告。 谢谢你的洞察力以上是关于如果我为我的表命名,为啥 SQL 查询顺序会发生变化? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章