今天看代码发现了一个sql语句的字代码:
1.select *
from ccc.BOND_CODE_CONT b
left join ccc.BOND_RATE_CHAN c
on (b.bond_uni_code = c.bond_uni_code and
c.cur_inte_start_date <= sysdate and c.cur_inte_end_date >= sysdate);2.select *
from ccc.BOND_CODE_CONT b, ccc.BOND_RATE_CHAN c
where b.bond_uni_code = c.bond_uni_code(+) and
c.cur_inte_start_date <= sysdate and c.cur_inte_end_date >= sysdate;
这两个语句有什么区别?
第一个语句的等价语句是什么??
1.select *
from ccc.BOND_CODE_CONT b
left join ccc.BOND_RATE_CHAN c
on (b.bond_uni_code = c.bond_uni_code and
c.cur_inte_start_date <= sysdate and c.cur_inte_end_date >= sysdate);2.select *
from ccc.BOND_CODE_CONT b, ccc.BOND_RATE_CHAN c
where b.bond_uni_code = c.bond_uni_code(+) and
c.cur_inte_start_date <= sysdate and c.cur_inte_end_date >= sysdate;
这两个语句有什么区别?
第一个语句的等价语句是什么??
解决方案 »
- 有关oracle 数据块的 问题
- 通用数据库格式转换工具最新版,支持oracle,sqlsever,access等数据库之间数据格式转换
- 事务 怎么用
- 一个SQL语句的写法
- 如何查看包里面的有些什么函数和过程
- ◆有Oracle的client简单安装软件(方法)吗?
- ◆◆如何恢复我已经删除的数据◆◆
- 如何查找数据库中前十条记录?select top 10 * from table ?
- 在线等待一个函数得编写:有关将一个会计月份(2003/03)变为前一年会计月份(2002/03)
- 8i移植
- 求解:ora-28547:连接服务器失败,可能是 Oracle Net 管理失败
- 有关oracle数据库的问题
on : 条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录
where 是生成临时表之后再对结果集进行筛选所以 第一个语句得到的结果集 是返回ccc.BOND_CODE_CONT 这个表的全集的
而第二个语句的结果集 可能被 c.cur_inte_start_date <= sysdate and c.cur_inte_end_date >= sysdate 给筛选掉了第一个语句的等价语句是:select *
from ccc.BOND_CODE_CONT b
left join (select * from ccc.BOND_RATE_CHAN where cur_inte_start_date <= sysdate and cur_inte_end_date >= sysdate) c
on b.bond_uni_code = c.bond_uni_code where 1=1;务必要弄清楚 on 与 where 的区别
tab1
id name
1 jack
2 kate
3 locktab2
name value
jack 2
kate 3select * from tab1 left join tab2 on(tab1.name=tab2.name and tabl2.value=2);
这个语句得到的结果集是3条select * from tab1 left join tab2 on(tab1.name=tab2.name) where tabl2.value=2;
下面的语句得到的结果就只有1条了
都是进行左外连接。
第1个语句为SQL92的写法,而第2个语句为SQL89的写法。可以加上数据实测一下。
select *
from ccc.BOND_CODE_CONT b, ccc.BOND_RATE_CHAN c
where b.bond_uni_code = c.bond_uni_code(+) and
c.cur_inte_start_date(+) <= sysdate and c.cur_inte_end_date(+) >= sysdate;