如果我为我的表命名,为啥 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 查询顺序会发生变化? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

为我的 SQL 查询获取错误的输出 - 为啥会这样?

为啥当我为我的 CABasicAnimation 设置低持续时间值时它会跳跃?

为啥我的所有 SQL 查询都必须使用 ` 符号包装?

为啥 subselect 会使 SQL 请求变慢?

为啥我的 Postgres SQL 查询不使用索引

为啥 MariaDB 不接受我的字符串变量作为我的 sql 查询中的表名?