質問:
長年COBOLをやっていまして、
どうしても考え方がCOBOL的になります。
テーブルAとテーブルBがありまして、
これをCOBOLでのようなマッチング処理を行い、
マスターAのみ、マスターBのみというデータを
拾い出したいのですが、SQLでできますでしょうか?
答え:
どういうマッチングでしょうか?

例えば表Aと表Bに両方あるデータを見つけたいといった場合、例えば
EXISTSという述語を使います。

select c1
from A
where exists(select * from B
where A.c1=c1)

EXISTS述語は、INで書き換えることが可能です。

select c1
from A
where c1 in(select c1 from B)

表Aにはあり、表Bにはないデータを見つけたいといった場合、例えば
NOT EXISTSを使います。

select c1
from A
where not exists(select * from B
where A.c1=c1)

NOT EXISTSは、NOT INで書き換えることが可能です。

select c1
from A
where c1 not in(select c1 from B)

表Aのデータと表Bのデータを対応付けて、新しい表Cを作りたいといった
ケースでは、ジョインを使うのが一般的でしょう。
ジョインにもいくつか種類があります。

代表的なものとしては・・・

INNER JOIN・・・両方の表に存在するデータのみ結合
OUTER JOIN・・・片方に対応するデータがない場合でも結合し、対応データがない部分はnullを返す

があります。

記述例としては、

select A.c1,B.c2,B.c3
from A inner join B
on A.c1=B.c1

といった感じです。

表Aと表Bのデータをマージして、表Aと同じレコード形式の結果を得たいと
行った場合には、UNIONといった機能もあります。

select c1,c2 from A 〜
union [all]
select c1,c2 from B 〜

といった記述になります。

union all指定だと重複データもそのままであり、allを省略すると、重複
排除された結果が返されます。
補足の質問:
長文のご説明ありがとうございます。この質問・回答は役に立ちましたか?
答え:
Aのみのデータを取得する場合、Bを外部結合し、Bの項目がNullのものという条件をつければいいです。

そうか、Not Exists (あれ?綴りが違うかも?)とか。(遅くなるからやらないでといわれて、使ったことないですが)

ウェブサイトのユーザーによる情報ポスト、JPQA.comのない保証の正しさ.

  • scanfで値を得て、その値に約数があるか調べるにはど...
  • 壁紙を最初の状態に戻すにはどうしたらいいでしょうか...
  • 携帯はSO506iCを使っています。先日、サイバーショ...
  • 画面表示のことですが画像を収納しているフォルダを開...
  • カテ違いでしたら申し訳ありません。「固定小数点...
  • DVD→コピー・編集→DVDに一発でできるフリーソフトあ...