前回は、SELECT文においてカラムの制御を勉強しました。
今回は、行(レコード)を制御したいと思います。
ちなみにリレーショナルデータベースにおいて列(カラム)はデータの属性(種類)でありこれを定義したテーブルについて、行(レコード)を増やしていくという構造です。
この際、レコードの数をデータ量と呼んだりもします。
さてさて、ではやっていきましょう。
レコードを制御するためのWHERE句
PersonTypeカラムは以下のデータが存在します。
- IN
- EM
- SP
- SC
- VC
- GC
このうち、PersonTypeがEMのレコードだけを抽出したいと思います。
SQLは以下の通り。
SELECT * FROM Person.Person WHERE PersonType='EM'
以下のような結果となり、データ数が273になったとおもいます。
複数条件をつけるときは、論理演算で考える。
論理演算とは、AND、OR、NOT等で条件を複合的に考えるものです。
上記条件に加えて、TitleがNULLであるという条件を加えます。
NULLであるという条件は、[カラム名] IS NULL で指定します。
ちなみにNULLでないという指定は、[カラム名] IS NOT NULL で指定します。
SQLは以下の通り
SELECT * FROM Person.Person WHERE PersonType='EM' AND Title IS NULL
以下のような結果となり、データ数が267になったとおもいます。
AND条件(論理積)は、条件を厳しくしていくものなので、増やせば増やすほどデータ数が減っていくイメージをもつとよいでしょう。
では、次にOR条件を確認します。
PersonTypeがEMである、もしくはTitleがNULLであるレコードを抽出します。
上記のSQLのANDをORに変えるだけですね。
SELECT * FROM Person.Person WHERE PersonType='EM' OR Title IS NULL
以下のような結果となり、データ数が18969になったとおもいます。
OR条件(論理和)は、いずれかの条件を満たしているレコードを抽出するため条件が緩くなり、増やせば増やすほどデータが増えていくイメージをもつとよいでしょう。
IN句
PersonTypeカラムは以下のとおりでしたね。
- IN
- EM
- SP
- SC
- VC
- GC
ちなみに、このなかから、EMとSPとVCとGCのいずれかのレコードを抽出するといったとき、OR条件で結ぶのはコードを書くのが大変ですよね。
その時役に立つのが、IN句です。
以下のように書くことができます。
SELECT * FROM Person.Person WHERE PersonType IN ('EM','SP','VC','GC')
結果は以下の通り
結構よく使うので覚えておいた方がよいでしょう。
重複削除
そもそも、PersonTypeに存在するデータが6種類だってなんでわかったの??と思いませんでしたか??
こんなとき、カラム内のデータの重複を削除してくれる便利な「DISTINCT」というのがあります。
SELECT DISTINCT PersonType FROM Person.Person
結果は以下の通り
これで、存在するデータの種類を把握することができます。
以上、次回も引き続きSELECTです。