トップページに戻る    次のSQLパズルへ    前のSQLパズルへ

3-1 select句で外部結合

SQLパズル

Table1         Table2        Table3
FK1  Val1      FK1  FK3      FK3  Val3
---  ----      ---  ---      ---  ----
111  aaaa      222  555      555  dddd
222  bbbb      333  666      888  eeee
333  cccc      444  777      999  ffff

Table1のVal1、
Table1のFK1(Table2の外部キー)に紐づく
Table2のFK3(Table3の外部キー)に紐づくTable3のVal3
を取得する。(取得できなければnullとする)

出力結果
FK1  Val1  Val3
---  ----  ----
111  aaaa  null
222  bbbb  dddd
333  cccc  null


データ作成スクリプト

create table Table1(
FK1  number(3) primary key,
Val1 char(4));

create table Table2(
FK1  number(3),
FK3  number(3));

create table Table3(
FK3  number(3) primary key,
Val3 char(4));

insert all
into Table1(FK1,Val1) values(111,'aaaa')
into Table1(FK1,Val1) values(222,'bbbb')
into Table1(FK1,Val1) values(333,'cccc')
into Table2(FK1,FK3)  values(222,   555)
into Table2(FK1,FK3)  values(333,   666)
into Table2(FK1,FK3)  values(444,   777)
into Table3(FK3,Val3) values(555,'dddd')
into Table3(FK3,Val3) values(888,'eeee')
into Table3(FK3,Val3) values(999,'ffff')
select 1 from dual;
commit;


SQL

select Val1,
(select b.Val3 from Table3 b
  where b.FK3 = (select c.FK3 from Table2 c
                   where c.FK1 = a.FK1)) as Val3
from Table1 a;


解説

場合によっては、
select句でサブクエリを記述することによって、
上から下に読むだけで理解可能な、可読性の高いSQLになります。