今回はSQLを用いた操作する行の絞り込みについて、まとめていきたいと思います。
過去の関連投稿
「SQLの基礎について学ぶ#01」
「SQLの基礎について学ぶ#02」
0.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を指定しないとすべての行が対象となる)
▶ SELECT, UPDATE, DELETE文で使用できる。(INSERT文では使用できない)
2. SQLで用いられる基本的な比較演算子
主な比較演算子
比較演算子 | 区分 |
---|---|
= | 左右の値が等しい |
< | 左辺は右辺より小さい |
> | 左辺は右辺より大きい |
<= | 左辺は右辺の値以下 |
>= | 左辺は右辺の値以上 |
<> | 左右の値は等しくない |
3. NULLの判定方法
NULLとは
▶ 何も格納されていない、未定義状態を表す。
▶ 数字のゼロや空白文字と異なる。
▶ NULLは比較演算子の=で判定できない!!
NULLであることを判定する
SELECT *
FROM account
WHERE price IS NULL /* NULLであることを判定する */
結果
date(日付) | name(項目名) | price(金額) |
---|---|---|
2021-01-03 | 飲み代 | (NULL) |
2021-03-14 | 日用品 | (NULL) |
NULLでないことを判定する
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 |
4. LIKE演算子
LIKE演算子で用いるパターン文字
パターン文字 | 意味 |
---|---|
% | 任意の0文字以上の文字列 |
_(アンダースコア) | 任意の1文字 |
SELECT *
FROM account
WHERE name LIKE '%昼食%' /* 昼食の前後に任意の文字列がついても良い */
結果
date(日付) | name(項目名) | price(金額) |
---|---|---|
2020-12-03 | お弁当(昼食) | 9000 |
2020-12-09 | ラーメン(昼食) | 2000 |
▶ nameのカラムに「昼食」という文字列がある行を取得 |
5. BETWEEN演算子
▶ BETWEEN演算子はある範囲内に収まっているかを判定する。
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 |
6. IN/NOT IN演算子
▶ IN演算子による複数値との比較
式 IN (値1, 値2, 値3, ・・・)
▶ =演算子は1つの値としか比較できないがIN演算子は複数の値と比較ができる。
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円でもない金額の行が取得される。 |
7. ANY/ALL演算子
▶ IN演算子はある値が複数の値のどれかと等しいか判定することができましたが、複数の値と大小を比較したい場合はANY演算子やALL演算子を利用します。
(1) IN演算子の場合
金額3000円が()内の値の「どれか」に「等しい」なら真
金額3000円 IN (2000, 3000, 4000) ▶▶▶ 3000の値と等しいため真
(2) ANY演算子の場合
金額2500円が()内の値の「どれか」より「小さい」なら真
2500 < ANY (2000, 3000, 4000) ▶▶▶ 3000より小さいので真
(3) ALL演算子の場合
金額2500円が()内の値の「すべて」より「小さい」なら真
2500 < ALL (2000, 3000, 4000) ▶▶▶ 2000より大きいので偽
▶ これだけ見ると単純にANY/ALL演算子のメリットはあまり感じられません。しかし、「式」や「副問合せ」などのツールとして組み合わせることで、真価を発揮するみたいです。これについては、また学習を進めて投稿していきたいと思います。
まとめ
今回はここまでです!SQLについて引き続き学び、また次回投稿していきたいと思います!!