【ORACLE】外连接/内连接/自连接

(一)表连接分类

   表连接分为:CROSS JOIN、INNER JOIN、OUTER JOIN、SELF JOIN

(二)CROSS JOIN 交叉连接

  CROSS JOIN连接用于生成两张表的笛卡尔集。
    1、返回的记录数为两个表的记录数乘积。比如,A表有n条记录,B表有m条记录,则返回n*m条记录。
    2、将A表的所有行分别与B表的所有行进行连接。

  语法:

    select  列名1,列名2 ...  列名n  from table_name1 T1 cross join table_name2 T2;

    或

    select  列名1,列名2 ...  列名n  from table_name1 T1,table_name2 T2;

(三)INNER JOIN 内连接

   内连接就是关联的两张或多张表中,根据关联条件,显示所有匹配的记录,匹配不上的,不显示。

  语法:

    select  列名1,列名2 ...  列名n  from table_name1 T1 inner join table_name2 T2 on T1.column_name=T2.column_name;

    

    select  列名1,列名2 ...  列名n  from table_name1 T1  join table_name2 T2 on T1.column_name=T2.column_name;

    或     

    --如果两张表的关联字段名相同,也可以使用USING子句

    select  列名1,列名2 ...  列名n  from table_name1 T1  join table_name2 T2 using (column);

    

    --oracle写法

    select  列名1,列名2 ...  列名n  from table_name1 T1,table_name2 T2  where T1.column_name=T2.column;

(四)外连接

  外连接分为三种:

    1. LEFT OUTER JOIN        /    LEFT JOIN(左外连接)
         2. RIGHT OUTER JOIN     /    RIGHT JOIN(右外连接)
           3. FULL OUTER JOIN        /    FULL JOIN(全外连接)

  4.1 左外连接  && 右外连接

     左外连接就是关联的两张或多张表中,根据关联条件,显示匹配的记录,左表中有的记录,但是右表中没有匹配上的,以空(null)显示。

    语法:

      select  列名1,列名2 ...  列名n  from table_name1 T1 left outer join table_name2 T2 on T1.column_name=T2.column_name;

      

      select  列名1,列名2 ...  列名n  from table_name1 T1 left  join table_name2 T2 on T1.column_name=T2.column_name;

      

      --如果两张表的关联字段名相同,也可以使用USING子句

      select  列名1,列名2 ...  列名n  from table_name1 T1  left join table_name2 T2 using (column);

      

      --oracle写法

      select  列名1,列名2 ...  列名n  from table_name1 T1 , table_name2 T2 where T1.column_name=T2.column_name(+);

  4.2 全外连接

    全外连接就是关联的两张或多张表中,根据关联条件,显示所有匹配和不匹配的记录。

    左表中有的记录,但是右表中没有匹配上的,以空(null)显示。右表中有的记录,但是左表中没有匹配上的,也以空(null)显示。

    语法:

      select  列名1,列名2 ...  列名n  from table_name1 T1 full outer join table_name2 T2 on T1.column_name=T2.column_name;

      

      select  列名1,列名2 ...  列名n  from table_name1 T1 full  join table_name2 T2 on T1.column_name=T2.column_name;

      

      --如果两张表的关联字段名相同,也可以使用USING子句

      select  列名1,列名2 ...  列名n  from table_name1 T1  full join table_name2 T2 using (column);

  4.3 自连接

    自连接,就是把一张表取两个别名,当做两张表来使用,自己和自己关联。

    语法:

      select  列名1,列名2 ...  列名n  from table_name T1 inner join table_name T2 on T1.column_name1=T2.column_name2;

      

猜你喜欢

转载自www.cnblogs.com/CL-learning/p/12672830.html