oracle ebs 工作心得
更新时间:2023-10-17 16:37:01 阅读量: 综合文库 文档下载
- oracle推荐度:
- 相关推荐
PL/SQL 部分
select a.sno,a.sname , (select a.sname from dual a where rownum =1)
haa from song a;
--对于括号里的查询 select 列表里有个a 到底是指的是里面dual 还是外面的song表呢 当 dual 有 字段sname时 a.sname 只的就是dual 如果 dual根本没有字段sname 它会去外层查询 的表里找 如果 还没有 才会报错 有的话 就指的是外面的表 所以 最好明确 要指的是谁 这种情况简称最好保持 不一致
对于用外连接 还是用内连接的一些理解:
像此处 我商品信息基本表里保存了一个“外键”商品类别ID(其实没有真正的建立外键),用以关联外键信息(商品名称等等),我觉得我在建立这个块视图的时候 还是用外连接好, 理由如下:
我们先查看我们的商品类别的快速编码信息 画面如下:
现在我们删除第2行 我们发现我们成功了(我们也应该让他成功 不能因为这个电子类别 已经被引用了而不允许删除 再说 如果要这么做 也不科学 到时系统大了 我们也不确定这个快速编码会被哪些表引用 我们当然可以通过外键来实现 当被引用时不允许删除 但这样就不够灵活了 我们的数据库也不提倡建立外键),画面如下:
假如 如果我用内连接来连接类别 这时 我们在商品信息的form里将查不到以前用到过电子这一类别的 所有记录行了
分析如何判断是否用内连接还是用外连接: 1:我们可以分析哪个表的记录更重要 像这里我们的商品信息是更重要的 由于种种原因 可能商品类别会被篡改,删除等等 我们不能因为这些 就把原先有的商品信息过滤掉 不让它们显示出来
2:我们应该分析需求 ,比如我们要查看订单信息 想知道有多少张订单 即使没有订单行业没关系 或者 我只关心 订单头的信息 行的记录并不是很关心(也不是完全不关心 这里假设 只是稍微“关心”一下) 此时我们也应该用外连接
什么时候用内连接: 我们要求“查出来的结果”相互依存 有a必须有b 比如b表的信息很重要 有b必须有a 比如不然b记录作废 则此时我们就必须用内连接了 举例如下:
我们要查看某某商品的销售情况 如多少数量等等 比如订单头表为head 行表为line
我们应该写如下语句 select count(qty) from head h, line l where h.head_id=l.head_id and item_id=’abc’
理由:(head 在左 line 在右)
1 如果有头记录 没有行记录 我们直接排除 因为我们要数量 没有行记录则没有数量 这样我们排除掉了用左外连接
2:如果有行记录 没有头记录(正常情况,系统是不应该有这情况的) 像这样的行记录我们应该是认为无效的 作废的 所以右外连接 也不可取 3:根据上面的分析 我们应该用内连接
我觉得 我们到底用什么连接 应该视我们需要什么样的数据? 是否允许 有 a表的记录 然后没有b表的记录? 还是反之? 还是必须都互相有?
像上面的商品信息 关联类型信息一样,我们可以这样问自己: 1:我们的结果集里 当没有类型信息是 商品的信息还显示吗?
2:还是我们要的结果集里 必须有类型信息 不然 这样的商品信息不显示? 3:我们不应该这样问,因为数据库里 有商品信息表里是 肯定会有类型信息的 假设真这样的话 用内连接 和用外连接其实就结果一样了(商品信息表 内连接商品类型信息 和商品信息左外连接商品类型信息)
像第一个例子:我们不应该让小小的不重要的商品类型信息 影响到 商品信息的查看 商品信息在那form里是最主要的信息 用户想看到的信息 像第2个例子:我们需要数量 但是有过只有订单头 又有何用? 如果有订单行 没有头?这信息就是非法的 无效的 所以 这样的我们就用内连接
对oracle 连接写法的一些归纳 一些易错的地方的分析 注意点1:
有一个表 song 记录如下:
有一个表song1记录如下:
我们执行如下查询
select a.sno as a_sno,b.sname as b_sname from song a, song1 b where a.sno=b.sno(+) 结果如下:
结果使我们预想的那样 没有错 然后我再执行如下查询:
select a.sno as a_sno,b.sname as b_sname from song a, song1 b where a.sno=b.sno(+) and b.sname<>'flash' 结果如下:
为什么会这样呢? 是因为我们加的b.sname<>'flash' 条件 是在表song和song1通
过连接a.sno=b.sno(+) 执行完之后 再筛选的
(那这里为什么第3行没有出来 是因为 第3行的B_SNAME 为null null也是不等于‘flash’的 null 是未知的 不等于任何值 也不“不等于”任何职)
分步:
连接完之后的结果集为:
再b.sname<>'flash' 筛选
结果集当然就变成这个了 如下:
(那这里为什么第3行没有出来 是因为 第3行的B_SNAME 为null null也是不等于‘flash’的 null 是未知的 不等于任何值 也不“不等于”任何职)
它并不是先通过b.sname<>'flash'去筛选 song1 表 再 连接的 如果是先筛选的话 其语句应该等同于下面的语句:
select a.sno as a_sno,b.sname as b_sname from song a, (select * from song1 where sname<>'flash') b where a.sno=b.sno(+)
其结果为:
根据以上 我们得出的结论是 b.sname<>'flash' 是连接结果集出来之后 再对那个结果集进行筛选.
注意点二:
如果我们所加的条件是针对左边的表 即
select a.sno as a_sno,b.sname as b_sname from song a, song1 b where a.sno=b.sno(+) and a.sname<>'flash' 其执行效果 和
select a.sno as a_sno,b.sname as b_sname from (select * from song where sname<>'flash') a, song1 b where a.sno=b.sno(+) 其结果集都为:
因为 左边的表为基表 先 筛选基表 再去连接 还是先连接 再筛选连接结果 其结果不难想象应该是一样 只是执行顺不一样而已
如果是内连接呢
select a.sno as a_sno,b.sname as b_sname from song a, song1 b where a.sno=b.sno and a.sname<>'flash' 的 执行结果 和
select a.sno as a_sno,b.sname as b_sname from (select * from song where sname<>'flash') a, song1 b where a.sno=b.sno 的执行结果也是一样的 (虽然 执行的顺序不同)
根据上面 我得出的结论是:
1:类似如 “其中一个表的字段(或相关的)= (或其他运算符)一个和另一个表无关的”where条件 他是不参与连接的 他是在连接后 再对连接结果进行筛选的 2:写左连接时(左表a 右表b) 如果 是进一步对a表进行删选 如a.id=123 等等 其和先对a表进行筛选 再来和b左连接 其效果是一样的 (右连接也一样)
如果是加 b.id=123这样的条件 我们就要注意了 我们就要分析 到底是要先对b进行筛选 还是 对最终结果的筛选 因为他们的执行结果是不一样的 不注意就会写错 如果 是要先 筛选b 再连接 我们就要这样写 123=b.id(+);(其实我们可以理解为 123是a表中的一个字段 中的值 对于a表每一行 其值都为123 如果我们是要对最终结果的筛选 直接写成123=b.id就好了
3:通过上面2的分析 对外连接的辅助表( 左连接时的右表 右连接时的左表) 添加类似id=123的where条件时 我们才需要格外主要 是否要在id后面加(+)号 因为 其他情况 其结果是一样的
补充说明:
现在执行如下查询:
select a.sno as a_sno, b.sname as b_sname from song a ,song1 b where a.sno=b.sno(+); 其结果为:
如果我只要连接 b表中 sname=’flash’的记录呢?即我要得出如下结果集 :
查询语句该怎么写呢 可以这样写:
select a.sno as a_sno, b.sname as b_sname from song a ,song1 b where a.sno=b.sno(+) and 'flash'=b.sname(+);
这里我们可以理解为 ‘flash’为a存在一列,而且其列值总为flash 即上面语句类似如下:
select a.sno as a_sno, b.sname as b_sname from (select 'flash' col ,song.* from song) a ,song1 b
where a.sno=b.sno(+) and a.col=b.sname(+);
如果我要限制左边表 我要的结果集是: 只有a表中sno=5的才去连接 b表中的sno 该怎么写呢? 我们这样写是错:
select a.sno as a_sno, b.sname as b_sname from song a ,song1 b where a.sno=b.sno(+) and a.sno=5(+) ;
根据上面的变通写法 我们可以把5理解为b中存在一列 其列值总为5,即我们可以这样写:
select a.sno as a_sno, b.sname as b_sname from song a , (select 5 as col , song1.* from song1) b
where a.sno=b.sno(+) and a.sno=b.col(+) 我们得到的结果集为:
这正是我们要的结果.
正在阅读:
oracle ebs 工作心得10-17
2006海峡两岸财金趋势研讨会08-05
食品广告语大全02-19
《指南解读》提纲10-24
阅读课堂新常态:\\"1+X\\"09-29
推进基层网格化管理的思考07-18
饲料中主要原料的品质判断及注意事项小册子12-21
- 2009中西部家居博览会总体策划
- 2009 Revit 1级工程师学生用
- 天津地铁建设工程试验检测机构管理办法(TJDT-ZY-AQ-29)
- 新四年级数学暑期班第七次教案
- 机械制造企业隐患排查治理检查表 - 图文
- 2008届全国百套高考数学模拟试题分类汇编-103概率与统计解答题 -
- 职场健身防病试题及答案
- Excel操作技巧大全II - --数据输入和编辑技巧
- 南开大学2018春季《行政管理学》离线作业考核答案
- 2015年医师定考简易程序试卷及答案
- 新《预算法》对行政事业单位预算管理的挑战解读
- 轴的课件
- 电动汽车充电桩设计 毕业论文
- 必修2、选修2-1、1-1期末模拟试题2
- 桌面远程运维管理系统实施-可行性研究报告120306
- 西气东输水土保持工程工作总结 - 图文
- 正宁县基本县情及经济社会发展情况简介
- SATWE参数设置(巨详细)
- 儒家法思想研究综述
- 生活家政服务电子商务平台建设运营整合方案书【审报完稿】
- 心得
- oracle
- 工作
- ebs
- 古镇新徽学校消防应急演练方案
- 外科护理学第7-9章习题
- 2011年江苏省普通高校“专转本”专业计划表(按报考类别排列)
- 上海市英语高级口译资格证书第二阶段考试
- 三年级上册英语期中考试试卷分析
- 英语划分句子成分练习题及答案
- 讲故事稿件1
- 七年级劳动与技术教案
- 《探索建设社会主义的道路》 教学设计与教学反思
- 新课标人教版语文五年级下册五年级语文第四大周周周清
- 综合部门面试题
- 2014黑龙江公务员考试行测技巧:“数学常识”秒杀数学运算
- 上海通用汽车有限公司物流成本控制案例
- 关于国内外反腐败制度的研究
- 客户拒绝保险的话术
- 蚕桑丝古诗词
- 中国核电用波纹管阀门资料
- 传感器(不全的,需自行补)
- 2016最新红头文件行文格式(联合行文)发文纸
- 政府采购合同(工程类参考)