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,2},{2,3} 结果为{1}  


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值