Help us understand the problem. What is going on with this article?

【30分で分かる】SQL初心者のための超入門講座

More than 1 year has passed since last update.

前置き

会社全体として分析が出来る人が不足していて、課題意識を持っています。分析の民主化を進めるべきだと思っており、より分析チームのノウハウを広げていきたいと考えています。

現在、ネットにあるSQL関連の記事は一定の前提知識があることを前提にしていて、本当の初心者には敷居が高くなってしまっていると感じていました。

本記事のゴール

この記事は分析を全く知らない方向けにSQLをかける人を増やすという目的で、執筆していきたいと思います。

<こんな方にオススメ>
・自分で施策の検証までやって高速でPDCAを回したいビジネス職の方
・分析人材を育てる際のとっかっかりとしての教材が欲しい方

SQLとは?

SQLとはユーザーの登録日や性別などの情報が入っているデータベース上の情報を操作するための言語です。
SQLを使えば、データベースに格納されているデータを抽出して、分析に生かすことが出来ます。

さっそく書いてみる

実際に進めていく中で用語、関数を覚えられるようにしたいと思います。

ステップ1:

SQL実行環境の用意
(→実際にSQlが叩ける環境にある場合、代用ツールがある場合は飛ばしてもらって大丈夫です)

ステップ2:

SQL作成&データの抽出

ステップ1:SQL実行環境の用意

まずはデータベースからデータを抽出するためSQLを実行する環境を用意する必要があります。

今回は、SQL fiddleという登録不要でSQLの実行環境が作れるWEBサービスを使って練習していきます。(めちゃくちゃ簡単です!)

1-1:SQL fiddleへ移動

SQL fiddle
http://sqlfiddle.com/

上記のURLで飛ぶと以下のような画面が表示されます。
スクリーンショット 2019-03-10 午後4.27.27.png

1-2:テーブルの作成

スクリーンショット 2019-03-10 午後4.27.27.png
SQL Fiddleの「Text to DDL」というボタンを押すと、テーブル情報を打ち込む画面が表示されます。
スクリーンショット 2019-03-10 午後5.20.41.png

テキストウィンドウに下記の「コピペ用」の文字列をペーストして、「Append to DDL」を押して、テーブルを作成します。

コピペ用

id | name | dt | sex
1 | takuya | 2017-10-01 00:00:00 | male
2 | fumi | 2018-04-01 00:00:00 | female
3 | ayaka | 2018-10-01 00:00:00 | female
4 | yota | 2018-10-23 00:00:00 | male
5 | shinya | 2018-11-02 00:00:00 | male
6 | miku | 2019-01-01 00:00:00 | female
7 | toshiki | 2019-03-10 00:00:00 | male

上記を実行すると以下のようなデータを持ったTable1が出来上がります

Table1

スクリーンショット 2019-03-10 午後5.37.17.png

ここで用語の説明をしておきます。
スクリーンショット 2019-03-10 午後6.15.46.png
id:ユーザーがアプリに登録する際に付与されるidのこと
name:ユーザーの名前
dt:登録日時
sex:性別
※カラム名は今回仮りで付けてあります

テーブル:

情報をまとめた一つの表のようなものです。
今回のサンプルではユーザーの名前や登録日時が格納されているので、ユーザー情報がまとめられたテーブルになります。

カラム:

データベースに入っている縦列の情報群のことを指します。
サンプルではカラム名「id」の中に1~7のidが格納されていることになります。

レコード:

データベースに入っている横列の情報群のことを指します。

SQL作成&データの抽出

SQLを作成して、画面の「RunSQL」をクリックするとデータ抽出が出来ます。

今回は4つほどよく使う文法を使って実際にデータを抽出してみます。

<オススメの学習ステップ>

1周目:
1.SQL文を見てから、どんな処理が走るのか学びます
2.実際に自分でSQLを作成し、実行します
3.正しい数値が抽出されているか確認します

2周目:
1.最終アウトプットを見て、SQL文をイメージ
2.実際にSQLを作成し、実行します
3.正しい数値が抽出されているか確認します

1.シンプルにデータベースに格納されているデータを全て抽出する方法

最終アウトプットイメージ

スクリーンショット 2019-03-10 午後6.22.46.png

答え合わせ

SELECT -- SELECTでどんなカラム情報を抜き出すかを指定する
 *     -- 全ての情報を抜き出す
FROM   -- FROMでどのテーブルからデータを抽出するかを指定する
 Table1

こちらのSQL文ではTable1というテーブルに格納されているデータを全て抽出するという命令を出しています

2.男性ユーザーのデータだけを抽出する方法

最終アウトプットイメージ

スクリーンショット 2019-03-10 午後6.47.40.png

答え合わせ

SELECT
 * -- 全ての情報を抜き出す
FROM
 Table1
WHERE -- WHEREで条件の指定をする
 sex = 'male' -- 性別が男性のデータのみを抽出

こちらのSQL文ではTable1というテーブルに格納されているデータの中でsexカラムに「male」という文字列を含むものを抽出するという命令を出しています

3.2018年に登録をした女性ユーザーのみ抽出する

最終アウトプットイメージ

スクリーンショット 2019-03-10 午後7.02.36.png

答え合わせ

SELECT
 *
FROM
 Table1
WHERE
 sex = 'female'
 AND dt BETWEEN '2018-01-01' AND '2018-12-31' -- 2018年に登録したユーザーのみ抽出

登録日(dt)が2018年(2018/1/1~2018/12/31)の女性ユーザー(female)のみを抽出しています

4.男性、女性ユーザーのそれぞれの数を抽出する

最終アウトプットイメージ

スクリーンショット 2019-03-10 午後7.15.52.png

答え合わせ

SELECT
 sex, -- 数を数えるカラム名の指定をする必要がある
 count(id) as id_count 
  -- count:GROUP BYで集約されたidの数を数える 
  -- as:countした結果を出す際のカラム名の指定ができる
FROM
 Table1
GROUP BY -- GROUP BYに指定されたカラム名を基準に同じ値を持つ行を同じグループに分ける
 sex -- male、femaleに集約される

GROUP BYで性別(sex)を基点に集約し、男女それぞれのidの数をcount関数で集計しています

もし良かったらこの記事にいいね頂きたいです!
執筆のモチベにして良い記事たくさん書いていきますmm

pomuboy
とあるIT企業でデータサイエンティストとしてお仕事をしています。SQL、Rについての記事が多くなります。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした