Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 按数据库顺序获取数据,而不进行排序_Sql_Sql Server_Sql Server 2008 - Fatal编程技术网

Sql 按数据库顺序获取数据,而不进行排序

Sql 按数据库顺序获取数据,而不进行排序,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我在SQL数据库中有一个包含ShipCountry、ShipCity和货运列的表。我尝试使用下面的查询从该表中检索数据 Select ShipCountry from CountryDetails Group by ShipCountry 如果我运行此查询,我将按升序获得结果。我需要的不是这个,而是数据库顺序中的数据。如何通过SQL查询实现这一点 注意:如果我运行下面的查询,它将按数据库顺序返回数据。当我在查询中添加GROUPBY子句时,我得到的是已排序的数据 Select ShipCount

我在SQL数据库中有一个包含ShipCountry、ShipCity和货运列的表。我尝试使用下面的查询从该表中检索数据

Select ShipCountry from CountryDetails Group by ShipCountry
如果我运行此查询,我将按升序获得结果。我需要的不是这个,而是数据库顺序中的数据。如何通过SQL查询实现这一点

注意:如果我运行下面的查询,它将按数据库顺序返回数据。当我在查询中添加GROUPBY子句时,我得到的是已排序的数据

Select ShipCountry from CountryDetails

使用group by进行订购是不正确的。。(分组依据用于聚合函数,如最小值、最大值或计数)

如果您需要特定的订单,请改用
orderby

Select ShipCountry from CountryDetails Order  by ShipCountry
否则如果不想简单的订购使用

Select ShipCountry from CountryDetails
请记住,存储在db中的值没有正确的顺序..,并且是按照用于检索数据的顺序选择的

每次您需要订单时,必须特别使用订单

为了避免“冗余值”。。使用独特而非分组方式,例如:

Select distinct ShipCountry from CountryDetails

如果您希望在大多数情况下具有相同的数据库顺序,如果您按主键排序,则在没有排序的情况下,它将与您所说的相同:

此处id是主键,如果无法使用主键,请添加标识列并使用它:

身份证名称

1珐茵岚

2艾哈迈德

3约瑟夫


4 omar

如前所述,您所描述的内容可能会给最终用户带来意想不到的结果

假设您有一个没有任何索引或键的表(所谓的堆)。一堆信息几乎可以比作一本电话簿(是的,我已经有一段时间了),它由数百页组成,上面的信息是随机排列的。一堆就是这样;大量随机排列的数据。无论何时从这样的表进行查询,查询分析器都会尽最大努力找出传递数据的最快方式

来自查询分析器的此类决策由统计信息指导;关于数据及其分布的度量的集合。SQLServer使用这些统计信息来计算基数(值的唯一性),从而选择返回数据的最快方式

当您在堆上简单地发出一个
SELECT*FROM myTable
时,这些统计信息将决定返回数据的顺序。然而,这也意味着随着时间的推移,随着更多数据流入表中,统计数据将发生变化。这样做的结果是,今天数据的排序顺序不一定是明天甚至五分钟后返回数据的排序顺序


如果您的最终用户对此没有意见,那么
SELECT*FROM myTable
就是适合您的解决方案。但是,如果您确实需要按特定顺序返回数据,则应始终实现一个
orderby
子句。

Hello。你的问题有点不清楚。能否请您提供一组虚构的数据,以及您希望查询的结果是什么?谢天谢地,这里没有真正的“数据库顺序”概念。这只是数据库从内存/磁盘加载行的顺序。这可能会随着时间的推移、数据库重启之间等发生变化。感谢您的回复。这里我提到的数据库顺序是表中存储或输入的数据顺序。从您的角度来看,在数据库重启之间,数据库顺序可以随时间而改变。您使用的是MySQL还是MS SQL Server?不要标记未涉及的产品。没有使用聚合函数时,为什么按分组?你想做什么?谢谢。我不想点菜。我只使用了下面的查询。从CountryDetails中选择ShipCountry如果我运行此选项,它将返回冗余的ShipCountry值。为了避免冗余值,我在查询中添加了GROUPBY子句。我的目标是,我不想要像asc或desc这样的顺序,也不想要冗余数据。@UmapathyS,只要您意识到数据库顺序可以在任何给定时间因数据分布的变化而改变。这意味着您的结果集的排序顺序可能会从一天更改到另一天。如果这是你可以接受的,那就用
中选择。我已经更新了答案,添加distinct以删除重复的值。@scaisEdge只是想让他完全知道他在问什么;)当我们收到关于网格中排序顺序改变的投诉时,我看到了这种情况。事实证明,那天早上,表上的统计数据导致查询优化器以与以前不同的顺序返回数据。@schmitz如果您已经准确地描述了情况。。这是一个很好的评论。。如果你把它作为一个答案/建议值得投赞成票。。如果每张桌子都有PK,请告诉我。在野外,很多时候,表只是一堆,这要感谢那些不懂数据库的开发人员:(欢迎(“我明白你说的:”),每个表只有一个PK,标识不是PK,PK可能是标识,PK可能是文本,如果是文本,则所需订单将不可用,因此,通过添加新的数字标识列,可以提供所需订单