SQLデータ分析入門#3『WHERE句を理解する』

[SQLデータ分析入門#2『SELECT ~ FROM ~ を理解する』 - Qiita](https://qiita.com/piyoSakai/items/b001eac8e0981244be39)
の続き

# 本記事のスコープ
- 「WHERE」の意味がわかる
- andやorで条件をつなげることができる

# 1行で説明すると
条件に応じたものだけ表示する、フィルタみたいなもの

# その前に条件の書き方
## これだけは覚えてほしい
![image.png](https://qiita-image-store.s3.amazonaws.com/0/214098/d4e2302b-95fc-4fc6-56b9-131ad9c2adf4.png)
※ NULL対応ってやつはいいや

## いずれわかればいい
![image.png](https://qiita-image-store.s3.amazonaws.com/0/214098/61d9e5c7-bc99-335e-1da7-d662b4e1374c.png)

[比較演算子 - MySQLの基本構文 - MySQLの使い方](https://www.dbonline.jp/mysql/ini/index7.html)より



# 例えば
こんなテーブルがあったときの実行結果
![image.png](https://qiita-image-store.s3.amazonaws.com/0/214098/dae14fcd-c853-7eff-ddef-11aceb068810.png)

## ある1つの条件を満たしたものをとってくる
### IDが1
```SQL
SELECT *
FROM User
WHERE ID = 1
```
![image.png](https://qiita-image-store.s3.amazonaws.com/0/214098/57b96307-596e-c223-4b23-deb01c5db4b9.png)

### 性別がf
```SQL
SELECT *
FROM User
WHERE 性別 = "f" -- 文字(列)は""か''で囲むべし
```
![image.png](https://qiita-image-store.s3.amazonaws.com/0/214098/4b193ac4-57ef-0f82-4927-089b72862681.png)

### 身長が170以上
```SQL
SELECT *
FROM User
WHERE 身長 >= 170
```
![image.png](https://qiita-image-store.s3.amazonaws.com/0/214098/dec07f94-332c-416d-e3c4-b902255d07ee.png)

## 2つの条件”両方”満たしたものをとってくる(AND条件)
### 身長が170以上の女性(f)
```SQL
SELECT *
FROM User
WHERE 身長 >= 170 AND 性別 = "f"
```
![image.png](https://qiita-image-store.s3.amazonaws.com/0/214098/e971c8a6-4ead-af68-b9c0-c7843f21267e.png)

## 2つの条件”いずれかを”満たしたものをとってくる(OR条件)
### 身長が170以上か、男性(m)
```SQL
SELECT *
FROM User
WHERE 身長 >= 170 OR 性別 = "m"
```
![image.png](https://qiita-image-store.s3.amazonaws.com/0/214098/7d3caf49-08cd-abdc-b937-15acc90b3e6d.png)


## 複数の条件を満たしたものを取ってくる
### IDが1か3か5
```SQL
SELECT *
FROM User
WHERE
   ID = 1
   OR ID = 3
   OR ID = 5
```
![image.png](https://qiita-image-store.s3.amazonaws.com/0/214098/a8a41211-26a3-89ee-067a-de8bc313ac96.png)

IN句を使うことで、同じ内容をこのようにも書ける

```SQL
SELECT *
FROM User
WHERE ID in (1, 3, 5)
```

### IDが1か3か5の、女性
ANDとORを組み合わせるときは要注意。
読みやすさと、間違えにくさの観点から、**()でくくると優先される**というルールを活用する
詳細は：[複数条件での検索（AND, OR） » MySQL入門 | MySQL入門](http://mysql.ashitaha.com/archives/99)

```SQL
SELECT *
FROM User
WHERE
   (
    ID = 1
    OR ID = 3
    OR ID = 5
   )
   AND 性別 = "f"
```

# 推薦図書
よくあるSQL本はエンジニア向けなのですが、この本は分析をしたいだけの人に向いてます。
<a href="https://www.amazon.co.jp/10%E5%B9%B4%E6%88%A6%E3%81%88%E3%82%8B%E3%83%87%E3%83%BC%E3%82%BF%E5%88%86%E6%9E%90%E5%85%A5%E9%96%80-SQL%E3%82%92%E6%AD%A6%E5%99%A8%E3%81%AB%E3%83%87%E3%83%BC%E3%82%BF%E6%B4%BB%E7%94%A8%E6%99%82%E4%BB%A3%E3%82%92%E7%94%9F%E3%81%8D%E6%8A%9C%E3%81%8F-Informatics-IDEA-%E9%9D%92%E6%9C%A8/dp/4797376279/ref=as_li_ss_il?ie=UTF8&qid=1529821989&sr=8-1&keywords=10%E5%B9%B4%E6%88%A6%E3%81%88%E3%82%8B%E3%83%87%E3%83%BC%E3%82%BF%E5%88%86%E6%9E%90%E5%85%A5%E9%96%80&linkCode=li2&tag=t11378rs0f-22&linkId=904d97de322a8c31a37e518e1ef2a7a8" target="_blank"><img border="0" src="//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=4797376279&Format=_SL160_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=t11378rs0f-22" ></a><img src="https://ir-jp.amazon-adsystem.com/e/ir?t=t11378rs0f-22&l=li2&o=9&a=4797376279" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />

# 前後の記事
[SQLデータ分析入門#1『SQLってなんだ』 - Qiita](https://qiita.com/piyoSakai/items/926b8f46b08c4a9d439a)
[SQLデータ分析入門#2『SELECT ~ FROM ~ を理解する』 - Qiita](https://qiita.com/piyoSakai/items/b001eac8e0981244be39)
[SQLデータ分析入門#3『WHERE句を理解する』 - Qiita](https://qiita.com/piyoSakai/items/44bc21178349103e2d45)
[SQLデータ分析入門#4『LIMIT句を理解する』 - Qiita](https://qiita.com/piyoSakai/items/131553cbc40ac357477f)
[SQLデータ分析入門#5『集計関数を理解する』 - Qiita](https://qiita.com/piyoSakai/items/16214cd50e28386c97ed)
[SQLデータ分析入門#6『結果の順番をいい感じにする』 - Qiita](https://qiita.com/piyoSakai/items/6008c62a88554a44eb2a)
[SQLデータ分析入門#7『複数のテーブルにまたがって集計する』 - Qiita](https://qiita.com/piyoSakai/items/84bd688b4e4db2148193)
[SQLデータ分析入門#8『基本的な関数を知る』 - Qiita](https://qiita.com/piyoSakai/items/f79869a5b60ab7e8c3b2)