我是SQL新手。
我使用“order by”对SQL上的两个大表进行排序,IBM的netezza。
表格是:
col1 INT
col2 INT
col3 INT
col4 DOUBLE PRECISION
INSERT INTO mytable
SELECT *
FROM table1 AS t1
ORDER BY t1.col1 , t1.col2, t1.col3, t1.col4 ASC
排序后,我检查前100行:
SELECT *
FROM mytable
LIMIT 100;
但是,每次运行前100行的SQL查询时,我都得到了不同的结果。
当我将表导出到txt文件时,同样的事情。
为什么?
谢谢!
答案 0 :(得分:4)
将数据插入表中的顺序毫无意义。除非使用order by
子句显式指定行,否则运行查询绝对不能保证返回的行顺序。由于不保证行的顺序,因此无法保证"前100"是的,因此每次运行查询时都可能得到不同的结果。
但是,如果确实在查询中指定了顺序,则应该得到一致的结果(假设前100行只有一个可能的结果,而不是,例如200行,其中任何100行可以被认为是有效的结果):
SELECT *
FROM mytable
ORDER BY col1, col2, col3, col4 ASC
LIMIT 100;
答案 1 :(得分:1)
虽然序列可能与插入数据的顺序相匹配,但不保证序列。如果您需要按特定顺序使用它,请使用ORDER BY。
答案 2 :(得分:1)
你需要将order by用于select查询,并且在order by子句之后不必强制写 ASC ,因为默认排序将按升序排列
SELECT *
FROM mytable t1
ORDER BY t1.col1 , t1.col2, t1.col3, t1.col4
LIMIT 100;
答案 3 :(得分:0)
您需要将order by
应用于Select
声明
答案 4 :(得分:0)
ORDER BY
也属于SELECT
查询:
SELECT *
FROM mytable t1
ORDER BY t1.col1 , t1.col2, t1.col3, t1.col4 ASC
LIMIT 100;