//有时候,我们会将进过排序(order by)后的结果集与
//其他经过排序的结果集进行合并(union or union all)
//比如:
select * from tb where length(id)=5 order by id desc
union all
select * from tb where length(id)=10 order by id asc
//通常情况下,上面的查询将会得到下面的错误提示:
//ORA-00933: SQL command not properly ended
//错误指向union关键字这里
//下面我们来看一个具体的实例:
//
create table t as
select 'china' col_1,'america' col_2,'canada' col_3,-1 status from dual union all
select '花生','瓜子','绿豆',0 from dual union all
select '牙膏','牙刷','杯子',3 from dual union all
select '芍药','牡丹','月季',1 from dual union all
select '优乐美','香飘飘','炸鸡',2 from dual
/
//需求:
//有如上表t,status字段的取值范围:[-1,3]
//我们想要做的是,按照这样的方式排序0,1,2,3,-1
//
//解法:
//更具题义,我们需要将status分为两个区域(>0 和<0)
//然后分别对每一个区域内的数据进行order by排序
//于是有下面的查询
select col_1,col_2,col_3,status
from t
where status >= 0
order by status --1
union
select col_1,col_2,col_3,status
from t
where status < 0
order by status --2
/
//不幸的是,正如刚刚开始时我提示的一样,我们得到了下面的错误提示:
//ORA-00933: SQL command not properly ended
//如果将第一个select语句的order by子句去掉,得到的又不是我们想要的结果
//如果将两个排序子句都去掉的话,虽然按照status为正负数分开了,但是没有排序
//下面我们来看看正确的答案吧!
//解法一:
select * from (
select col_1,col_2,col_3,status
from t
where status >= 0
order by status)
union all
select * from (
select col_1,col_2,col_3,status
from t
where status < 0
order by status)
/
COL_1 COL_2 COL_3 STATUS
------ ------- ------ ----------
花生 瓜子 绿豆 0
芍药 牡丹 月季 1
优乐美 香飘飘 炸鸡 2
牙膏 牙刷 杯子 3
china america canada -1
//解法二:
select * from t
order by
decode(status,
-1,1,
3,2,
2,3,
1,4,
0,5) desc
/
//这可是一个很妙的排序,本人首次看到在order by语句中可以使用decode()函数来排序
//同理,我们也可以使用case语句来排序:
//解法三:
select * from t
order by
case status
when -1 then 5
when 3 then 4
when 2 then 3
when 1 then 2
else 1
end
/
//union 和union all中都支持order by和group by排序和分组子句
laizi:http://hi.baidu.com/leeyoungtek/blog/item/8b5416da768e76c5b6fd4890.html
相关推荐
union all与order by用法,并详细举例,oracle pl/sql
union all select distinct lower(all_c.table_name) table_name --,(case -- when column_id || to_char(column_id) -- when column_id (column_id) -- when column_id > 100 then 'H' || substrb(to_char...
1.41 用WHERE替代ORDER BY 25 1.42 避免改变索引列的类型. 26 1.43 需要当心的WHERE子句 27 1.44 连接多个扫描 28 1.45 CBO下使用更具选择性的索引 29 1.46 避免使用耗费资源的操作 29 1.47 日期使用 29 1.48 使用...
4.2.1 UNION和UNION ALL 103 4.2.2 MINUS 106 4.2.3 INTERSECT 107 4.3 集合与空值 108 4.3.1 空值与非直观结果 108 4.3.2 集合运算中的空值行为 110 4.3.3 空值与GROUP BY和ORDER BY 112 4.3.4 空值与聚合...
一、ORACLE的启动和关闭 1、在单机环境下 要想启动或关闭ORACLE系统必须首先切换到ORACLE用户,如下 su - oracle a、启动ORACLE系统 oracle>svrmgrl SVRMGR>connect internal SVRMGR>startup SVRMGR>quit b、关闭...
oracle建议用户自己设计数据库管理和安全的权限规划,而不要简单的使用这些预定角色。将来的版本中这些角色可能不会作为预定义角色。 DELETE_CATALOG_ROLE, EXECUTE_CATALOG_ROLE,SELECT_CATALOG_ROLE这些角色...
SQL语句生成器的特色 支持几乎所有类型的数据库, ...联合(Union,对于Oracle 支持Union All,Minus,Intersect) 支持将SQL查询语句,替换为插入(Insert into)和更新(Update)语句 附属工具内嵌入Delphi IDE
§2.4.1 用 ORDER BY 子句来对结果进行排序 76 §2.4.2 用 BREAK 命令 来对结果进行排列 76 §2.4.3 用 COMPUTE 命令对结果进行格式化 79 §2.5 配置会话环境 82 §2.5.1 ARRAYSIZE(取回的行数) 82 §2.5.2 ...
1、支持几乎所有类型的数据库, 包括小型(桌面)数据库:...联合(Union,对于Oracle 支持Union All,Minus,Intersect) 4、支持将SQL查询语句,替换为插入(Insert into)和更新(Update)语句 4、附属工具内嵌入Delphi IDE
排序(Order By) 条件(Where) 分组(Group By) 分组条件(Having) 计算字段 SQL查询表 SQL查询子句 丰富的函数 表别名 字段别名(包括计算字段和非计算字段) 联合(Union,对于Oracle ...
排序(Order By) 条件(Where) 分组(Group By) 分组条件(Having) 计算字段 SQL查询表 SQL查询子句 丰富的函数 表别名 字段别名(包括计算字段和非计算字段) 联合(Union,对于Oracle ...
= like between is null in逻辑运算符:not and or 集合运算符: intersect ,union, union all, minus 要求:对应集合的列数和数据类型相同 查询中不能包含long 列 列的标签是第一个集合的标签 使用order by时...
<br>create or replace view ts_blocks_v as select tablespace_name,block_id,bytes,blocks,'free space' segment_name from dba_free_space union all select tablespace_name,block_id,bytes,...
2.4.10 尽量用union all替换union 13 2.4.11 使用DECODE函数来减少处理时间 13 2.4.12 group by优化 13 2.4.13 尽量避免用order by 14 2.4.14 用Where子句替换HAVING子句 14 2.4.15 使用表的别名(Alias) 14 2.4.16 ...
(3)Some、Any和All 53 五.表的查询练习 54 第七讲 PL/SQL编程基础 56 7.1 PL/SQL 程序结构 56 1.PL/SQL块结构 56 2.PL/SQL块的分类(按照特性划分) 56 7.2变量与常量 56 (一)PL/SQL标识符 (给变量命名) 56 ...
联合(Union,Union All,Minus,Intersect) 4、SQL语句反向分析 无论多么复杂的语句,都能分析出来(包括SQL各子句中嵌套的SQL语句) 5、数据库视图定义和重建 6、支持将SQL查询语句,替换为插入(Insert into)和更新...
9.4.3 ORDER BY子句排序UNION运算结果 9.4.4 对多表进行UNION运算 9.4.5 UNION JOIN 连接表 9.5 表连接的其他应用及注意问题 9.5.1 连接表进行聚合运算 9.5.2 多表连接的综合运用 9.5.3 多表连接...
3.8 联合 (Union [All],Minus,Intersect) 3.9 字段别名,数据表别名 3.10 SQL子查询表,内嵌SQL子句 4、粘贴字段、系统函数 5、SQL查询语句反向分析, 无论多么复杂的语句,都能分析得出来 包括上面提到...
3.8 联合 (Union [All],Minus,Intersect) 3.9 字段别名,数据表别名 3.10 SQL子查询表,内嵌SQL子句 4、粘贴字段、系统函数 5、SQL查询语句反向分析, 无论多么复杂的语句,都能分析得出来 包括上面提到...