Oracle左右全連線總結

perfychi發表於2013-01-23

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  <=>( 等價於) join 

  --左向外連線,返回左邊表所有符合條件的

  left join   <=> left outer join

  --右向外連線,返回右邊表所有符合條件的

  right join  <=> right outer join

  --完整外部連線,左向外連線和右向外連線的合集

  full join   <=> full outer 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

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/27042095/viewspace-753094/,如需轉載,請註明出處,否則將追究法律責任。

相關文章