sql连接查询问题总结
2015-04-08 22:19
447 查看
-------- select hbsrsn, length(hbsrsn) from fxxx_jz_zk; select hbsrsn, case length(hbsrsn) when 20 then '国用户' else '地用户' end 用户类别 from fxxx_jz_zk where hbsrsn = &hbsrsn; ------join 连接 select f.jf_lsh, f.tclx_mc, s.tclx, s.hmlx, case dm.tcje when 0 then substr(sd.sj_value, 1, instr(sd.sj_value, '元', 1) - 1) else to_char(dm.tcje,'9999') end tcje, decode(dm.tcje, 0, substr(sd.sj_value, 1, instr(sd.sj_value, '元', 1) - 1), dm.tcje) ttje from jfxx_zk f join dm_tclx dm on f.tclx_dm = dm.tclx_dm join fxxx_jz_zk z on f.jf_lsh = z.jf_lsh left join sjxx_jf_zk s --- 连接查询记录 :员工不一定有部门,部门一定有员工 。 on (z.kpdw_dm = s.kpdw_dm and s.hmlx = 'Y') ----on 条件 对于left join 只能作用 右表 即 z.jf_lsh=xxxx 对左表无效 left join dm_sjxx sd ----- 此处用 join 也行 on (s.tclx = sd.sj_key and sd.type_dm = '02') where dm.tcje = &tcje or substr(sd.sj_value,1,instr(sd.sj_value,'元',1)-1)= &tcje; --sql有|| 吗。。。 -----(+) 连接查询 select nc.jf_lsh, nc.tclx_mc,nc.kpdw_dm, nc.hmlx, nc.tclx,nc.sj_key,nc.sj_value,nc.sjkpdw_dm, nc.tcjee, nc.ttje -----未明确定义列 内查询中存在不同表相同字段名, 外查询不能区分 from ( select f.jf_lsh, f.tclx_mc,z.kpdw_dm, sj.hmlx, sj.tclx,sj.sj_key,sj.sj_value,sj.kpdw_dm sjkpdw_dm, dm.tcje, case dm.tcje when 0 then substr(sj.sj_value, 1, instr(sj.sj_value, '元', 1) - 1) else to_char(dm.tcje,'9999') end tcjee, decode(dm.tcje, 0, substr(sj.sj_value, 1, instr(sj.sj_value, '元', 1) - 1), dm.tcje) ttje from jfxx_zk f , dm_tclx dm , fxxx_jz_zk z , (select s.*, sd.* from sjxx_jf_zk s, dm_sjxx sd where s.tclx = sd.sj_key and sd.type_dm = '02' ) sj where f.tclx_dm = dm.tclx_dm and f.jf_lsh = z.jf_lsh and z.kpdw_dm = sj.kpdw_dm(+) --至多外链接到其他一个表 不能再用(+)连接其他表 and sj.hmlx(+) = 'Y' ) nc where nc.tcje = &tcje or substr(nc.sj_value,1,instr(nc.sj_value,'元',1)-1)= &tcje; ---or 或 in 不允许使用 (+) 单层查询无法实现该功能 --------------------on 子句 和 where子句的区别 select z.hbsrsn, z.jf_lsh, s.sjhm from fxxx_jz_zk z left join sjxx_jf_zk s on z.kpdw_dm = s.kpdw_dm and s.sjhm <> '11171557711' where s.sjhm = '11171557711' order by z.yxrq ---结果集为空 select z.hbsrsn, z.jf_lsh, s.sjhm from fxxx_jz_zk z left join sjxx_jf_zk s on z.kpdw_dm = s.kpdw_dm and z.jf_lsh <>'24155' where z.jf_lsh ='24155'; order by z.yxrq -------结果集 有一条记录 select z.hbsrsn, z.jf_lsh, s.sjhm from fxxx_jz_zk z join sjxx_jf_zk s on z.kpdw_dm = s.kpdw_dm and z.jf_lsh <>'24155' where z.jf_lsh ='24155' order by z.yxrq --------结果集为后空 总结:1. where字句作用于 表关联后的结果集(笛卡尔集), 而on 子句 作为表关联条件, and 后的子句( z.jf_lsh <>'24155') 也是关联条件 2. on 子句 作为表关联条件, and 后的条件子句( z.jf_lsh <>'24155') left join 时 只能作用于 右表, right join 只作用于左表, 内连接时 可作用 左右两表
相关文章推荐
- [sql server] 问题总结10---sql多表连接查询
- 关于sql连接查询问题
- 关于数据库查询语句SqlDataReader的连接释放问题的解决办法
- Hibernate中关于多表连接查询hql 和 sql 返回值集合中对象问题
- sql连接查询语句中on、where筛选的区别总结
- MySQL——查询sql总结:简单查询、连接查询、子查询
- SQL连接查询总结
- SQL连接查询总结和练习
- PL/SQL连接Linux服务器Oracle遇到的问题总结
- JSP中连接SQL 2000数据库的问题总结
- Oracle SQL使用笛卡尔连接、正则表达式和层次查询、union all、unpiovt 解决多列值筛选、列转行问题
- Sql常见问题总结二(Sql语句怎么样查询IP,游标去重复,各种函数使用,各种取时间格式,字符串精确排序,超时锁问题)
- Hibernate中关于多表连接查询hql 和 sql 返回值集合中对象问题
- sql 连接查询总结
- PL/SQL连接Oracle10g的问题总结
- C#和SQL Server2000数据库连接,查询语句总结
- JSP中连接SQL 2000数据库的问题总结
- Sql常见问题总结二(Sql语句怎么样查询IP,游标去重复,各种函数使用,各种取时间格式,字符串精确排序,超时锁问题)
- 在使用Hibernate时,因为一个查询需要更多的表连接而要使用SQL来解决性能问题。然而返回的结果集中包含了没有映射的Entity类中的表字段,在这个SQL中还有使用如何将层次关系的父子结点显示为横行
- 看一看关于在sql查询过程中的连接问题