SQL入門
SQL基礎問題4:2つのテーブルの不一致を抽出

SQLの初心者向け入門解説、VBAからデータベースを扱うためのSQLを解説
公開日:2025-10-29 最終更新日:2025-11-03

SQL基礎問題4:2つのテーブルの不一致を抽出


2つのテーブルの不一致を探し、キーごとに件数集計するSQL問題です。


SQLの練習用になるべく単純なSQLで済む問題を出します。
SQLの練習として取り組んで見てください。

問題

2つのテーブルの不一致を抽出
※画像はExcelです。

テーブル「TBLA」には存在せず、テーブル「TBLB」にのみ存在する全てのIDを特定し、
それらのIDに対応するTBLBの「値」の合計をIDごとに求めてください。


解答SQL

SQLite3
SELECT
  B.ID,SUM(B.値) AS 合計値
 FROM TBLB AS B
 LEFT JOIN TBLA AS A ON B.ID = A.ID
 WHERE A.ID IS NULL
 GROUP BY B.ID

SQLの解説
  1. LEFT JOIN
     → TBLB を基準に TBLA を結合します。
      同じ ID があれば対応付け、無ければ NULL のまま残します。
  2. WHERE A.ID IS NULL
     → 結合しても TBLA 側の ID が存在しない行だけを残します。
      つまり「TBLB にしか無い ID」を抽出します。
  3. GROUP BY B.ID
     → 抽出した行を ID ごとにまとめます。
  4. SUM(B.値)
     → その ID の「値」を合計します。

SELECT
 B.ID,SUM(B.値)
 FROM TBLB AS B
 WHERE NOT EXISTS
     (SELECT 1 FROM TBLA AS A WHERE A.ID = B.ID)
 GROUP BY B.ID

SQLの解説
  1. サブクエリ
     → TBLA に含まれるすべての ID を取得します。
  2. WHERE NOT EXISTS ( … )
     → TBLA に存在しない ID の行だけを、TBLB から選びます。
  3. GROUP BY B.ID
     → 抽出した行を ID ごとにまとめます。
  4. SUM(B.値)
     → その ID の「値」を合計します。

SELECT
 B.ID,SUM(B.値)
 FROM TBLB AS B
 WHERE B.ID NOT IN
     (SELECT ID FROM TBLA)
 GROUP BY B.ID

SQLの解説
  1. サブクエリ
     → TBLA に含まれるすべての ID を取得します。
  2. WHERE B.ID NOT IN ( … )
     → TBLA に存在しない ID の行だけを、TBLB から選びます。
  3. GROUP BY B.ID
     → 抽出した行を ID ごとにまとめます。
  4. SUM(B.値)
     → その ID の「値」を合計します。

Excel
=LET(sql,
"SELECT
  B.ID,SUM(B.値) AS 合計値
 FROM ?TBLB AS B
 LEFT JOIN ?TBLA AS A ON B.ID = A.ID
 WHERE A.ID IS NULL
 GROUP BY B.ID",
QUERY(SUBSTITUTE(SUBSTITUTE(sql,"?TBLA","[TBL02$A2:B10]"),"?TBLB","[TBL02$D2:E14]")))

=LET(sql,
"SELECT
 B.ID,SUM(B.値)
 FROM
  ?TBLB AS B
 WHERE NOT EXISTS
    (SELECT 1 FROM ?TBLA AS A WHERE A.ID = B.ID)
 GROUP BY B.ID",
QUERY(SUBSTITUTE(SUBSTITUTE(sql,"?TBLA","[TBL02$A2:B10]"),"?TBLB","[TBL02$D2:E14]")))

=LET(sql,
"SELECT
 B.ID,SUM(B.値)
 FROM
  ?TBLB AS B
 WHERE
  B.ID NOT IN (
    SELECT ID
    FROM ?TBLA)
 GROUP BY B.ID",
QUERY(SUBSTITUTE(SUBSTITUTE(sql,"?TBLA","[TBL02$A2:B10]"),"?TBLB","[TBL02$D2:E14]")))

SQLの解説
SQLite3と同じになりますので、見比べながら読み解いてください。


※SQLの作成及び解説には生成AIの助けを借りています。特に解説文においてはAI出力を多く使用しています。





同じテーマ「SQL入門」の記事

SQL基礎問題1:最大在庫数を持つ製品の在庫金額
SQL基礎問題2:文字列「-nn-」のnnが偶数のみ抽出
SQL基礎問題3:文字列の一部をキーにして集計
SQL基礎問題4:2つのテーブルの不一致を抽出
SQL基礎問題5:複数のマスタテーブルの結合
SQL基礎問題6:成績表から教科ごとの点数ベスト3を抽出
SQL基礎問題7:成績表から各教科の最高点と最低点を抽出
SQL基礎問題8:バスケット分析・ペア商品の出現回数
SQL基礎問題9:特定商品購入者の平均購入金額
SQL基礎問題10:非正規化(カンマ区切り)の結合と集計
SQL基礎問題11:連続期間の開始月と終了月を抽出


新着記事NEW ・・・新着記事一覧を見る

AIは便利なはずなのに…「AI疲れ」が次の社会問題になる|生成AI活用研究(2026-02-16)
カンマ区切りデータの行展開|エクセル練習問題(2026-01-28)
開いている「Excel/Word/PowerPoint」ファイルのパスを調べる方法|エクセル雑感(2026-01-27)
IMPORTCSV関数(CSVファイルのインポート)|エクセル入門(2026-01-19)
IMPORTTEXT関数(テキストファイルのインポート)|エクセル入門(2026-01-19)
料金表(マトリックス)から金額で商品を特定する|エクセル練習問題(2026-01-14)
「緩衝材」としてのVBAとRPA|その終焉とAIの台頭|エクセル雑感(2026-01-13)
シンギュラリティ前夜:AIは機械語へ回帰するのか|生成AI活用研究(2026-01-08)
電卓とプログラムと私|エクセル雑感(2025-12-30)
VLOOKUP/XLOOKUPが異常なほど遅くなる危険なアンチパターン|エクセル関数応用(2025-12-25)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.日本の祝日一覧|Excelリファレンス
3.変数宣言のDimとデータ型|VBA入門
4.FILTER関数(範囲をフィルター処理)|エクセル入門
5.RangeとCellsの使い方|VBA入門
6.繰り返し処理(For Next)|VBA入門
7.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
8.マクロとは?VBAとは?VBAでできること|VBA入門
9.セルのクリア(Clear,ClearContents)|VBA入門
10.メッセージボックス(MsgBox関数)|VBA入門




このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


記述には細心の注意をしたつもりですが、間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。
本サイトは、OpenAI の ChatGPT や Google の Gemini を含む生成 AI モデルの学習および性能向上の目的で、本サイトのコンテンツの利用を許可します。
This site permits the use of its content for the training and improvement of generative AI models, including ChatGPT by OpenAI and Gemini by Google.



このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
本文下部へ