Oracle86和92语法的连接,子查询,集合的操作
生活随笔
收集整理的這篇文章主要介紹了
Oracle86和92语法的连接,子查询,集合的操作
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一 ?比較86和92語法中多表連接區別?
?
? ?1笛卡爾積?
?
? ?--oracle連接的基礎 笛卡爾積?
? ?--92語法 更加清晰明了的區別了 每一種連接 ?
? ? --解決了多表關聯時 ?條件不清晰的問題?
?
? ?select * from emp;?
? ? select * from dept;?
? ? --86語法?
?
? ?select * from emp e,dept d;?
?
? ? --92語法?
?
? ?select * from emp cross join dept?
? ? 2內連接?
? ?select * from emp;?
? ? select * from dept;?
? ? --86語法?
? ?select * from emp e,dept d where e.deptno=d.deptno;?
? ? --92語法?
? ?select * from emp inner join dept on emp.deptno=dept.deptno?
? ? 3左外連(左外連接和右外聯的區別在于 誰為主 誰為從 ?意義相同)?
? ?--86語法?
? ?select * from emp e,dept d where e.deptno=d.deptno(+)?
? ? --92語法?
? ?select * from emp e left join dept d on e.deptno=d.deptno?
-- oracle中子查詢?
? ? ? ? ? ? ? ? 表子查詢 ?只要輸出的結果是個表結構 就可以放在from后查詢 也可以設置別名?
? ? ? select abc.ename,abc.loc from (?
? ? ? ?select * from emp e inner join dept d on e.deptno=d.deptno?
? ? ? ?) abc;?
? ? ? ?select * from emp;?
? ? ? ?select * from dept;?
?
? ? ? ?/**?
?
? ? ? ? ? 列的子查詢 ?子查詢 永遠只能返回一行一列數據?
? ? ? ? ?列子查詢的原理?
?
? ? ? ? ?for(emp e: list<emp>){?
?
? ? ? ? ? ? ?syso(e.ename);?
?
? ? ? ? ? ? ?for(dept d: list<dept>){?
?
? ? ? ? ? ? ? ? if(e.deptno==d.deptno){?
?
? ? ? ? ? ? ? ? ? ? syso(d.dname)?
?
? ? ? ? ? ? ? ? ? ? ?break;?
?
? ? ? ? ? ? ? ? }?
?
? ? ? ? ? ? ?}?
?
? ? ? ? ? }?
?
? ? ? ?**/?
?
? ? ? ?select ename,(select dname from dept ?where deptno=e.deptno) from emp e; ?
? ? ? ? --條件子查詢?
? ? ? ?select * from tab;?
? ? ? ? select * from salgrade ?
? ? ? ? --薪水等級是2的人?
? ? ? ?select losal,hisal from salgrade where grade=2?
? ? ? ? select * from emp where sal>=(select losal from salgrade where grade=2)?
?
? ? ? ? ? ? ? and sal<=(select hisal from salgrade where grade=2)?
? ? ? ? select * from emp ?e inner join salgrade s on e.sal>=s.losal and e.sal<=s.hisal?
? ? ? ? where s.grade=2?
? ? ? ? ?/**?
?
? ? ? ? /**?
? ? ? ? --多行子查詢?
?
? ? ? ? for(emp e: list<emp>){?
?
? ? ? ? ? ? ?syso(e.ename);?
?
? ? ? ? ? ? ?for(dept d: list<dept>){?
?
? ? ? ? ? ? ? ? if(d.dname.indexOf('A')>=0){?
?
? ? ? ? ? ? ? ? ?if(e.deptno==d.deptno ){?
?
? ? ? ? ? ? ? ? ? ? ? syso(d.dname)?
?
? ? ? ? ? ? ? ? ? ? ? break;?
? ? ? ? ? ? ? ? ?}?
?
? ? ? ? ? ? ? ? }?
?
? ? ? ? ? ? ?}?
?
? ? ? ? ? }?
?
? ? ? ? **/?
? ? ? ? select * from emp where deptno =any(?
? ? ? ? ? ? ? ?select deptno from dept where dname like '%A%'?
? ? ? ? )?
?
? ? ? ? select * from emp where deptno in(?
?
? ? ? ? ? ? ? ?select deptno from dept where dname like '%A%'?
?
? ? ? ? ) ?
?
? ? ? ? --效率最高的子查詢語句?
?
? ? ? ?select * from emp e where exists(?
?
? ? ? ? ? ? ? ?select deptno from dept d where d.deptno=e.deptno and dname like '%A%'?
?
? ? ? ? ) ?
?? ? ??
?2 集合操作符?
?
? ? ?并集?
?
? ? ?union all 集合中的元素 全部疊加 不會去重復?
?
? ? ?union ?集合中的元素 全部疊加 會去重復?
?
? ? ?intersect 交集?
?
? ? ?{1,2},{2,3} 結果為 {2}?
?
? ? ?minus 取差集?
?
?
? ?1笛卡爾積?
?
? ?--oracle連接的基礎 笛卡爾積?
? ?--92語法 更加清晰明了的區別了 每一種連接 ?
? ? --解決了多表關聯時 ?條件不清晰的問題?
?
? ?select * from emp;?
? ? select * from dept;?
? ? --86語法?
?
? ?select * from emp e,dept d;?
?
? ? --92語法?
?
? ?select * from emp cross join dept?
? ? 2內連接?
? ?select * from emp;?
? ? select * from dept;?
? ? --86語法?
? ?select * from emp e,dept d where e.deptno=d.deptno;?
? ? --92語法?
? ?select * from emp inner join dept on emp.deptno=dept.deptno?
? ? 3左外連(左外連接和右外聯的區別在于 誰為主 誰為從 ?意義相同)?
? ?--86語法?
? ?select * from emp e,dept d where e.deptno=d.deptno(+)?
? ? --92語法?
? ?select * from emp e left join dept d on e.deptno=d.deptno?
-- oracle中子查詢?
? ? ? ? ? ? ? ? 表子查詢 ?只要輸出的結果是個表結構 就可以放在from后查詢 也可以設置別名?
? ? ? select abc.ename,abc.loc from (?
? ? ? ?select * from emp e inner join dept d on e.deptno=d.deptno?
? ? ? ?) abc;?
? ? ? ?select * from emp;?
? ? ? ?select * from dept;?
?
? ? ? ?/**?
?
? ? ? ? ? 列的子查詢 ?子查詢 永遠只能返回一行一列數據?
? ? ? ? ?列子查詢的原理?
?
? ? ? ? ?for(emp e: list<emp>){?
?
? ? ? ? ? ? ?syso(e.ename);?
?
? ? ? ? ? ? ?for(dept d: list<dept>){?
?
? ? ? ? ? ? ? ? if(e.deptno==d.deptno){?
?
? ? ? ? ? ? ? ? ? ? syso(d.dname)?
?
? ? ? ? ? ? ? ? ? ? ?break;?
?
? ? ? ? ? ? ? ? }?
?
? ? ? ? ? ? ?}?
?
? ? ? ? ? }?
?
? ? ? ?**/?
?
? ? ? ?select ename,(select dname from dept ?where deptno=e.deptno) from emp e; ?
? ? ? ? --條件子查詢?
? ? ? ?select * from tab;?
? ? ? ? select * from salgrade ?
? ? ? ? --薪水等級是2的人?
? ? ? ?select losal,hisal from salgrade where grade=2?
? ? ? ? select * from emp where sal>=(select losal from salgrade where grade=2)?
?
? ? ? ? ? ? ? and sal<=(select hisal from salgrade where grade=2)?
? ? ? ? select * from emp ?e inner join salgrade s on e.sal>=s.losal and e.sal<=s.hisal?
? ? ? ? where s.grade=2?
? ? ? ? ?/**?
?
? ? ? ? /**?
? ? ? ? --多行子查詢?
?
? ? ? ? for(emp e: list<emp>){?
?
? ? ? ? ? ? ?syso(e.ename);?
?
? ? ? ? ? ? ?for(dept d: list<dept>){?
?
? ? ? ? ? ? ? ? if(d.dname.indexOf('A')>=0){?
?
? ? ? ? ? ? ? ? ?if(e.deptno==d.deptno ){?
?
? ? ? ? ? ? ? ? ? ? ? syso(d.dname)?
?
? ? ? ? ? ? ? ? ? ? ? break;?
? ? ? ? ? ? ? ? ?}?
?
? ? ? ? ? ? ? ? }?
?
? ? ? ? ? ? ?}?
?
? ? ? ? ? }?
?
? ? ? ? **/?
? ? ? ? select * from emp where deptno =any(?
? ? ? ? ? ? ? ?select deptno from dept where dname like '%A%'?
? ? ? ? )?
?
? ? ? ? select * from emp where deptno in(?
?
? ? ? ? ? ? ? ?select deptno from dept where dname like '%A%'?
?
? ? ? ? ) ?
?
? ? ? ? --效率最高的子查詢語句?
?
? ? ? ?select * from emp e where exists(?
?
? ? ? ? ? ? ? ?select deptno from dept d where d.deptno=e.deptno and dname like '%A%'?
?
? ? ? ? ) ?
?? ? ??
?2 集合操作符?
?
? ? ?并集?
?
? ? ?union all 集合中的元素 全部疊加 不會去重復?
?
? ? ?union ?集合中的元素 全部疊加 會去重復?
?
? ? ?intersect 交集?
?
? ? ?{1,2},{2,3} 結果為 {2}?
?
? ? ?minus 取差集?
?
? ? ?{1,2},{2,3} 結果為{1} ?
轉載于:https://www.cnblogs.com/t0404/p/10291071.html
總結
以上是生活随笔為你收集整理的Oracle86和92语法的连接,子查询,集合的操作的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Ghost的相关问题
- 下一篇: 硬盘参数你都懂吗?(上)-从案例引发的讨