我已经合并了两个子查询的结果。
1)Oracle的UNION
自动对合并表进行升序排序吗?
2)我没有在子查询中指定别名M。合法吗?
CREATE TABLE T4 (
C0 VARCHAR2(10),
C1 VARCHAR2(10),
C2 NUMBER
);
INSERT INTO T4 VALUES ('a','abd',1);
INSERT INTO T4 VALUES ('a','abd',2);
INSERT INTO T4 VALUES ('a','abe',3);
INSERT INTO T4 VALUES ('a','abe',4);
INSERT INTO T4 VALUES ('a','ace',5);
INSERT INTO T4 VALUES ('a','ace',6);
INSERT INTO T4 VALUES ('b','abd',1);
INSERT INTO T4 VALUES ('b','abd',2);
INSERT INTO T4 VALUES ('b','abe',3);
INSERT INTO T4 VALUES ('b','abe',4);
INSERT INTO T4 VALUES ('b','ace',5);
INSERT INTO T4 VALUES ('b','ace',6);
SELECT ROWNUM,rr.C0,rr.M, rr.ss
FROM
(
SELECT C0,C1 M, SUM(C2) ss FROM T4 GROUP BY C0, C1
UNION
SELECT C0,SUBSTR(C1,1,1)||'__' , SUM(C2) ss FROM T4 GROUP BY C0,SUBSTR(C1,1,1) --I didn't specify alias M. Is it legal?
) rr
ORDER BY rr.C0,rr.M ASC; --Without this, the same result shows. So, Oracle UNION sorts merged table in ascending order automatically?
答案 0 :(得分:2)
否。 Oracle使用内部机制来合并两个查询并删除重复项。该 可能 也包括排序,但完全取决于优化程序来决定。所以永远不要依赖它。如果要对结果进行排序,请提供ORDER BY
子句。
是的,这是合法的。 Oracle使用UNION
语句中第一个查询的名称来命名结果数据集中的列。