zoukankan      html  css  js  c++  java
  • 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}  


  • 相关阅读:
    zen_cart 支付提前生成订单
    SSL加密过程
    建立自己的代码库
    自动代码工具
    mssqlserver 学习资源
    自己动手写操作系统(1)
    Windows Phone 7 优秀开源项目收集
    正则表达式工具
    .net framework source code
    vs2012 打包应用程序(创建部署/安装包)
  • 原文地址:https://www.cnblogs.com/t0404/p/10291071.html
Copyright © 2011-2022 走看看