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}  


  • 相关阅读:
    November 07th, 2017 Week 45th Tuesday
    November 06th, 2017 Week 45th Monday
    November 05th, 2017 Week 45th Sunday
    November 04th, 2017 Week 44th Saturday
    November 03rd, 2017 Week 44th Friday
    Asp.net core 学习笔记 ( Area and Feature folder structure 文件结构 )
    图片方向 image orientation Exif
    Asp.net core 学习笔记 ( Router 路由 )
    Asp.net core 学习笔记 ( Configuration 配置 )
    qrcode render 二维码扫描读取
  • 原文地址:https://www.cnblogs.com/t0404/p/10291071.html
Copyright © 2011-2022 走看看