小学生でもわかるSQLのテーブル結合【SQL講座③】

だれでもエンジニア / 山浦清透
4 Mar 202111:49

Summary

TLDRこのビデオは、SQLのテーブル結合の種類と使い方について、小学生でもわかるように解説しています。インナージョインとアウタージョインの違い、集計時の注意点などを丁寧に説明していて、初心者向けの良い入門動画です。コメントでフィードバックいただけると嬉しいそうです。

Takeaways

  • 😃 inner joinはテーブルの共通部分のデータを取得
  • 😆 outer joinは全データを残しつつ、条件に合うデータも取得
  • 🤔 joinをすると思わぬところで集計ミスが発生することがある
  • 🧐 テーブル名やカラム名が競合する場合はテーブル名を前につける
  • 😯 outer joinのほうが余計なデータも含めた全データが取れる
  • 😀 inner joinのほうがふつうによく使う
  • 🤨 joinの種類にinner joinとouter joinがある
  • 🎉 SQLではjoinが必須中の必須
  • ⛑ 複数テーブルの情報を一発で取得できる
  • 💡 共通の軸となるデータを基にテーブルを結合する

Q & A

  • スクリプトで紹介されているテーブルは何ですか?

    -スクリプトで紹介されているテーブルは2つあります。1つ目はマーシャンずで火星人の情報が入っているテーブル、2つ目はhistoryずで惑星への渡航履歴が入っているテーブルです。

  • テーブルを結合する方法として紹介されているのは何ですか?

    -スクリプトでは、テーブルを結合する方法としてJOINを使用することが紹介されています。共通のデータをキーとして2つのテーブルをつなげることができます。

  • INNER JOINとOUTER JOINの違いは何ですか?

    -INNER JOINはテーブルの共通部分のデータを取得します。OUTER JOINはテーブルの全データと結合条件に合うデータを取得します。データがない場合も残します。

  • なぜJOINを使うと集計の際に数値のバグが起きるのですか?

    -JOINでテーブルを結合すると、結合条件にマッチしないレコードは結果から外れてしまうため、レコード数が変わってしまい集計ミスが起きる場合があるからです。

  • 集計ミスを防ぐにはどうすればよいですか?

    -集計ミスを防ぐためにはLEFT OUTER JOINを使うことで、結合条件にマッチしないレコードも結果に含めることができます。全データが残るようにすることが大切です。

  • テーブル名が被る場合の対策は何ですか?

    -テーブル名が被る場合は、カラム名の前にテーブル名を prefix として付けることで、それぞれのテーブルのカラムであることを明示できます。エラーを防げます。

  • 火星人のデータを取り出すSQLはどう書けばいいですか?

    -火星人の名前と渡航先のデータを取り出すためには、SELECT m.name, h.planet FROM テーブル名 のようにそれぞれのテーブルを指定する必要があります。

  • 渡航歴のない火星人のデータも表示するにはどうすればいいですか?

    -渡航歴のない火星人のデータを表示するには、OUTER JOINを使う必要があります。LEFT OUTER JOINを使うことで、渡航歴がない場合も火星人のデータは表示されます。

  • 結合するテーブルの条件はどこで指定するのでしょうか?

    -結合するテーブルの条件はINNER JOINやOUTER JOINの後にONで指定します。共通のカラムを指定することでテーブルを関連付けます。

  • JOINで注意が必要なポイントは何でしょうか?

    -JOINでは結合条件にマッチしないレコードが結果から消えてしまうことに注意が必要です。集計の際など数値のバグが起きる可能性があるため、OUTER JOINを使う等の対策が必要です。

Outlines

00:00

😊テーブル結合(ジョイン)の基本と種類についての概要

テーブル結合の必要性とメリットについて説明しています。内部結合と外部結合の違いについて、ベン図を使ってわかりやすく解説しています。

05:03

😐条件にマッチしないレコードが消えることに注意

通常の結合ではマッチしないレコードが消えてしまうことを説明しています。これが数値のバグにつながることがあるので注意が必要です。これを回避するにはアウタージョインを使います。

10:05

😃左外部結合で条件に合わなくてもデータを残せる

左外部結合を使うことで、基本テーブルの全データを残したまま結合できることを説明しています。実際に使い分ける際のポイントも解説しています。

Mindmap

Keywords

💡SQL

この動画ではSQLというデータベースを操作するための言語を使用しています。SQLを使うことで、データベースのテーブルから簡単にデータを抽出したり、複数のテーブルを結合したりすることができます。動画の例ではマーシャンズとヒストリーという2つのテーブルからデータを抽出しています。

💡テーブル結合

テーブル結合とは、SQLで複数のテーブルからデータをまとめて1つの結果として取得する方法です。動画ではインナージョインとアウタージョインの2種類の結合方法が紹介されています。テーブル結合はSQLを使う際に頻出する非常に重要な技術です。

💡インナージョイン

インナージョインはテーブルの共通する部分のデータだけを結合して取得する結合方法です。動画の例ではマーシャンズテーブルとヒストリーテーブルのIDをキーとしてインナージョインしています。

💡アウタージョイン

アウタージョインは、テーブルの共通部分に加えて、結合条件を満たさない行も含めた全データを取得できる結合方法です。集計時に条件外のデータが消えてしまうことを防ぐことができます。

💡集計ミス

テーブル結合でインナージョインを使用すると、結合条件を満たさない行が結果から消えてしまうことがあります。これによって集計結果に誤りが生じることを集計ミスと呼びます。アウタージョインを使うことでこの問題は回避できます。

💡惑星

この動画の例話は未来の惑星間交通が発達した設定です。マーシャンズテーブルが火星人で、ヒストリーテーブルが惑星の渡航履歴となっています。惑星間の行き来データをSQLで集計しているイメージです。

💡火星人

動画の例話では未来の火星が舞台となっており、火星人ボスからSQLによるデータ抽出を依頼される設定になっています。データの中身も火星人の名前や惑星の渡航履歴となっているなど、火星を意識した話になっています。

💡宇宙

この動画の例話が宇宙を舞台にしたSF的な設定となっているのは、SQLの機能を実務的な話から切り離し、より抽象的 yet 身近な話として提示することで、視聴者の理解の助けとなるからだと考えられます。

💡抽出

この動画を通して、SQLではデータを簡単に抽出できること、その一方でテーブル結合時の注意点もあることという2つの側面を扱っています。前者はSQLのメリット、後者はデメリットといえるでしょう。

💡解説

この動画の目的は、小学生にもわかりやすい解説をすることです。キーワードの選択と平易な文章での解説は、その点を意識して行われていると考えられます。

Highlights

SQLのテーブル結合について小学生でも分かるように解説する

テーブルが2つある場合、Excelにデータを落として結合するのは大変な作業

SQLではテーブル結合を一発で解決できる - それがテーブル結合(ジョイン)機能

ジョインはSQLにおいて必須中の必須で、データベースのテーブルが分かれていても一発でデータを取得できる

ジョインを正しく使えないと、集計の際に数値にバグが発生することがある

いなージョインでは条件に合致しないレコードは結果から消えてしまう

条件に合致しないレコードを残すには左外部結合(LEFT OUTER JOIN)を使う

イメージとして、インナージョインはテーブルの重なり合った部分のデータを取得、左外部結合は左側テーブルの全データと条件に合致したデータを取得

実際にはインナージョインのほうが頻繁に使われる

使い分けとして、条件に合致したデータだけ欲しい時はインナージョイン、条件に合わないデータも欲しい時は左外部結合を使う

複数テーブルのカラム名がかぶるとエラーになるため、テーブル名を前につけるのがオススメ

火星人のボスは渡航歴のないデータが消えたことに気づき、そのデータも出せと指示

ジョインを使うと基準テーブルから条件に合致しないレコードが消えてしまう

左外部結合を使うと条件に合致しないレコードも残すことができる

Transcripts

play00:00

どうも浮き音です今日は sql のテーブル結合

play00:03

いなージョイントアウター所について小学生でもね分かるように解説するとライオンで

play00:08

やっていきます

play00:09

はいで今回のテーマなんですけどもまぁ sql でデータを抽出するときに複数の

play00:15

テーブルがあってねその複数の底部のデータを一同に取得するにはどうすればいいんだ

play00:20

あって4話なんですよテーブルが2つあるぞよしじゃあこのテーブルからそれぞれねえ

play00:24

スケール2回叩いてデータを取ってきて excel に落としてこれ excel 上

play00:29

でねデータを結合してよしコージェネデータとれたみたいに行ったりしたらめっちゃ

play00:34

めんどくさいじゃないですか

play00:35

政府は昔の僕なんですけどももしでも同じようなことをしている方がいらっしゃったら

play00:39

是非

play00:40

あのコメントで教えていただけるとうれしいんですけどもそれを sql で一発で

play00:45

解決する方法があるんですよ

play00:47

それが今日のテーマのテーブル結合ジョインです

play00:51

join はねもうね sql に青いてね

play00:54

必須中の必須ですめちゃくちゃ授与

play00:57

なんで重要かっていうと sk

play01:00

えーるねあはデータベースで底部が腹水またがってデータ存在していてそれは一発で

play01:05

取っていきたいときってもすごくいっぱいあるんですよ

play01:07

この動画ね最後まで見ていただければジョインをちゃんと理解して

play01:12

きちんと正しくね使えるような状態をね目指していきます特にジョインはですね

play01:18

主データの集計の時ね落とし穴があってこの dinner ジョイント outer

play01:23

join の違いをね

play01:24

きっちり理解しておかないとね数値だにバーグることあるね

play01:28

その値のね数値をどうせをバグらないよです

play01:32

のかまたいなぁジョイント outer join ので使い分けはっていうところ

play01:35

まで踏み込んでねやっていきます

play01:37

はいで今回のアジェンダなんですけど今回はね未来のお話をしていきます

play01:42

未来になってねまぁいろんな惑星木星とかねどせいかそういったので結構行き来するの

play01:46

がもう自由にできるような時代でそこの音時代の中ではすべているものがデータ

play01:52

で管理されていて全員で sql を使ってデータを取得しているっていうねそういう

play01:58

状況の境界話し合ってします

play01:59

さてまぁそんな時代においてね火星人の pos から今回言われるんです指令が出る

play02:04

んですよね

play02:05

火星人の惑星と攻撃を調べるとでそれをですね

play02:10

このいなージョインを使って調べます

play02:12

この時まず上院の基本を学んでいきますで調べてね掲出したらねボスに言われるんです

play02:17

play02:18

数値にバグがあるぞっ

play02:20

ここが眠っちゃくちゃな重要なポイントでジョインはねなんとなく使うと集計の際にね

play02:26

数値がばぐっちゃうっていう落とし穴があるんですよ

play02:29

なぜそういうバグが寝起きちゃうのかどこに注意しなければいけないかっていうので

play02:34

ここでしっかり把握していきます

play02:37

でそれを回避する方法の一つとしてはアウト

play02:40

女医っていうものがあるんですねでジョインには種類があってまーーいなージョイント

play02:44

outer join があるんですけど

play02:45

まあそれがねどういうふうに違ってどう使い分けたらいいのかっていう話をね

play02:49

していきますはいじゃあね早速やっていきましょう今はね未来です

play02:54

伊豆人類がね惑星のいろんな悪性も自由に行き来できる時代です

play02:59

そこではもう全ているもの

play03:00

データで管理されていて sql を使ってでみんなデータをで抽出するよの鐘

play03:06

当たり前の時代です逆に言うと sql 使えないと生きていけないというわけですよ

play03:11

あなたは現在か正極という火星のお役所で働いていてそこでいろんなデータを管理して

play03:18

います

play03:19

はいて今回に使用する

play03:20

データをね最初に紹介しておきますねで今回テーブルが2つありますひとつが

play03:25

マーシャンず

play03:26

火星人ということですねデータとしては id と name 名前が入っていますか

play03:31

政治の名前の一覧金入っているわけです

play03:34

もう一つのテーブルが history ずです

play03:36

惑星ので渡航履歴をで管理しているテーブルですね

play03:40

it があってあとはマーシャンず id ということでね

play03:43

ここダメ正さんつの id それがね入っていますとでもいうかプラネットということ

play03:47

で惑星ですね

play03:49

つまりだあれどの火星人がどの惑星いったかっていうねその一派惑星の音履歴やここに

play03:56

保存され

play03:56

ているわけですそんな中このか政治の音ボスからね

play04:00

指令が出るんですよ火星人の渡航歴を10分以内に出せ

play04:04

じゃないとクビだ10分 dearly

play04:08

わかりましたさて問題ですこれ sql で

play04:12

なんて書いたらいいでしょうかここで使うのがこのジョインで

play04:16

です join を使うとこの2つのテーブルを音がちゃんとひとまとめにできます

play04:21

どうやるかというとですね底部間で共通するデータを軸位

play04:26

それを架け橋にデータをつなげていけるんですよ今回で言うとこちらの ai ディマー

play04:32

シャンステーブルの id と後はこちらのヒストリーステー部

play04:36

いうのマーシャン際にこれがで同じデータのでこの2つを軸につなげていきます

play04:42

ちょっとでまぁ具体的に見てみるとまずねぇー一つめはり1 id 市でハリーって

play04:47

いうのがあって

play04:48

それはねこちらで言うとマーシャンず id が一応ここなんでね

play04:52

このテーブルね9日でコードねここはね一緒のデータなんですよねここがというわけで

play04:57

この2つをつなげてはこういう艇ブルーを作ることができるわけです

play05:02

続いて次たようにハーマイオニーのところですね

play05:05

でこっちで見てみるとまあちゃんず id

play05:08

金にっていうデータがないんだねハンマーいるところ単純にここはね結合ができずに

play05:12

消えます相手へこれが消えて続いては3番ねええどんのところですねそうすると

play05:18

マーシャン際 d 3番は1 q に入ってるって事なのでこういう風なで高須作られ

play05:22

ます

play05:23

でっ続いてが選んだダンブルドアですダンブルドア土星に入ったことなんでこういう風

play05:28

play05:28

データガッツ作られます愛で続いては5番ヴォルデモート

play05:32

a それはねこのヴォルデモートは海王星に入ってるんで

play05:36

ここねこういうデータが作られますちなみに今回

play05:39

あそうだあー完全脱線ですけどあのキャラクターで火星人の名前を

play05:45

名前覚えか分かったので貼りパッたーーーーからとったんですよねまあ

play05:48

ハリーポッターとだったら結構なじみがあってのわかりやすいかなってもつとったん

play05:51

ですけど冷静

play05:53

考えるとね火星人などにか戦戦ってのはカーズでハリーポッターのキャラクターのね

play05:58

名前がでてきてむしろこんな招くんじゃないかという気もしてて

play06:02

これヘッドフォンですから分かりやすいですむしろ混乱させます

play06:05

待ってカバーどうせもいいですかこれはまあでとりあえずへこういうふうに軸になるね

play06:10

共通するデータを軸にテーブルツアーゲートこういう風

play06:13

だねテーブルを作ることができるわけですでへこれをね実現する sql というのが

play06:19

いなージョインになります

play06:21

select * from マーシャンずあず m

play06:24

ダージリン history ずあず h オン mid ゴール h まーちゃんず

play06:29

id と

play06:30

フロームに続けていなージョインって言う

play06:33

を指定しますそのいなージョインの後に結合したいテーブルを持っていきます

play06:37

で音が出条件ですね御後に結合条件を持ってきてどういう状況のねえどういう条件の

play06:43

データを結合するかっていうのを持ってきます

play06:46

今回はあのマーシャンずテーブルの id とへ history ステー部の

play06:51

マーシャンず id のデータが一緒なので

play06:53

そこを軸稲懸け橋にしてつなげていきますちなみにフロームの後にこういうふうにあ頭

play06:58

を使うとね

play06:59

テーブル名をそのあその後で表記した名前でね

play07:02

アクセスできるんですよでこういうふうにねまぁちょっと省略して書いておくとね

play07:06

その後テーブル名をね指定するときに短くて抱くにすぐよねこれちょっとおすすめのね

play07:10

まあ1コツです

play07:12

でまぁこれでね強いスキル実行するとこういう底部が出てきてこの実行者結果でか政治

play07:17

のボスに提出しました

play07:18

するとね火星人のボスがねおい余計なデータがあるぞとこうした奴の名前と渡航先だけ

play07:25

出せ

play07:26

じゃないと前ケ須お子なんかこうサポートアップしているし今回でとってきたデータし

play07:31

play07:32

こういうデータとってきたんですけどそのうちの猫の名前の場所と惑星のところだけ

play07:37

出せと余計なデータ前にとってくるなというふうに言われているわけですね

play07:40

さてこの場合どうすればいいでしょうかこれはねもう単純にね

play07:44

セレクトでしてすればいいわけですねからも n . name

play07:47

h . planet というふうに指定しますここで注意があって

play07:51

せる

play07:52

ことで指定する時から文明の場合ねテーブル面をこういう形でね

play07:56

m .みたいな形でつけますこれなんでかっていうと

play08:00

複数のテーブルを結合したときにあのって服名前カーブの前がでかぶることあるんです

play08:05

play08:06

例えばまあ id とかねえかまぁかぶってるわけ stable でそうすると

play08:10

sql 金取っ

play08:12

中テーブルの id なのかね id 絡むのか判断できなくてエラーになっちゃうん

play08:16

ですね

play08:17

そこで上映した時はですねこういうふうにねカラー名の前にテーブル面をつけてあげる

play08:22

ことで

play08:22

どちらの音テーブルのカラムなのかというのは特定できてねええ

play08:26

エラーが出なくなるのでまぁこういうふうにカーテーブル面付けておくのがオススメ

play08:30

です

play08:31

はいでエコ張偉スケール実行したらまあこういう風なね

play08:34

データが取れましたとあなたはこのデータを火星人のボスに提出しました

play08:38

するとねか政治のボスがね多い渡航歴のない奴のデータが消えているぞと攻撃のない奴

play08:45

のデータも出せ

play08:46

お前

play08:46

100回死ぬかパパパワー美大ではパワハラってがいねぇねぇのここがねあのジョイン

play08:53

使う上で

play08:54

めっちゃくっちゃ重要なポイントなんですけど join 使うとですね

play08:59

こちらはベースの底部の方から条件にマッチするものがないレコードは消えちゃうん

play09:05

ですよ

play09:06

今回で言う

play09:06

よねはぁないようにですハーマンようにこっちはヒストリーステー部の方にね

play09:11

it がまあ花嫁兄なんですけどマーシャンず id がでに金登場しないでしょ

play09:15

でするといなージョインするとこういう形でねはぁまぁいう兄が結果に出てこないん

play09:20

ですね

play09:21

レコードにねマッチす条件にまっ弦レコードがないときはにこいつ消えちゃうわけなん

play09:26

ですよ

play09:26

俺データが消えるからねよくあるのまで集計33節1を集計さつきにレコード数が

play09:33

変わっちゃって消えちゃって集計ミスが起こるんですよこれ本当によくあるミスなので

play09:38

絶対にここで気をつけてほしいです

play09:41

じゃねえ条件に合わなかったレコードねどうすれば残せるかというとそのときに使うの

play09:46

play09:47

left outer join になります先ほど前の音 sql のうちマイナー

play09:52

ジョイント場所ね

play09:53

left outer join に変えてますこうすると条件のマッチするレコード

play09:57

にはねまいまい通りつけて

play09:59

条件のマッチしないで行動んと

play10:01

企業に塗るをつけるんですよデータは消さずに残しておいて

play10:04

n でテーブルを結合してくれますこちら側のねあの泥酔なる底部の方のデータは全部

play10:11

残しといてくれるんですね

play10:12

はいでねここにちょっと状況を整理するとですいなー中員の方はこの田税いうところね

play10:18

合わさった部分

play10:19

2つのベンズの音合わさった

play10:21

部分のデータトレードガイダージョインです一方で

play10:24

left outer join の場合はベン図でいうとここの部分が取れる形に

play10:28

なります

play10:29

レースとなる底部の全データと結合したデータのうちで条件にマッチしたデータダウの

play10:35

部分が取れるというわけです

play10:37

デイナージョインを猫の合わさった部分だけ取れるのでこれ内部穴

play10:41

go って言ってレフパタージョインの方は内部以外の情報もねデータも取れるので

play10:47

外部結合って言います

play10:48

このねベンズのいい

play10:50

明治尾根頭の中に持っていくとイメージをねめちゃくちゃつかみやすいです

play10:54

使い分けとしてはデータを取得するときにこのデータで条件にマッチするで頂け欲しい

play10:59

時はいなージョイン

play11:00

ねマッチしないデータもね条件合わないデータも欲しい時は

play11:04

で2 outer join を使います現実的にはねまあいいながチョインを使う

play11:08

ことのほうがねハッ聞いて多いですね

play11:10

あの

play11:10

まあ結合した時に余計なデータとってくると know is になるんですよ

play11:14

名前ねまぁ一番使う何こちら winner ジョインの方になります

play11:18

はいというわけで今回 sql の結合について行ってきました今回の内容ね

play11:22

わかりやすかったっていう形でぜひコメントで教えてもらいたいですし

play11:26

まあわかったよっていう方はねぜひ高評価いただけるとね

play11:30

5

play11:30

海の子の小学生にもわかるように解説するとないっていうのはね

play11:34

どれだけ上手く行ったかっていうのは僕がね分かるよねすごく嬉しいです

play11:37

疑問があったりしたらでそれもねコメントなんでねコメントいただければね

play11:41

コメント欄で回答した今しか別の動画ね回答したりしますよね

play11:45

ぜひお願いします配当を受けねありがとうございましたーーー