oracle sql內連線_左(右)連線_全外連線_幾種寫法
----建立測試表
SQL> desc t_pkg;
Name Type Nullable Default Comments
---------- ------------- -------- ------- --------
ID INTEGER Y
ORDER_ID VARCHAR2(100) Y
COMP_TYP VARCHAR2(100) Y
COMP_MONEY NUMBER Y
SQL> desc t_pkg;
Name Type Nullable Default Comments
---------- ------------- -------- ------- --------
ID INTEGER Y
ORDER_ID VARCHAR2(100) Y
COMP_TYP VARCHAR2(100) Y
COMP_MONEY NUMBER Y
----插入資料至測試表
SQL> select * from t_pkg;
ID ORDER_ID COMP_TYP COMP_MONEY
--------------------------------------- -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- ----------
1 order_1 tele 100
2 order_1 seller 80
3 order_2 seller 900
4 order_3 tele 700
----如下sql查詢(全外連線),3種情況:
--1種情況:有tele和seller
--2種情況:僅有tele
--3種情況:僅有seller
SQL> select
2 nvl(t_pkg1.id,t_pkg2.id) as id,
3 nvl(t_pkg1.order_id,t_pkg2.order_id) as order_id,
4 t_pkg1.comp_money as comp_money_1,
5 t_pkg2.comp_money as comp_money_2
6 from (select id,order_id,comp_money from t_pkg where comp_typ='tele') t_pkg1
7 full outer join
8 (select id,order_id,comp_money from t_pkg where comp_typ='seller') t_pkg2
9 on (t_pkg1.order_id=t_pkg2.order_id)
10 ;
ID ORDER_ID COMP_MONEY_1 COMP_MONEY_2
---------- -------------------------------------------------------------------------------- ------------ ------------
1 order_1 100 80
3 order_2 900
4 order_3 700
SQL> select * from t_pkg;
ID ORDER_ID COMP_TYP COMP_MONEY
--------------------------------------- -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- ----------
1 order_1 tele 100
2 order_1 seller 80
3 order_2 seller 900
4 order_3 tele 700
----如下sql查詢(全外連線),3種情況:
--1種情況:有tele和seller
--2種情況:僅有tele
--3種情況:僅有seller
SQL> select
2 nvl(t_pkg1.id,t_pkg2.id) as id,
3 nvl(t_pkg1.order_id,t_pkg2.order_id) as order_id,
4 t_pkg1.comp_money as comp_money_1,
5 t_pkg2.comp_money as comp_money_2
6 from (select id,order_id,comp_money from t_pkg where comp_typ='tele') t_pkg1
7 full outer join
8 (select id,order_id,comp_money from t_pkg where comp_typ='seller') t_pkg2
9 on (t_pkg1.order_id=t_pkg2.order_id)
10 ;
ID ORDER_ID COMP_MONEY_1 COMP_MONEY_2
---------- -------------------------------------------------------------------------------- ------------ ------------
1 order_1 100 80
3 order_2 900
4 order_3 700
小結:1,全外連線的寫法full outer join或full join,條件用on
2,因為全外連線產生的結果可能列值為null,如果產生的結果集是中間結果集,還需要進一步處理,可以用nvl對此中間結果集的列(一般是關聯列)進行轉化,畢竟關聯null列很麻煩
2,因為全外連線產生的結果可能列值為null,如果產生的結果集是中間結果集,還需要進一步處理,可以用nvl對此中間結果集的列(一般是關聯列)進行轉化,畢竟關聯null列很麻煩
附上網上相關資源,供擴充套件閱讀:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9240380/viewspace-753529/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- SQL的四種連線:內連線 左外連線 右外連線 全連線SQL
- 【SQL】Oracle的內連線、左外連線、右外連線及全外連線SQLOracle
- MYSQL語法:左連線、右連線、內連線、全外連線MySql
- 深入理解SQL的四種連線-左外連線、右外連線、內連線、全連線SQL
- Oracle 左外連線、右外連線、全外連線小總結Oracle
- 內連線、左連線、右連線
- Oracle內連線、外連線、右外連線、全外連線小總結Oracle
- Oracle左連線,右連線Oracle
- Oracle左外連線、右外連線、完全外連線以及(+)號用法Oracle
- 左連線,右連線
- 內聯,左外聯,右外聯,全連線,交叉連線 的區別
- Oracle的左連線和右連線Oracle
- sql和hql中join語句區別,以及hibernate中內連線,迫切內連線,左外連線,迫切左外連線,右外連線的區別(合集)...SQL
- SQL中的左連線和右連線SQL
- 左連線與右連線
- 左連線和右連線
- mysql 左連線,右連線,內連結,exists等MySql
- 深入淺出SQL之左連線、右連線和全連線SQL
- mysql INNER JOIN、LEFT JOIN、RIGHT JOIN;內連線(等值連線)、左連線、右連線MySql
- 例項解析外連線 內連線 自連線 全連線
- sql 內連線和外連線SQL
- pl/sql裡的左連線和右連線符號“+”SQL符號
- 內連線、外連線
- sql內連結,外連線SQL
- Oracle 表連線方式詳解(外連結、內連線、自連線)Oracle
- mysql左外連線MySql
- 內連線、外連線總結
- SQL SERVER 自連線、外連線SQLServer
- 你真的會玩SQL嗎?內連線、外連線SQL
- SQL 改寫系列十:半連線轉內連線SQL
- InfoSet中左外連線
- MySQL筆記3——內連線/外連線、多表連線MySql筆記
- SQL Server中內連線和外連線的區別SQLServer
- oracle連線串的一種寫法Oracle
- 資料庫外連線,自然連線,內連線,條件連線,等值連線關係及詳解資料庫
- oracle外連線Oracle
- 幾種表的連線方式(SQL)SQL
- T-SQL學習中–內聯接,外連線,交叉連線SQL