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 ・・・新着記事一覧を見る

「Python in Excel」入門:コードを読むための基礎知識|エクセル関数応用(2026-09-10)
M言語入門:Power Queryのコードを読むための基礎知識|Power Query(M言語)入門(2026-09-09)
Excelの正規表現関数(REGEXTEST・REGEXREPLACE・REGEXEXTRACT)の使い方|エクセル関数応用(2026-09-08)
スピルとVBA(Formula2とスピル範囲の取得)|VBA入門(2026-09-08)
「Withの功罪」:コードを読みやすくする強力な道具と、その落とし穴|VBA技術解説(2026-09-03)
可変長配列をVSTACKする4つの方法|REDUCE・Thunk・チャンク・再帰分割|エクセル関数応用(2026-09-01)
Excel表とMarkdownテーブルを相互変換する数式|エクセル関数応用(2026-08-24)
「Python in Excel」数独(ナンプレ)解法プログラムの移植と最適化|エクセル関数応用(2026-08-14)
「Python in Excel」で自作関数を登録|アンピボット関数と計算順序|エクセル関数応用(2026-08-12)
ListBox・ComboBoxをマウスホイール対応させる|ユーザーフォーム入門(2026-08-09)


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

1.最終行の取得(End,Rows.Count)|VBA入門
2.日本の祝日一覧|Excelリファレンス
3.変数宣言のDimとデータ型|VBA入門
4.Excelショートカットキー一覧|Excelリファレンス
5.RangeとCellsの使い方|VBA入門
6.FILTER関数(範囲をフィルター処理)|エクセル入門
7.マクロとは?VBAとは?VBAでできること|VBA入門
8.繰り返し処理(For Next)|VBA入門
9.メッセージボックス(MsgBox関数)|VBA入門
10.セルのコピー&値の貼り付け(PasteSpecial)|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」をお願いいたします。
本文下部へ