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

6-11 和集合と共通集合との差集合の要素数

SQLパズル

TableA         TableB
PKey  Col1     PKey  Col1
----  ----     ----  ----
   1  aaaa        1  bbbb
   2  cccc        2  dddd
   3  eeee        4  ffff
                  5  gggg

TableAにあるがTableBにない、PKeyの数と
TableBにあるがTableAにない、PKeyの数
を出力する。

出力結果
TableAOnly  TablebOnly
----------  ----------
         1           2

こちらを参考にさせていただきました


データ作成スクリプト

create table TableA(
PKey number(3)  primary key,
Col1 varchar2(4));

create table TableB(
PKey number(3)  primary key,
Col1 varchar2(4));

insert all
into TableA(PKey,Col1) values(1,'aaaa')
into TableB(PKey,Col1) values(1,'bbbb')
into TableA(PKey,Col1) values(2,'cccc')
into TableB(PKey,Col1) values(2,'dddd')
into TableA(PKey,Col1) values(3,'eeee')
into TableB(PKey,Col1) values(4,'ffff')
into TableB(PKey,Col1) values(5,'gggg')
select 1 from dual;
commit;


SQL

select count(a.PKey) as TableAOnly,
       count(b.PKey) as TablebOnly
  from TableA A full join TableB b
    on (a.PKey = b.PKey)
 where a.PKey is null
    or b.PKey is null;


解説

TableAとTableBの和集合と、
TableAとTableBの共通集合との
差集合のそれぞれの要素数を求めてます。

脳内でベン図を書いて
(A∪B)-(A∩B)
をイメージすると、分かりやすいでしょう。