0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

SQLの基礎について学ぶ#03

Posted at

今回は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について引き続き学び、また次回投稿していきたいと思います!!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?