0
0

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 5 years have passed since last update.

SQL勉強会第二回:これで完璧テーブル結合!!

Last updated at Posted at 2019-03-15
1 / 7

イントロ

営業戦略を立てる上で顧客データや行動を知るのは大事ですよね。僕の勤めている会社でも営業の方から〇〇のデータが欲しい、xxの現状を知りたいとお願いされることがあります。今回はそんな営業の方達が簡単なデータなら自分たちでいつでも調べられるように、社内で営業向けSQL勉強会を開いた際の手順を投稿させていただきます。

今回は社内勉強会第二回開催しますので、この記事は第二回目の勉強会内容について投稿しています。

今回の目標

テーブル結合を習得すること
前回のSELECT文が把握した上で、関連性があるの複数テーブルからデータを検索して取得できるように

前回勉強会の詳細をご覧ください:
https://qiita.com/TakaoSone/items/34abf475ead31e48b985

勉強会の進め方

以下の手順で勉強会を進めました。

  1. 前回の内容を復習
  2. 復習課題
  3. テーブル結合(JOIN)の説明
  4. 練習課題

前回の内容を復習

  • SQLの基本概念について
    (テーブル/ レコード/カラム/データベース)
スクリーンショット 2019-03-14 19.10.04.png (121.9 kB)

復習課題

  • データの取得: SELECT, FROM

SELECTは取得したいカラムを指定します。
FROMは取得したいデータがあるテーブルを指定します。

今データベースの中で、usersテーブルとpostsテーブルが存在している

【 usersテーブル】
スクリーンショット 2019-03-14 17.24.47.png (113.5 kB)

【 postsテーブル】
スクリーンショット 2019-03-14 17.26.49.png (139.3 kB)

  • 復習:
    usersテーブルのidとnameを取得する
   SELECT id, name FROM users;
  1. postsテーブルのidを取得する
  2. postsテーブルのidとnameを取得する

テーブル結合(JOIN)の説明

「結合」は複数のテーブルをひっつけるという意味です。複数のテーブルを結合して、1つの結果にまとめたいときに使います。

「両方のテーブルにある行」のみを取り出して結合することを内部結合と言います。

SELECT テーブル名1.フィールド名, テーブル名2.フィールド名 

FROM テーブル名1

JOIN テーブル名2

ON テーブル名1.フィールド名 = テーブル名2.フィールド名;

流れを簡単に説明すると、

SELECTに続けて、どのテーブルのどのフィールドデータをそれぞれ取り出すのかということを「テーブル名.フィールド名」で明示し、「,」で区切っていきます。

それからFROMで結合の基準となるテーブル名を書き、JOINでもう一方のテーブル名を書きます。

最後に、ONで各テーブルのどのフィールドを基準に紐づくのかを=で繋いで書きます。

【 usersテーブル】
スクリーンショット 2019-03-14 17.24.47.png (113.5 kB)

【 postsテーブル】
スクリーンショット 2019-03-14 17.26.49.png (139.3 kB)

【 user_informationテーブル】
スクリーンショット 2019-03-14 16.33.27.png (117.4 kB)

例:

「usersテーブル」のユーザー名nameと「user_informationテーブル」のユーザー趣味hobbyを両方撮りたい時、
まずこんな感じて書いてみよう:

SELECT users.name,user_information.hobby FROM users 

エラーになりましたね。。
じゃ、次はuser_informationテーブルを繋げるようにJOINしてみましょう。

SELECT users.name,user_information.hobby FROM users 
inner join user_information

なんか結果おかしいですね。。

オッケー、最後、どんな条件どんなフィールドを基準に二つのテーブルを繋いてるを確認して、onの中で書きましょう。最後セミコロンを忘れないようにご注意してください!

SELECT users.name, user_information.hobby FROM users 
inner join user_information on (users.id = user_information.user_id);

こんな感じでデータを取れましたね!〜
スクリーンショット 2019-03-14 18.21.13.png (66.4 kB)

練習課題

    1. usersテーブルのpost_id,nameを取得する
SELECT users.post_id, users.name FROM users;


    1. usersテーブルのpost_id,nameとpostsテーブルのcommentsを取得する。
      条件: usersテーブルのpost_idとpostsテーブルのidは一致している
SELECT users.post_id, users.name, posts.comments FROM users 
JOIN posts on (users.post_id = posts.id);


    1. usersテーブルのpost_id,nameとpostsテーブルの「created」を取得する。
      条件: usersテーブルのpost_idとpostsテーブルのidは一致している
SELECT users.post_id, users.name, posts.created FROM users 
JOIN posts on (users.post_id = posts.id);


    1. usersテーブルのid,nameとuser_informationテーブルの「revenue」を取得する。
      条件: usersテーブルのidとuser_informationテーブルのuser_idは一致している
SELECT users.id, users.name, user_information.revenue FROM users 
JOIN user_information on (users.id = user_information.user_id);


    1. usersテーブルのid,nameとuser_informationテーブルの「revenue」「hobby」を取得する。
      条件: usersテーブルのidとuser_informationテーブルのuser_idは一致している
SELECT users.id, users.name, user_information.revenue, user_information.hobby FROM users 
JOIN user_information on (users.id = user_information.user_id);


    1. usersテーブルのid,nameとuser_informationテーブルの「revenue」とpostsテーブルのcommentsを取得する。
      条件: usersテーブルのidとuser_informationテーブルのuser_idは一致している
      usersテーブルのpost_idとpostsテーブルのidは一致している
SELECT users.id, users.name, user_information.revenue, posts.comments from users 
JOIN user_information on (users.id = user_information.user_id)
JOIN posts on (users.post_id = posts.id);
0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?