• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:OracleのSQLについて質問があります。)

OracleのSQLについての質問

このQ&Aのポイント
  • OracleのSQLについて質問があります。下記の3つのプログラムを作成する方法が分かりません。
  • A表に存在して、B表に存在しないデータを表示するプログラムを作成したいです。
  • B表に存在して、A表に存在しないデータを表示するプログラムを作成したいです。

質問者が選んだベストアンサー

  • ベストアンサー
  • nda23
  • ベストアンサー率54% (777/1416)
回答No.2

「プログラム」じゃなくて「クエリ(SQL)」ですね。 先ず、(1)と(2)は主従関係のある結合になります。 これは「OUTER JOIN」と言います。これには どちら(先に書くか後から書くか)のテーブルが主に なるかで、LEFT(先の方)とRIGHT(後の方)の 2種類があります。 (1)の考え方 SELECT A表.* FROM A表 LEFT OUTER JOIN B表 ON A表.a=B表.b AND A表.b=B表.b WHERE B表.a IS NULL AND B表.b IS NULL A表とB表を結合しますが、A表が主で、左(先)に記述 してあるので、LEFT OUTER JOIN になります。次に、 結合条件を示すON句で、それぞれのaとbの関係を記述 します。この結合ではA表は全て取得され、B表に無い 項目はNULLになりますので、WHERE句でB表側の項目が NULLという指定をすれば「A表にあってB表にない」を 抽出できます。主キー項目はNULLにできないので、 WHERE句に記述する条件はaかbの一方だけでもよい はずです。 (2)の考え方 もう分かると思うので省略します。 (3)の考え方は両方にあるものが前提なので、主従の 関係はありません。この場合は INNER JOIN になり ます。また、条件はA表.c<>B表.cとなります。 SELECT A表.* FROM A表 INNER JOIN B表 ON A表.a=B表.b AND A表.b=B表.b WHERE A表.c<>B表.c

neetter
質問者

お礼

とても勉強になりました! 回答者様の文章は答えとして、 INNER JOIN とOUTER JOIN をググって、がんばってみます!

その他の回答 (1)

  • reset_cat
  • ベストアンサー率68% (94/138)
回答No.1

(1)、(2)はminus句、(3)は等価結合で主キーのみのデータを作成し、その後それぞれのテーブルと結合すればいいかと・・・ ぱっと思いつきで書いているので違ってたらゴメンナサイ。

neetter
質問者

補足

MINUS句がございましたか! しかし、申し訳ございません。。 上記、表の列数は同じではありません。。。。 -------------------------------------------------- MINUS句 表「a」と表「b」のSELECTした列数が同じでないとMINUSはできない。

関連するQ&A