【SQL】一條外連線和內連線混合使用的SQL語句搞定同事一迷茫需求
今天一個同事問到一個SQL語句的寫法,整理到這裡。
為完成這個需求用到了外連線和內連線,對sql的連線語句的理解比較有幫助。
SQL> create table b (id number,file varchar2(10));
SQL> create table b (id number,f varchar2(10));
SQL> insert into a values (1,1,2);
SQL> insert into a values (2,3,'');
SQL> insert into a values (3,4,3);
SQL> commit;
SQL> insert into b values (1,'A:\>');
SQL> insert into b values (2,'B:\>');
SQL> insert into b values (3,'C:\>');
SQL> insert into b values (4,'D:\>');
SQL> commit;
SQL> select * from a;
C1 C2 C3
---------- ---------- ----------
1 1 2
2 3
3 4 3
SQL> select * from b;
ID F
---------- ----------
1 a
2 b
3 c
4 d
透過上面的過程構建出下面的兩張表:
a表:
c1 c2 c3
1 1 2
2 3
3 4 3
b表:
id f
1 A:\>
2 B:\>
3 C:\>
4 D:\>
表含義介紹:
a表:c1列表示序號,c2列表示檔案號,c3列表示與c2列相關聯的檔案號
b表:id列表示檔案號,f列表示檔案所在的磁碟位置
需求:取得每個檔案所在的位置和對應檔案位置的列表,如果對應檔案位置不存在需要顯示為空。
處理思路:
1.透過外連線使b表中id值與a表中c2值相等構造出temp1表
SQL> select b.id,b.f,a.c3 from a,b where a.c2(+)=b.id;
2.temp1與自身進行自連線得到關聯檔案對應的磁碟位置
SQL> select temp1.id,temp1.f,b.f from temp1, b where temp1.c3=b.id(+) order by 1;
最終,一條SQL語句搞定需求:
SQL> select temp1.id,temp1.f,b.f from (select b.id,b.f,a.c3 from a,b where a.c2(+)=b.id) temp1, b where temp1.c3=b.id(+) order by 1;
ID F F
---------- ---------- ----------
1 A:\> B:\>
2 B:\>
3 C:\>
4 D:\> C:\>
-- The End --
為完成這個需求用到了外連線和內連線,對sql的連線語句的理解比較有幫助。
SQL> create table b (id number,file varchar2(10));
SQL> create table b (id number,f varchar2(10));
SQL> insert into a values (1,1,2);
SQL> insert into a values (2,3,'');
SQL> insert into a values (3,4,3);
SQL> commit;
SQL> insert into b values (1,'A:\>');
SQL> insert into b values (2,'B:\>');
SQL> insert into b values (3,'C:\>');
SQL> insert into b values (4,'D:\>');
SQL> commit;
SQL> select * from a;
C1 C2 C3
---------- ---------- ----------
1 1 2
2 3
3 4 3
SQL> select * from b;
ID F
---------- ----------
1 a
2 b
3 c
4 d
透過上面的過程構建出下面的兩張表:
a表:
c1 c2 c3
1 1 2
2 3
3 4 3
b表:
id f
1 A:\>
2 B:\>
3 C:\>
4 D:\>
表含義介紹:
a表:c1列表示序號,c2列表示檔案號,c3列表示與c2列相關聯的檔案號
b表:id列表示檔案號,f列表示檔案所在的磁碟位置
需求:取得每個檔案所在的位置和對應檔案位置的列表,如果對應檔案位置不存在需要顯示為空。
處理思路:
1.透過外連線使b表中id值與a表中c2值相等構造出temp1表
SQL> select b.id,b.f,a.c3 from a,b where a.c2(+)=b.id;
2.temp1與自身進行自連線得到關聯檔案對應的磁碟位置
SQL> select temp1.id,temp1.f,b.f from temp1, b where temp1.c3=b.id(+) order by 1;
最終,一條SQL語句搞定需求:
SQL> select temp1.id,temp1.f,b.f from (select b.id,b.f,a.c3 from a,b where a.c2(+)=b.id) temp1, b where temp1.c3=b.id(+) order by 1;
ID F F
---------- ---------- ----------
1 A:\> B:\>
2 B:\>
3 C:\>
4 D:\> C:\>
-- The End --
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/519536/viewspace-557229/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- sql 內連線和外連線SQL
- sql和hql中join語句區別,以及hibernate中內連線,迫切內連線,左外連線,迫切左外連線,右外連線的區別(合集)...SQL
- sql內連結,外連線SQL
- 【SQL】Oracle的內連線、左外連線、右外連線及全外連線SQLOracle
- SQL的四種連線:內連線 左外連線 右外連線 全連線SQL
- SQL Server中內連線和外連線的區別SQLServer
- 深入理解SQL的四種連線-左外連線、右外連線、內連線、全連線SQL
- 你真的會玩SQL嗎?內連線、外連線SQL
- SQL SERVER 自連線、外連線SQLServer
- SQL資料庫連線語句SQL資料庫
- oracle sql內連線_左(右)連線_全外連線_幾種寫法OracleSQL
- java連線oracle執行sql語句JavaOracleSQL
- MYSQL語法:左連線、右連線、內連線、全外連線MySql
- T-SQL學習中–內聯接,外連線,交叉連線SQL
- 內連線、外連線
- SQL的外連線對內部表的限制SQL
- SQL中的左連線和右連線SQL
- php連線mysql並執行sql語句PHPMySql
- Oracle內連線、外連線、右外連線、全外連線小總結Oracle
- 資料庫外連線,自然連線,內連線,條件連線,等值連線關係及詳解資料庫
- 【SQL】表連線 --半連線SQL
- 深入淺出SQL之左連線、右連線和全連線SQL
- SQL 改寫系列十:半連線轉內連線SQL
- 內連線、外連線總結
- MySQL內連線查詢語句MySql
- SQL Server連線SQL Server、SQL Server連線ORACLE 連結伺服器SQLServerOracle伺服器
- 例項解析外連線 內連線 自連線 全連線
- 一張詳解SQL連線的圖SQL
- 《卸甲筆記》-PostgreSQL和Oracle的SQL差異分析之一:外連線筆記SQLOracle
- pl/sql裡的左連線和右連線符號“+”SQL符號
- SQL改寫系列九:外連線轉內連線的常見場景與錯誤SQL
- 3.DQL資料查詢語言(內連線,外連線,自連線)
- MySQL筆記3——內連線/外連線、多表連線MySql筆記
- SQL Deverlop連線SQL ServerSQLdevServer
- 連線SQL ServerSQLServer
- SQL連線句法SQL
- 一條SQL語句的書寫SQL
- 一條很 巧妙的 SQL 語句SQL