1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【初心者向け】INNER JOINしてみた結果どうなるの?

Last updated at Posted at 2024-01-22

なんとなく背景

始めまして、株式会社ジールのSOです。

SQLに触れ始めてから7年目になりましたが、
実務中の経験を踏まえ、改めていろんな構文を考え直したいと思います。
初心者のみならず、少しご参考になることがあれば大変嬉しいです!
※今回はSnowflake環境を利用しますが、結果は変わらないと思います。

まずは、~INNER JOIN編~

INNER JOINとは

INNER JOINは2つ以上のテーブルからデータを結合するSQL構文の一つです。 この結合方法は共通のキーを持つ行のみを抽出し、それらを結合して新しい結果セットを作成します。 結果として得られるテーブルには結合条件を満たす行だけが含まれるため、データが一致しない行は除外されます。
だそうです。

(・・?

共通のキーを持つ行のみを抽出と言ってますが、
片方にキーが重複する場合結果セットはどなるの?
両方にキーが重複する場合結果セットはどうなるの?
イメージ全然ないので、「TEST_NAME」と「TEST_ADDRESS」2つのテストデータを利用し見ていきます。

①結合キーに重複がない

👇TEST_NAME 結合キーに重複ない
test_name.PNG
👇TEST_ADDRESS 結合キーに重複ない
test_adress.PNG
👇結果セット
無難に普通の3行の結果セットが作成されましたね
test_name.PNG

②片方テーブルの結合キーに重複あり

👇TEST_NAME 結合キーに重複ない
test_name.PNG
👇TEST_ADDRESS 結合キーに重複あり
「ID=1」レコートが2行存在する
test_adress2.PNG
👇結果セット
花子さんのレコートが2行になり、4行の結果セットが作成ましたね
result2.PNG

➂両方テーブルの結合キーが重複あり

👇TEST_NAME 結合キーに重複あり
「ID=1」レコートが2行存在する
test_name2.PNG
👇TEST_ADDRESS 結合キーに重複あり
「ID=1」レコートが2行存在する
test_adress2.PNG
👇結果セット
「ID=1」のすべての組み合わせパターンで結果セットが作成されて、なんかわけわからないですね
result3.PNG

結論

レコードを一意に識別できるようなカラムを利用して結合を行えば問題ないかと思いますが、
データ要件や実務中で忘れがちなので、上記のような事象が起こりうるのではないかと思いますね。

いかがでしょうか。~
「なるほど!」と「それはそうでしょう」と思う方それぞれいらっしゃると思いますが、
今回の検証みたいな少し変わったSQLで改めて理解を深めることができたら嬉しいです!

ご案内

株式会社ジールでは、「ITリテラシーがない」「初期費用がかけられない」「親切・丁寧な支援がほしい」「ノーコード・ローコードがよい」「運用・保守の手間をかけられない」などのお客様の声を受けて、オールインワン型データ活用プラットフォーム「ZEUSCloud」を月額利用料にてご提供しております。
ご興味がある方は是非下記のリンクをご覧ください:
https://www.zdh.co.jp/products-services/cloud-data/zeuscloud/?utm_source=qiita&utm_medium=referral&utm_campaign=qiita_zeuscloud_content-area

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?