`

Oracle左右全连接总结

阅读更多
--建立测试数据   
create table a(id number);   
create table b(id number);   
insert into a values(1);   
insert into a values(2);   
insert into a values(3);   
insert into b values(1);   
insert into b values(2);   
insert into b values(4);   
commit;   
  
--左:   
--主流数据库通用的方法   
select * from a left join b on a.id=b.id;   
--Oracle特有的方法   
select * from a, b where a.id=b.id(+);   
  
        ID         ID   
---------- ----------   
         1          1   
         2          2   
         3    
  
  
--右:   
--主流数据库通用的方法   
select * from a right join b on a.id=b.id;   
--Oracle特有的方法   
select * from a, b where a.id(+)=b.id;   
  
        ID         ID   
---------- ----------   
         1          1   
         2          2   
                    4   
            
            
--内   
--主流数据库通用的方法   
select * from a join b on a.id=b.id;   
--where关联   
select * from a, b where a.id=b.id;   
  
        ID         ID   
---------- ----------   
         1          1   
         2          2   
            
            
--全外   
--主流数据库通用的方法   
select * from a full join b on a.id=b.id;   
--Oracle特有的方法   
select *   
  from a, b   
 where a.id = b.id(+)   
union   
select *    
  from a, b    
 where a.id(+) = b.id;   
  
        ID         ID   
---------- ----------   
         1          1   
         2          2   
         3    
                    4   
  
  
--完全,也叫交叉连接或者笛卡尔积   
--主流数据库通用的方法   
select * from a,b;   
--或者   
select * from a cross join b;   
  
        ID         ID   
---------- ----------   
         1          1   
         1          2   
         1          4   
         2          1   
         2          2   
         2          4   
         3          1   
         3          2   
         3          4   
  
  
连接无非是这几个   
--内连接和where相同   
inner join   
--左向外连接,返回左边表所有符合条件的   
left join   
--右向外连接,返回右边表所有符合条件的   
right join   
--完整外部连接,左向外连接和右向外连接的合集   
full join   
--交叉连接,也称笛卡儿积。返回左表中的每一行与右表中所有行的组合   
cross join   
  
  
--补充:   
--左向外连接,返回左边表所有符合条件的,   
--注意这里没有第二个加号,会直接过滤掉数据,只显示符合条件的记录   
select *    
  from a, b   
 where a.id = b.id(+)   
   and b.id = 2;   
      
        ID         ID   
---------- ----------   
         2          2      
            
            
--左向外连接,返回左边表所有符合条件的   
--注意where上第二个加号,它的作用是修改右边表记录的显示,例如如果b.id(+) = 2,显示为2,否则显示null  
select *   
  from a, b   
 where a.id = b.id(+)   
   and b.id(+) = 2;   
  
        ID         ID   
---------- ----------   
         2          2   
         3    
         1       
           
--建立测试数据
create table a(id number);
create table b(id number);
insert into a values(1);
insert into a values(2);
insert into a values(3);
insert into b values(1);
insert into b values(2);
insert into b values(4);
commit;

--左:
--主流数据库通用的方法
select * from a left join b on a.id=b.id;
--Oracle特有的方法
select * from a, b where a.id=b.id(+);

        ID         ID
---------- ----------
         1          1
         2          2
         3


--右:
--主流数据库通用的方法
select * from a right join b on a.id=b.id;
--Oracle特有的方法
select * from a, b where a.id(+)=b.id;

        ID         ID
---------- ----------
         1          1
         2          2
                    4
         
         
--内
--主流数据库通用的方法
select * from a join b on a.id=b.id;
--where关联
select * from a, b where a.id=b.id;

        ID         ID
---------- ----------
         1          1
         2          2
         
         
--全外
--主流数据库通用的方法
select * from a full join b on a.id=b.id;
--Oracle特有的方法
select *
  from a, b
 where a.id = b.id(+)
union
select * 
  from a, b 
 where a.id(+) = b.id;

        ID         ID
---------- ----------
         1          1
         2          2
         3 
                    4


--完全,也叫交叉连接或者笛卡尔积
--主流数据库通用的方法
select * from a,b;
--或者
select * from a cross join b;

        ID         ID
---------- ----------
         1          1
         1          2
         1          4
         2          1
         2          2
         2          4
         3          1
         3          2
         3          4


连接无非是这几个
--内连接和where相同
inner join
--左向外连接,返回左边表所有符合条件的
left join
--右向外连接,返回右边表所有符合条件的
right join
--完整外部连接,左向外连接和右向外连接的合集
full join
--交叉连接,也称笛卡儿积。返回左表中的每一行与右表中所有行的组合
cross join


--补充:
--左向外连接,返回左边表所有符合条件的,
--注意这里没有第二个加号,会直接过滤掉数据,只显示符合条件的记录
select * 
  from a, b
 where a.id = b.id(+)
   and b.id = 2;
   
        ID         ID
---------- ----------
         2          2   
         
         
--左向外连接,返回左边表所有符合条件的
--注意where上第二个加号,它的作用是修改右边表记录的显示,例如如果b.id(+) = 2,显示为2,否则显示null
select *
  from a, b
 where a.id = b.id(+)
   and b.id(+) = 2;

        ID         ID
---------- ----------
         2          2
         3 
         1    

 

分享到:
评论

相关推荐

    oracle左右连接方法

    本文将详细介绍Oracle中的左连接(Left Join)、右连接(Right Join)、内连接(Inner Join)、全连接(Full Join)以及交叉连接(Cross Join)的方法,并通过示例来帮助理解每种连接的特点。 ### 一、左连接(Left...

    oracle数据库表左连接右连接全连接的认识

    全连接是指左右连接的全部表示,根据连接条件在任意一方表中出现无法匹配的情况,不满足条件的部分均用空值代替。例如: `SELECT e.empno, e.ename, d.dname FROM emp e FULL JOIN dept d ON e.deptno = d.deptno;`...

    Oracle SQL连接查询总结.docx

    - 全连接可以确保左右表的所有数据都被包含在结果集中,无论是否有匹配项。 **例子:** 假设TableA和TableB中各有四条记录,其中有两条记录名字相同。使用全连接后,结果集中将包括所有八条记录,对于没有匹配项的...

    oracle14514

    全外连接会同时保留左右表中的所有记录,即使左右表之间没有匹配的记录也会被包含进来。 **示例代码**: ```sql SELECT * FROM EMP FULL OUTER JOIN DEPT ON EMP.DEPTNO = DEPT.DEPTNO; ``` **示例解析**: 此SQL...

    oracle学习资料

    - **全外连接**:保留左右表所有记录。 - **自连接**:同一表的不同实例之间的连接。 - **交叉连接**:相当于笛卡尔积。 - **表连接方式总结** - 内连接:只包含两个表中匹配的记录。 - 外连接:包含未匹配的...

    oracl笔记

    - **Full Outer Join**:全外连接会返回左右两表所有行,即使其中一方没有匹配的行也会返回NULL值。 - 示例:`SELECT e.ename, d.dname FROM emp e FULL OUTER JOIN dept d ON e.deptno = d.deptno;` ### SQL ...

    sql 面试题总结一

    - 查询优化:避免全表扫描,使用合适的连接类型,减少子查询,优化WHERE子句。 9. 触发器和存储函数: - 触发器:在特定事件(如INSERT、UPDATE、DELETE)发生时自动执行的SQL代码。 - 存储函数:用户自定义的...

    收获不止SQL优化

    11.2.5 三大表连接的特性总结 317 11.3 从案例学表连接优化要点 (三刀三斧四式走天下) 317 11.3.1 一次Nested Loops Join的优化全过程 318 11.3.2 一次Hash Join 的 优化全过程 320 11.3.3 一次 Merge Sort ...

    IntelliJ IDEA 分享.pptx

    9. **数据库连接**: 支持 MySQL、SQL Server、Oracle 等多种数据库,方便进行数据库开发与调试。 10. **支持前沿技术**: 如 Docker 等现代技术栈的集成,保持了工具的先进性。 #### 二、IntelliJ IDEA 快捷键 ...

    VisualBox_装Mac_lion_工具包及下载地址

    《VisualBox安装Mac OS X Lion全方位指南》 VisualBox是一款强大的虚拟化软件,它允许用户在个人计算机上运行多个操作系统,无需重新启动。本指南将详细介绍如何使用VisualBox安装Mac OS X Lion,以及相关的工具包...

    21天速成SQL数据库

    它被广泛应用于各种数据库管理系统(DBMS)中,包括MySQL、Oracle、SQL Server等。 - **SQL简史**:SQL最初由IBM在1970年代初期开发,基于E.F. Codd的关系数据库理论。自那时以来,SQL经历了多次标准化和修订,成为...

    SQL21自学通

    - 外部联合(左外联、右外联、全外联)包括所有表中的行,即使某些表中没有匹配的行。 - 内部联合只包括那些在所有表中都有匹配行的记录。 - **表的自我联合:** - 当一个表与其自身联合时称为自我联合,常用于...

Global site tag (gtag.js) - Google Analytics