SQLの基礎について学ぶ＃０３


今回はSQLを用いた操作する行の絞り込みについて、まとめていきたいと思います。
### 過去の関連投稿
「[SQLの基礎について学ぶ＃０１](https://qiita.com/TAISEI-050523/items/31dd74cd386fe4dc46bf "Qiita")」
「[SQLの基礎について学ぶ＃０２](https://qiita.com/TAISEI-050523/items/75265fba015879bd3bf8 "Qiita")」
## ０．accountテーブル
今回は以下のテーブルを使用していきます。
### accountテーブル
|    date（日付）    |    name（項目名）       |    price（金額）     |
|:-----------:|:------------:|:------------:|
| 2020-12-03 |　お弁当（昼食）  　 | 9000         |
| 2021-01-03 |　飲み代 　 | (NULL)         |
| 2021-05-22 |　電車代  　 | 3000         |
| 2021-03-14 |　日用品  　 | （NULL）        |
| 2021-04-02 |　ローン  　 | 4000         |
| 2021-01-12 |　医療費  　 | 3000         |
| 2020-12-09 |　ラーメン（昼食）  　 | 2000         |

## 1. WHERE句の基本

▶ WHERE句のあとには条件式を記述する。（結果が必ず真（TRUE）か偽（FALSE)となる条件式）
▶ 処理する行の絞り込み。（WHEREを指定しないと<b>すべての行が対象</b>となる）
▶ SELECT, UPDATE, DELETE文で使用できる。（INSERT文では<b>使用できない</b>）



## ２. SQLで用いられる基本的な比較演算子
### 主な比較演算子
|   比較演算子  |   区分     |
|:-----------:|:------------:|
|=            |  左右の値が等しい　 | 
|<            |  左辺は右辺より小さい 　 |
|>            |　左辺は右辺より大きい  　 |
|<=           |　左辺は右辺の値以下  　 | 
|>=           |　左辺は右辺の値以上  　 | 
|<>           |　左右の値は等しくない 　 |


## ３． NULLの判定方法
### NULLとは
▶ 何も格納されていない、未定義状態を表す。
▶ 数字のゼロや空白文字と異なる。
▶ NULLは比較演算子の=で判定できない！！ 
### NULLであることを判定する
```SQL
SELECT *
FROM account
WHERE price IS NULL /* NULLであることを判定する */
```
###結果
|    date（日付）    |    name（項目名）       |    price（金額）     |
|:-----------:|:------------:|:------------:|
| 2021-01-03 |　飲み代 　 | (NULL)         |
| 2021-03-14 |　日用品  　 | （NULL）        |

### NULLでないことを判定する
```SQL
SELECT *
FROM account
WHERE price IS NOT NULL /* NULLでないことを判定する */
```
###結果
|    date（日付）    |    name（項目名）       |    price（金額）     |
|:-----------:|:------------:|:------------:|
| 2020-12-03 |　お弁当（昼食）  　 | 9000         |
| 2021-05-22 |　電車代  　 | 3000         |
| 2021-04-02 |　ローン  　 | 4000         |
| 2021-01-12 |　医療費  　 | 3000         |
| 2020-12-09 |　ラーメン（昼食）  　 | 2000         |

## ４． LIKE演算子
### LIKE演算子で用いるパターン文字
|   パターン文字  |   意味     |
|:-----------:|:------------:|
|%            |  任意の０文字以上の文字列　 | 
|_(アンダースコア)|  任意の１文字 　 |
```SQL
SELECT *
FROM account
WHERE name LIKE '%昼食%' /* 昼食の前後に任意の文字列がついても良い */
```
### 結果
|    date（日付）    |    name（項目名）       |    price（金額）     |
|:-----------:|:------------:|:------------:|
| 2020-12-03 |　お弁当（昼食）  　 | 9000         |
| 2020-12-09 |　ラーメン（昼食）  　 | 2000         |
▶ nameのカラムに「昼食」という文字列がある行を取得

## ５． BETWEEN演算子
▶ BETWEEN演算子はある範囲内に収まっているかを判定する。

```SQL
SELECT *
FROM account
WHERE price BETWEEN 100 AND 3000   /* 100円〜3000円の金額を取得する */
```
### 結果
|    date（日付）    |    name（項目名）       |    price（金額）     |
|:-----------:|:------------:|:------------:|
| 2021-05-22 |　電車代  　 | 3000         |
| 2021-01-12 |　医療費  　 | 3000         |
| 2020-12-09 |　ラーメン（昼食）  　 | 2000         |

## ６． IN/NOT IN演算子
▶ IN演算子による複数値との比較
　式 IN (値1, 値2, 値3, ・・・)
▶ =演算子は1つの値としか比較できないがIN演算子は複数の値と比較ができる。

```SQL
SELECT *
FROM account
WHERE price IN (3000, 4000)   /* 金額が3000円と4000円の値であるの行を取得する */
```
### 結果
|    date（日付）    |    name（項目名）       |    price（金額）     |
|:-----------:|:------------:|:------------:|
| 2021-05-22 |　電車代  　 | 3000         |
| 2021-04-02 |　ローン  　 | 4000         |
| 2021-01-12 |　医療費  　 | 3000         |
▶ 逆にNOT IN演算子を用いると金額が3000円でも4000円でもない金額の行が取得される。

## ７． ANY/ALL演算子
▶ IN演算子はある値が複数の値のどれかと等しいか判定することができましたが、複数の値と大小を比較したい場合は<b>ANY演算子</b>や<b>ALL演算子</b>を利用します。
### （１） IN演算子の場合
金額3000円が（）内の値の「<b>どれか</b>」に「<b>等しい</b>」なら真
 金額3000円 IN (2000, 3000, 4000） ▶▶▶ 3000の値と等しいため<b>真</b> 
### （２） ANY演算子の場合
金額2500円が（）内の値の「<b>どれか</b>」より「<b>小さい</b>」なら真
 2500 < ANY (2000, 3000, 4000） ▶▶▶ 3000より小さいので<b>真</b>
### （３） ALL演算子の場合
金額2500円が（）内の値の「<b>すべて</b>」より「<b>小さい</b>」なら真
 2500 < ALL (2000, 3000, 4000） ▶▶▶ 2000より大きいので<b>偽</b>

▶ これだけ見ると単純にANY/ALL演算子のメリットはあまり感じられません。しかし、「式」や「副問合せ」などのツールとして組み合わせることで、真価を発揮するみたいです。これについては、また学習を進めて投稿していきたいと思います。

# まとめ
今回はここまでです！SQLについて引き続き学び、また次回投稿していきたいと思います！！