ORACLE外连接分享

关注一下oracle 在查询条件中采用+的方法分享如下:
 
 //table1和table2为两个测试表 随便插入几条数据
SQL> select * from table1;
        ID NAME
---------- --------------------
         1 wh
         2 wp
         3 wq
SQL> select * from table2;
        ID NAME
---------- --------------------
         4 wr
         1 wh
//正常查询
SQL> select a.name,b.name
  2  from table1 a,table2 b
  3  where a.id=b.id;
NAME                 NAME
-------------------- --------------------
wh                   wh
//显示出table1中的所有记录 table2中无相应记录则置NULL
SQL> select a.name,b.name
  2  from table1 a,table2 b
  3  where a.id=b.id(+);
NAME                 NAME
-------------------- --------------------
wh                   wh
wq
wp
//显示出table2中的所有记录 table1中无相应记录则置NULL
SQL> select a.name,b.name
  2  from table1 a,table2 b
  3  where a.id(+)=b.id;
NAME                 NAME
-------------------- --------------------
wh                   wh
                     wr
//呵呵,这里本想尝试一下全外连接,不过使用(+)好像不行
SQL> select a.name,b.name
  2  from table1 a,table2 b
  3  where a.id(+)=b.id(+);
where a.id(+)=b.id(+)
             *
ERROR at line 3:
ORA-01468: a predicate may reference only one outer-joined table
//左外连接
SQL> select a.name,b.name
  2  from table1 a
  3  left outer join table2 b
  4  on a.id=b.id;
NAME                 NAME
-------------------- --------------------
wh                   wh
wq
wp
//右外连接
SQL> select a.name,b.name
  2  from table1 a
  3  right outer join table2 b
  4  on a.id=b.id;
NAME                 NAME
-------------------- --------------------
wh                   wh
                     wr
//右外连接
SQL> select a.name,b.name
  2  from table2 b
  3  right outer join table1 a
  4  on a.id=b.id;
NAME                 NAME
-------------------- --------------------
wh                   wh
wq
wp
//左外连接
SQL> select a.name,b.name
  2  from table2 b
  3  left outer join table1 a
  4  on a.id=b.id;
NAME                 NAME
-------------------- --------------------
wh                   wh
                     wr
//试一下FULL OUTER JOIN
SQL> select a.name,b.name
  2  from table2 b
  3  full outer join table1 a
  4  on a.id=b.id;
NAME                 NAME
-------------------- --------------------
wh                   wh
                     wr
wq
wp
SQL> select a.name,b.name
  2  from table1 a
  3  full outer join table2 b
  4  on a.id=b.id;
NAME                 NAME
-------------------- --------------------
wh                   wh
wq
wp
                     wr

小结一下

左连接就是左边的表全有值,右边表的值可以为空(+)

右连接是左边表值可以为空(+),右边表的值全有

 

至于使用OUTER JOIN的方法就稍微直观一些了,LEFT就是显示左边的表的全部内容,RIGHT就是显示右边的表的全部内容,FULL就是两边表内容都全显示。

 

既然说到这了已经,那么再来看一下自然连接

 //使用using子句指定两个表相关联的列
//注:被using 子句所引用的列,在sql 语句中的任何地方不能使用表名或者别名作为前缀
SQL> select a.name,b.name
  2  from table1 a
  3  join table2 b
  4  using(id);
NAME                 NAME
-------------------- --------------------
wh                   wh
SQL> select name
  2  from table1
  3  natural join table2;
NAME
--------------------
wh
//这里好像不让指定别名
SQL> select a.name,b.name
  2  from table1 a
  3  natural join table2 b;
select a.name,b.name
              *
ERROR at line 1:
ORA-25155: column used in NATURAL join cannot have qualifier

 

最后,来看一下交叉连接 ,也就是笛卡尔积

 SQL> select a.name,b.name
  2  from table1 a
  3  cross join table2 b;
NAME                 NAME
-------------------- --------------------
wh                   wr
wp                   wr
wq                   wr
wh                   wh
wp                   wh
wq                   wh
6 rows selected.

 

下面是几个容易让人误认为不一样的东西,其实不然。

inner join = join

left outer join = left join

right outer join = right join

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值