👌

学習備忘録〜O'Reilly「初めてのSQL」4章〜

2023/12/31に公開

はじめに

この備忘録は、新卒1年目の初学者バックエンドエンジニアの学習記録のためにつけているものです。
解釈違いや、誤情報がある可能性があります。見つけた際にはご指摘をお願いします。

第4章 フィルタリング

where句には、SQL文の影響を受ける行の数を絞り込むためのフィルタ条件が1つ以上含まれている。それに加えて、select文には、グループ化したデータのフィルタ条件を指定できるhaving句もある。select文、update文、delete文のwhere句に指定できる様々な種類フィルタ条件と以下に記載していく。

条件の評価

where句には、複数の条件を指定できる。条件はorまたはand演算子で区切って指定する。
結果セットに含まれるのはすべての条件がtrueと評価された行だけ。

WHERE furst_name = 'STEVEN' AND create_date > '2006-01-01'
中間確認 最終結果
WHERE true OR ture true
WHERE true OR false true
WHERE false OR ture true
WHERE false OR false false

丸括弧を使う

条件を3つ以上指定する場合には、サーバとコードを読む人のためにも、丸括弧を使って意図を明白にするべきである。

WHERE ( first_name = 'STEVEN' OR last_name = 'YOUNG' )
   AND create_date > '2006_01-01'
中間確認 最終結果
WHERE ( true OR ture ) AND true true
WHERE ( true OR false ) AND true true
WHERE ( false OR ture ) AND true true
WHERE ( false OR false ) AND true false
WHERE ( true OR ture ) AND false false
WHERE ( true OR false ) AND false false
WHERE ( false OR ture ) AND false false
WHERE ( false OR false ) AND false false

条件の種類

等号条件

  • 左辺と右辺が等しいことを確認する
  • '='を使用

不等号条件

  • 右辺と左辺の値が等しくないことを確認する
  • '<>'を使用

範囲条件

  • 数値データや値データを使用する際に使われる
  • '<'や'>'を使用
  • '<="や'>='の場合もある

btween演算子

  • 範囲の上限と下限を指定する場合は、条件を2つ使うのではなく、btween演算子を使って条件を1つに減らすこともできる
WHERE rentak_date BTWEEN '2023-12-25' AND '2023-12-23'
  • 常に範囲の下限をbetweenの後ろに指定してから範囲の条件をand演算子の後ろに指定すること

マッチング条件

組み込み関数leftは柔軟ではない。そこで登場するのが、ワイルドカード文字である。

ワイルドカード

部分的にマッチする文字列を検索するときに使える。検索するときいは以下の点に着目する。

  • 特定の文字で始まる/終わる文字列
  • 部分的文字列で始まる/終わる文字列
  • 途中に特定の文字が含まれている文字列
  • 途中に部分的文字列が含まれている文字列
  • 個々の文字に関係なく、特定のフォーマットを持つ文字列
ワイルドカード文字 称号
_ ちょうど1文字
% 任意の個数(0を含む)の文字
WHERE last_name LIKE '_A_T&S';

2文字目がAで4文字目がT、その後に任意の個数の文字が続き、最後にSという文字列を指定している。

検索式とそれらの解釈例

検索式 意味
F% Fで始まる文字列
%t tで終わる文字列
%bas% 文字列'bas'を含んでいる文字列
_t 2文字目がtの2文字の文字列
WHERE last_name LINE 'Q%' OR last_name "Y%";

このクエリはlast_nameがQまたはYで始める人をすべて検索する

正規表現

ここ後日理解後記載

null

nullは捉えどころのない値である。
適用外、値が不明、値が未定義といった場合がある。
nullを扱うときには以下の注意が必要である。

  • 式はnullになることがあるが、nullに等しくなることはない
  • 2つのnullが互いに等しくなることはない

使用する際は以下の形で使用する

WHERE return_date IS NULL;

よくある間違いは以下の形

WHERE return_date = NULL;

nullではない場合を確認したいときには以下の形にする

WHERE return_date IS NOT NULL;

Discussion