【30分で分かる】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で飛ぶと以下のような画面が表示されます。
<img width="1279" alt="スクリーンショット 2019-03-10 午後4.27.27.png" src="https://qiita-image-store.s3.amazonaws.com/0/194189/57f99211-3061-05c6-cb7d-753318317113.png">

### 1-2：テーブルの作成


<img width="1279" alt="スクリーンショット 2019-03-10 午後4.27.27.png" src="https://qiita-image-store.s3.amazonaws.com/0/194189/83be44d8-deeb-e537-22f3-ef60594bddba.png">
SQL Fiddleの「Text to DDL」というボタンを押すと、テーブル情報を打ち込む画面が表示されます。
<img width="1267" alt="スクリーンショット 2019-03-10 午後5.20.41.png" src="https://qiita-image-store.s3.amazonaws.com/0/194189/d94fd0bb-f9b6-196f-24a6-dabee8a835f1.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
<img width="513" alt="スクリーンショット 2019-03-10 午後5.37.17.png" src="https://qiita-image-store.s3.amazonaws.com/0/194189/f5a3447a-f3d9-718b-193a-8610c9097448.png">

ここで用語の説明をしておきます。
<img width="584" alt="スクリーンショット 2019-03-10 午後6.15.46.png" src="https://qiita-image-store.s3.amazonaws.com/0/194189/a8c0b7da-c3f5-de80-df3f-69aeea3c46df.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.シンプルにデータベースに格納されているデータを全て抽出する方法
#### 最終アウトプットイメージ
<img width="483" alt="スクリーンショット 2019-03-10 午後6.22.46.png" src="https://qiita-image-store.s3.amazonaws.com/0/194189/84b0589c-0cd4-4101-9357-ea27793f946f.png">


#### 答え合わせ
```
SELECT -- SELECTでどんなカラム情報を抜き出すかを指定する
 *     -- 全ての情報を抜き出す
FROM   -- FROMでどのテーブルからデータを抽出するかを指定する
 Table1
```
こちらのSQL文ではTable1というテーブルに格納されているデータを全て抽出するという命令を出しています



### 2.男性ユーザーのデータだけを抽出する方法
#### 最終アウトプットイメージ
<img width="545" alt="スクリーンショット 2019-03-10 午後6.47.40.png" src="https://qiita-image-store.s3.amazonaws.com/0/194189/009d6f89-566d-9b4a-283f-0f5e36d3e0c1.png">


#### 答え合わせ
```
SELECT
 * -- 全ての情報を抜き出す
FROM
 Table1
WHERE -- WHEREで条件の指定をする
 sex = 'male' -- 性別が男性のデータのみを抽出
```
こちらのSQL文ではTable1というテーブルに格納されているデータの中でsexカラムに「male」という文字列を含むものを抽出するという命令を出しています

### 3.2018年に登録をした女性ユーザーのみ抽出する
#### 最終アウトプットイメージ
<img width="546" alt="スクリーンショット 2019-03-10 午後7.02.36.png" src="https://qiita-image-store.s3.amazonaws.com/0/194189/1372d898-b485-0f3e-de9c-cb40d8fadb2b.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.男性、女性ユーザーのそれぞれの数を抽出する
#### 最終アウトプットイメージ
<img width="544" alt="スクリーンショット 2019-03-10 午後7.15.52.png" src="https://qiita-image-store.s3.amazonaws.com/0/194189/df301cc6-9fb4-a653-dec9-ad01e890c432.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