Mysql “如何”;“订购”;如果有相同的值,是否排序?

Mysql “如何”;“订购”;如果有相同的值,是否排序?,mysql,sql,sql-order-by,myisam,Mysql,Sql,Sql Order By,Myisam,假设有一张桌子: name | score A 100 B 98 C 99 D 99 E 99 F 98 和请求sql='select*from table order by score desc' 我知道顺序是100,99,99,99,98,98,但99和98中有几个值 我正在使用MyIsam,希望确保99和98中的顺序不会改变,即使我删除了一些元素。 例如,如果订单是C->D->E,我删除了D,那么我希望是C->E,但没有E->C

假设有一张桌子:

name | score
A      100
B      98
C      99
D      99
E      99
F      98
和请求sql='select*from table order by score desc'

我知道顺序是100,99,99,99,98,98,但99和98中有几个值

我正在使用MyIsam,希望确保99和98中的顺序不会改变,即使我删除了一些元素。 例如,如果订单是C->D->E,我删除了D,那么我希望是C->E,但没有E->C。
当有相同的顺序值时,它是否有任何逻辑工作?

SQLite以未指定的顺序存储表中的行。这意味着表中的行可能按插入顺序排列,也可能不按插入顺序排列

如果使用SELECT语句从表中查询数据,则结果集中的行顺序未指定。要对结果集进行排序,请在SELECT语句中添加ORDER BY子句,如下所示:

SELECT
   select_list
FROM
   table
ORDER BY
    column_1 ASC,
    column_2 DESC;
我希望这能对你有所帮助

SELECT * FROM table ORDER BY score DESC 
以上查询仅按分数排序数据。 如果您想按前面提到的另一个字段对数据进行排序,您可以将该字段也添加到查询中,如下所示。你提到你想按加入顺序(C>D>E)按姓名订购。所以我用ASC的订单。下面的查询将提供您请求的输出

SELECT * FROM table ORDER BY score DESC,name ASC
SQL表表示无序集。因此,当
orderby
键具有相同的值时,没有“默认”排序

从技术上讲,这意味着SQL中的排序是不稳定的。解决方法是添加一个或多个附加键,使每个组合都是唯一的

对于示例数据,可以使用
name

order by score desc, name

您还可以使用唯一标识每行的任何其他列(如果可用)。这些键在
分数之后

无法保证具有相等值的行是如何排序的;正如如果查询中没有ORDER BY,则无法保证行的顺序。唯一的保证方法是使用第二级排序,例如,
ORDER BY score DESC,name ASC
您可以使用主键列按列进行第二级排序,以确保即使在删除行
D
时也能按顺序排序。例如:在您的表中,如果主键中有name列,那么您的select查询将是
select*from table order by score desc,name asc
。该问题没有SQLite标记。