SQL入門 3 :)

 

今日はスッキリわかるSQL入門(中山清喬・飯田理恵子著)3章〜

操作する行の絞り込み

 

WHERE句の大切さ

・WHEREから始まるのをWHERE句という

・WHEREを使うと処理対象となる行の絞り込みができる

・テーブル内すべての行を更新したり削除するのってなかなかないから、WHERE句を重宝するらしい

 

◎WHERE句の基本

  • 処理対象行の絞り込みに用いる(WHEREを指定しない場合すべての行が処理対象)
  • SELECT,UPDATE,DELETE文で使用可(INSERT文では使ったらダメ)
  • WHEREのうしろには条件式を記述

 

WHEREのうしろには条件式と呼ばれる式しか書けない

 

条件式とはその結果が必ず真か偽になる式のこと

DBMSは1行ずつ順番に条件にあうかチェックしていくから真か偽になる式しかかいちゃいけないらしい

 

◎基本的な比較演算式

条件式は=とか<>とかの記号を含んだ式になるのがほとんどなんだけど

これらの記号を比較演算子といって、その記号の左右にある値を比較して記号の意味が正しければ真、正しくなければ偽に化ける(SQLの実行によって演算子などが別の値に変化すること)役割をもっている

 

◎NULL

なにもない、未定義なことをしめす。ゼロとも異なる

列の値がNULLであることを判定するにはIS NULL演算子、NULLでないことを判定するにはIS NOT NULL演算子をつかう

 

◎LIKE演算子

パターンマッチング(文字列があるパターンに合致しているかをチェックすること)に使う

パターンマッチングを行うと部分一致の検索(◯◯という文字列を一部に含むか?という判定)が簡単にできる

パターン文字列に使用できる文字には主に

%:任意の0文字以上の文字列

_(アンダースコア):任意の1文字

がある

 

◎BETWEEN演算子

ある範囲内に値が収まっているかを判定

値が「値1以上かつ値2以下」の場合真になる

値がちょうど値1や値2の場合も真になる

 

◎IN/NOT IN演算子

IN演算子:値がカッコ内に列挙した複数の値(値リスト)のいずれかに合致するかを判定する

NOT IN演算子:カッコ内に列挙した値のどれとも合致しないことを判定するのに使う

 

◎ANY/ALL演算子

複数の値と大小を比較したい場合使う

必ずその直前に比較演算子をつけて利用すること

この2つは単体で使うよりも道具と組み合わせて使用するほうがよいがその道具についてはのちのち!

 

論理演算子

  • WHERE句で条件式を使用するとき、1つの条件式ではうまく行を絞り込めない場合があるかも。そんなときに論理演算子を用いて、複数の条件式を組み合わせることができる!

代表的な論理演算子

AND演算子(2つの条件式の両方が真の場合だけ真となる)

OR演算子(2つの条件式のどちらかが真ならば真となる)

がある

ANDとORは両辺に条件式を必要とする演算子である

一方、右辺しか必要としないNOT演算子もある。これは右辺の条件式の結果が、真は偽に、偽は真に逆転する

 

条件式はカッコでくくると評価の優先順位があがる

数学でそんなんあったきがする。。

 NOT/AND/OR/の順で演算子が評価されるらしい。

 

◎主キーの必要性

 

主キーがあると特定の行を認識できる

そもそも行を区別できないということはある特定の行だけを指定して操作することができないことを意味する

完全に重複した行が存在するとそのうちのある行だけを区別、識別することはできないので、ある行だけを操作するということもできないから

テーブルの中に重複した行が格納されるのを避けるべき!!

 

「この値を指定することである1行を完全に特定できる」という役割を担う列のことを主キーという

主キーが持つ特性

・必ず何らかのデータが格納される(NULLではない)

・他の行と値が重複しない

すべてのテーブルは主キーとなるような列を必ず持つべきである

 

例えば社員情報を管理するために社員テーブルを作ろうと考える過程で「氏名」「性別」などに加え「社員番号」という列を作ることは自然

自然に登場して主キーの役割を果たせる列は自然キーと呼ばれる

もし自然キーがないなら無理やり主キーを作るのが一般的

これを人工キーや代替キーという

また、氏名住所生年月日など複数の列を1つの主キーとして扱うものを複合主キーという

 

3章はこんな感じ

 

ANY/ALL演算子とNOT演算子まともに使ったことないんだよなあ

また復習しなおすことになりそう。

 

次は4章検索結果の加工だ〜