发布两个问题:
1。
假设有一个查询:
SELECT C1, C2, C3 from TABLE
;
首次触发此查询时,它将以特定顺序检索所有值。
下次触发相同的查询时,是否会保留以前的顺序?
({SELECT * from TABLE1
)和(SELECT * from TABLE1
)会检索相同顺序的行吗?
答案 0 :(得分:1)
SQL表表示无序集。期。除非您明确包含ORDER BY
,否则结果集中没有排序。
就是这么简单。如果要按特定顺序排列数据,则需要使用ORDER BY
。关系数据库就是这样工作的。
每次执行查询时,同一查询可以按不同顺序返回结果。没有关于顺序的保证-除非查询的最外面的ORDER BY
有一个SELECT
。
答案 1 :(得分:1)
很抱歉,您可以得到额外的答案,但是我发现Tim声称只要基础表未修改且查询具有相同的执行计划,该查询将返回相同的结果。
雪花并行执行查询,因此除非使用ORDER BY,否则数据的顺序是不可预测的。
我们创建一个表(足够大以并行处理),然后运行一个简单的测试用例:
-- running on medium warehouse
create or replace table my_test_table ( id number, name varchar ) as
select seq4(), 'gokhan' || seq4() from table(generator(rowcount=>1000000000));
alter session set USE_CACHED_RESULT = false;
select * from my_test_table limit 10;
您会看到,每次运行它都会返回不同的行。
答案 2 :(得分:0)
要简短回答两个问题:否。
如果您的查询没有ORDER BY子句,则SELECT语句始终返回无序集。这意味着:即使您查询同一张表两次并且数据没有更改,没有ORDER BY的SELECT也可以检索不同的行顺序。