プログラ生活

プログラム初学者のためのポイントを書いていこうと思います。たまに脇道それた記事もありますが、息抜きだとおもって気長にお付き合いください。

【SQL Server(連載)】SELECT文 (カラムの選択) -3-

www.pon-x.jp

前回のつづき

今回からいよいよSQLを書いていきます。

まずはSQLを書く準備

SSMSを立ち上げましょう。
立ち上がったら、「新しいクエリ」をクリックしてください。
f:id:hanabusa-snow:20201119085330p:plain

そのあと、以下の図のようにプルダウンから「AdventureWorks2019」を選択してください。
f:id:hanabusa-snow:20201119085333p:plain

これで、「AdventureWorks2019」に対してSQLを実行できるようになります。

SELECT文

SELECT文は以下のように書きます。

SELECT [列名]
FROM  [テーブル名]

リレーショナルデータベースは、列にデータの種類を定義していき、行にデータを追加していくという形式のデータベースです。
今回行っていくのは、最も基本的な列の制御になります。

さてさて、SQLに戻りますが列名をアスタリスクに変えると、列をすべて指定できます。

SELECT *
FROM  [テーブル名]

では、ためしに以下のように記述してみましょう。

SELECT * 
FROM Person.Person

実行はヘッダの「実行ボタン」か、Windowsなら「F5」ボタンを押すとできます。
以下のように出力されます。
f:id:hanabusa-snow:20201119085821p:plain

次に、列を限定してみましょう。
以下のように列を複数選択するときは、カンマ区切りで指定する必要があります。

SELECT [列名],[列名],[列名]
FROM  [テーブル名]

それでは、試してみます。
以下のとおり記述して実行して下さい。

SELECT 
    FirstName,
    MiddleName,
    LastName 
FROM 
    Person.Person

以下のように抽出できたと思います。 f:id:hanabusa-snow:20201119090224p:plain

いかがでしょうか。
ちなみに列名のことをカラムといいますので、これからは「カラム」で統一したいと思います。

カラムを結合する。

カラムの文字列を結合したいということがたまにあります。
この際は、「+」で結合することができます。
実際に試してみましょう。

SELECT 
    FirstName,
    MiddleName,
    LastName,
    FirstName +' ' + MiddleName + ' ' + LastName
FROM 
    Person.Person

4列目を結合してあげています。
なお、間に空文字も入れていますね。
このように、カラムには固定文字も結合することができます。
以下のような結果が確認できますでしょうか。

f:id:hanabusa-snow:20201119090651p:plain
結合ができていますね。
ここであることに気づきます。

実は、結合ができていない行があるのです。(行のことはレコードと呼ぶので以下、レコードと呼びます。)
実は、NULLがあるデータは結合ができないのです。
つまり、MiddleNameはない人がいたのでNULLになっている場合があり、結合できなかったのです。

NULLとは!?

NULLとは、簡単に言うとデータが存在しないことを言います。
ちなみに、空文字とは違います。空文字は「空文字というデータ」が存在するのです。
つまり、文字列があるかないかではなく、データ自体が存在するか否かをかんがえていて、この際存在しないのがNULLです。
上記の結合できなかった例を見ると、データがあるものとないものでは結合できないという現象が起きていたことになります。

では、NULLがあるデータを処理して結合したい場合はどうすればよいかを考えます。
これは、簡単でNULLを空文字に変えてしまえばいいのです。
いろいろやり方はあるのですが、ここではSQLServerに用意されている便利な関数、ISNULL関数を使ってみます。
ISNULL関数は、以下のように使います。

ISNULL([カラム名], [カラムがNULLであった時置換したい文字列])

ですので、さきほどの結合したかったSQLは以下のように書き換えればよいのです。

SELECT 
    FirstName,
    MiddleName,
    LastName,
    FirstName +' ' + ISNULL(MiddleName,'') + ' ' + LastName
FROM 
    Person.Person

以下のようにMiddeleNameがNULLであっても無事に結合できましたね。

f:id:hanabusa-snow:20201119091544p:plain

以上、今回は簡単なSELECT文をやりました。
次回も引き続きSELECT文です。