oracle 工作中的遇到的代码

本文深入探讨了Oracle SQL中的集合操作命令Union、UnionAll、Intersect和Minus,通过具体实例展示了这些命令如何处理结果集,包括对重复数据的处理、排序规则及如何自定义排序。

SELECT A.*,INTRUST_PLAN.c_cprcompany_type,INTRUST_PLAN.c_pbccode,INTRUST_PLAN.c_pbcasset_code,INTRUST_PLAN.c_pbcasset_name,INTRUST_PLAN.c_invest_object ,STANDERD_DATA.c_pool_code FROM (select financ.fld_type,
                       financ.fld_code,
                       financ_info.fld_financ_name,
                       financ.fld_asset_type,
                       financ.fld_asset_code,
                       financ.fld_asset_name,
                       sum(financ.fld_amount) amount
                  from tb_financ_investassetno financ,
                       tb_financing_info       financ_info
                 where financ.fld_code = financ_info.fld_financ_code
                   and financ.fld_queue = '2'
                   and financ.fld_status = '1'
                   and financ.fld_transdate <= '20130717'
                 group by financ.fld_type,
                          financ.fld_code,
                          financ.fld_asset_type,
                          financ.fld_asset_code,
                          financ.fld_asset_name,
                          financ_info.fld_financ_name
                union
                select abundle.fld_type,
                       abundle.fld_code abundle_fld_code,
                       abundle_info.fld_assetbundle_name abundle_fld_name,
                       abundle.fld_asset_type,
                       abundle.fld_asset_code,
                       abundle.fld_asset_name,
                       sum(abundle.fld_amount) amount
                  from tb_abundle_investassetno abundle,
                       tb_assetbundle_info      abundle_info
                 where abundle.fld_code = abundle_info.fld_assetbundle_code
                   and abundle.fld_queue = '2'
                   and abundle.fld_status = '1'
                   and abundle.fld_transdate <= '20130717'
                 group by abundle.fld_type,
                          abundle.fld_code,
                          abundle.fld_asset_type,
                          abundle.fld_asset_code,
                          abundle.fld_asset_name,
                          abundle_info.fld_assetbundle_name) A left join atintrust_plan INTRUST_PLAN
                          on A.fld_asset_code=INTRUST_PLAN.C_PRD_CODE   left join  atstanderd_data STANDERD_DATA
                          on STANDERD_DATA.C_PROD_CODE=INTRUST_PLAN.c_prd_code
------------------------------------------------------------------------------------------------------------------------
Oracle中的Union、Union All、Intersect、Minus

众所周知的几个结果集集合操作命令,今天详细地测试了一下,发现一些问题,记录备考。

假设我们有一个表Student,包括以下字段与数据:

drop table student;

create table student
(
id int primary key,
name nvarchar2(50) not null,
score number not null
);

insert into student values(1,'Aaron',78);
insert into student values(2,'Bill',76);
insert into student values(3,'Cindy',89);
insert into student values(4,'Damon',90);
insert into student values(5,'Ella',73);
insert into student values(6,'Frado',61);
insert into student values(7,'Gill',99);
insert into student values(8,'Hellen',56);
insert into student values(9,'Ivan',93);
insert into student values(10,'Jay',90);

commit;

    Union和Union All的区别。

select *
from student
where id < 4

union

select *
from student
where id > 2 and id < 6

结果将是

1    Aaron    78
2    Bill    76
3    Cindy    89
4    Damon    90
5    Ella    73

如果换成Union All连接两个结果集,则返回结果是:

1    Aaron    78
2    Bill    76
3    Cindy    89
3    Cindy    89
4    Damon    90
5    Ella    73

可以看到,Union和Union All的区别之一在于对重复结果的处理。

接下来我们将两个子查询的顺序调整一下,改为

--Union

select *
from student
where id > 2 and id < 6

union

select *
from student
where id < 4

看看执行结果是否和你期望的一致?

--Union All

select *
from student
where id > 2 and id < 6

union all

select *
from student
where id < 4

那么这个呢?

据此我们可知,区别之二在于对排序的处理。Union All将按照关联的次序组织数据,而Union将进行依据一定规则进行排序。那么这个规则是?我们换个查询方式看看:

select score,id,name
from student
where id > 2 and id < 6

union

select score,id,name
from student
where id < 4

结果如下:

73    5    Ella
76    2    Bill
78    1    Aaron
89    3    Cindy
90    4    Damon

和我们预料的一致:将会按照字段的顺序进行排序。之前我们的查询是基于id,name,score的字段顺序,那么结果集将按照id优先进行排序;而现在新的字段顺序也改变了查询结果的排序。并且,是按照给定字段a,b,c...的顺序进行的order by。即结果是order by a,b,c...........的。我们看下一个查询:

select score,id,name
from student
where id > 2

union

select score,id,name
from student
where id < 4

结果如下:

56    8    Hellen
61    6    Frado
73    5    Ella
76    2    Bill
78    1    Aaron
89    3    Cindy
90    4    Damon
90    10    Jay
93    9    Ivan
99    7    Gill

可以看到,对于score相同的记录,将按照下一个字段id进行排序。如果我们想自行控制排序,是不是用order by指定就可以了呢?答案是肯定的,不过在写法上有需要注意的地方:

select score,id,name
from student
where id > 2 and id < 7

union

select score,id,name
from student
where id < 4

union

select score,id,name
from student
where id > 8
order by id desc

order by子句必须写在最后一个结果集里,并且其排序规则将改变操作后的排序结果。对于Union、Union All、Intersect、Minus都有效。

=================================================================================================================

Intersect和Minus的操作和Union基本一致,这里一起总结一下:

Union,对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序;

Union All,对两个结果集进行并集操作,包括重复行,不进行排序;

Intersect,对两个结果集进行交集操作,不包括重复行,同时进行默认规则的排序;

Minus,对两个结果集进行差操作,不包括重复行,同时进行默认规则的排序。

可以在最后一个结果集中指定Order by子句改变排序方式。
----------------------------------------------------------------------------------------------------------------------------

Union与Union All的区别如果我们需要将两个select语句的结果作为一个整体显示出来,我们就需要用到union或者union all关键字。union(或称为联合)的作用是将多个结果合并在一起显示出来。 union和union all的区别是,union会自动压缩多个结果集合中的重复结果,而union all则将所有的结果全部显示出来,不管是不是重复。 Union:对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序; Union All:对两个结果集进行并集操作,包括重复行,不进行排序; select empno,ename from emp union select deptno,dname from dept 我们没有必要在每一个select结果集中使用order by子句来进行排序,我们可以在最后使用一条order by来对整个结果进行排序。例如: select empno,ename from emp union select deptno,dname from dept order by ename;    

-------------------------------------------------------------------------hundsun----------------------------------------
--在数据库中利用cast进行数据转换
select distinct cast(fld_asset_type as int) fld_asset_type,fld_asset_name from tb_asset_rule_info  order by cast(fld_asset_type as int) asc
--trim进行去掉空格
select * from tsys_parameter where trim(param_code) = 'user_code'

--大于最大日期的查询
SELECT A.*
  FROM ATSELF_INCOME A
 WHERE A.D_DATE = (SELECT MAX(D_DATE)
                     FROM ATSELF_INCOME
                    WHERE c_selfabundcode = A.c_selfabundcode
                      AND c_selfabundcode = 'AP90107550')
--exits的用法
select i.*
  from tb_assetbundle_info i
 where 1 = 1
   and exists (select c_financ_code
          from atproductorg prd_org
         where prd_org.c_financ_code = i.fld_assetbundle_code
           and prd_org.c_type = '2'
           and prd_org.c_org_id in ('0001'))
 order by fld_setupdate desc
--------------------------------------------- left join 在多表中添加了where---------
select f.*, b.branch_name
  from tb_financing_info f
  left join tsys_branch b on f.c_org_id = b.branch_code
 where 1 = 1
   and FLD_FINANC_CODE = '12013F113'
   and FLD_INNER_TYPE NOT IN ('1', '2')




                    
           
                          
 

内容概要:本文系统介绍了算术优化算法(AOA)的基本原理、核心思想及Python实现方法,并通过图像分割的实际案例展示了其应用价值。AOA是一种基于种群的元启发式算法,其核心思想来源于四则运算,利用乘除运算进行全局勘探,加减运算进行局部开发,通过数学优化器加速函数(MOA)和数学优化概率(MOP)动态控制搜索过程,在全局探索与局部开发之间实现平衡。文章详细解析了算法的初始化、勘探与开发阶段的更新策略,并提供了完整的Python代码实现,结合Rastrigin函数进行测试验证。进一步地,以Flask框架搭建前后端分离系统,将AOA应用于图像分割任务,展示了其在实际工程中的可行性与高效性。最后,通过收敛速度、寻优精度等指标评估算法性能,并提出自适应参数调整、模型优化和并行计算等改进策略。; 适合人群:具备一定Python编程基础和优化算法基础知识的高校学生、科研人员及工程技术人员,尤其适合从事人工智能、图像处理、智能优化等领域的从业者;; 使用场景及目标:①理解元启发式算法的设计思想与实现机制;②掌握AOA在函数优化、图像分割等实际问题中的建模与求解方法;③学习如何将优化算法集成到Web系统中实现工程化应用;④为算法性能评估与改进提供实践参考; 阅读建议:建议读者结合代码逐行调试,深入理解算法流程中MOA与MOP的作用机制,尝试在不同测试函数上运行算法以观察性能差异,并可进一步扩展图像分割模块,引入更复杂的预处理或后处理技术以提升分割效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值