未来エンジニア養成所Blog

月単価180万以上のプログラミング講師がプログラミングを皆に楽しんでもらうための情報をお届けします。

【DB入門】テーブルから情報を取り出そう Part2

title


関数のネスト

関数の引数には、列の値や定数だけでなく、別の関数の結果を使うこともできます。

このように、関数の結果をさらに別の関数の引数にしていくことを、関数をネストさせる(入れ子にする)といいます。

別々の関数を組み合わせ、ネストさせることで、さまざまな情報を扱うことができるようになります。



(使用例)

「今日はYYYY-MM-DDです」いう形式で現在の日付を表示する。

(curdate関数で得た今日の日付と、「今日は」「です」という文字列をCONCAT関数で連結する。)

ネスト1



今日の日付から、曜日を調べる。( 1 = 日曜日 , 2 = 月曜日 , 3 = 火曜日 ..)

(curdate関数で得た今日の日付を、dayofweek関数の引数にする。)

ネスト2



今日から 90 日後の日付を調べる。

(curdate関数で得た今日の日付をto_days関数で日数に直し、90日を足してから、from_days関数の引数にする。)

ネスト3



【ヒント】ネストの考え方

関数のネストがいくつも重なることを、ネストが深くなる、と表現することがあります。

ネストが深くなった時には、内側の括弧の中の実行結果から順番に考えていくようにします。



条件を指定して レコードを 抽出する

WHERE句を使用すると、条件に一致した行のみを抽出することができます。


【書式】WHERE 句を用いた記述形式

SELECT 列名1 , 列名2 ・・・ FROM テーブル名 WHERE レコードの抽出条件;



WHERE句で抽出条件を指定する場合は、次の形式で記述します。


WHERE 左辺 比較演算子 右辺



【ヒント】

比較演算子と両辺の間は、スペースを空けても空けなくても、どちらでも構いません。



比較演算子で左辺と右辺を比較します。

次の表は、主な比較演算子です。


比較演算子 意味 記述例
= 等しい 年齢 = 20、性別 = '男'
> 大きい 年齢 > 20
>= 以上 年齢 >= 20
< 小さい 年齢 < 20
<= 以下 年齢 <= 20
<> または != 等しくない 性別 <> '男'、性別 != '男'


数値はそのまま記述し、文字は「'(半角シングルクォーテーション)」または「"(半角ダブルクォーテーション)」で囲み ます。

このように、文字や数値を固定的な値で表現したものを「定数」または「リテラル」と呼びます。



次の例は、[ensyu_db]データベースの[buin_score_list]テーブルから、性別が男性のレコードを抽出しています。

条件



【ヒント】抽出条件の指定方法

抽出条件の記述は1つとは限りません。

「学年が1年生と2年生」を抽出するために、条件を「学年が2年以下」としても「学年が3年でない」でも同じ結果を出すことができます。

条件指定は、自分でいろいろと工夫をしてみましょう。



【ヒント】以上、より大きい、以下、未満

「>=」(以上)はその値を含んで大きい数になります。

例えば、「2nd >= 50」は50とそれより大きい数となります。

「>」はその値を含みません。

「2nd > 50」は50を含まない、整数であれば51以上の数となります。

「<=」はその値を含んで小さい数、「以下」です。

「2nd <= 50」は50とそれより小さい数となります。

「<」はその値を含まない小さい数「未満」です。

「2nd < 50」は50を含まない、整数であれば49以下の数となります。



文字列のマッチング(LIKE演算子)

WHERE句による文字列の検索を行う場合、あらかじめ検索する文字列がわかっている場合には、演算子によりWHERE句を指定することができます。

しかし、抽出する文字列が、すべて判明しているとは限りません。


このように、曖昧な条件でデータを抽出する必要がある時は、比較演算子としてLIKE演算子を使用します。



文字列を条件とした検索を行う場合、LIKE演算子を使用することで、文字列の一部だけを条件とした抽出を行うことができます。

部分的に判定を行うことから、LIKE演算子による検索を「パターンマッチング」と呼ぶことがあります。


LIKE演算子を用いたマッチングは、以下の形式で記述します。



WHERE 左辺 LIKE ≪検索パターン≫



検索パターンには、「ワイルドカード」または「メタ文字」と呼ばれる特殊文字を使用することができます。


ワイルドカードとは、何かと一致する特殊な文字です。

LIKEに使用するワイルドカードには次の2種類があります。



「_(アンダーバー)」・・・任意の 1 文字を表します。


使用例とマッチング

使用例 意味 マッチする マッチしない
LIKE 'AA_' AAで始まる3文字 AAA, AAB, AAZ AA, AAAA, ABC
LIKE '_AA' AAで終わる3文字 AAA, BAA, ZAA AA, AAAA, CBA
LIKE '_AA_' AAを含む4文字 AAAA, AAAZ, ZAAZ AA, AAAAA



「%(パーセント)」・・・任意の0文字以上の文字列を表します。


使用例とマッチング

使用例 意味 マッチする マッチしない
LIKE 'AA%' AAで始まる文字列 AA, AAA, AAXYZ BAA, ABC, ABA
LIKE '%AA' AAで終わる文字列 AA, AAA, XYZAA AAB, CBA, ABA
LIKE '%AA%' AAを含む文字列 AA, XYZAA, ZAAXYZ ABABA, AXYZAXYZ



【ポイント】Null

データベースのデータとして、値が入っていない空欄の状態であることを、「null(ヌル)」と呼びます。

「null値」とは、値が存在しないという意味であり、「空白(スペース)」とは違うので注意しましょう。

また数値のデータ型の列であっても、nullである可能性があります。この場合「null」は「0」ではないので注意が必要です。

0は1や2といった数値の1つですが、nullはそれらの値が入っていないことを表します。

WHERE句を使った値の検索の際に、データベースのデータ値がnullであるかどうかは、通常の演算子ではチェックできません。

× where 列名 = null

データの値がnullであるかどうかを調べるためには、「is null」と記述して比較を行う必要があります。

○ where 列名 is null



【ヒント】「Nullでない」

列の値がnullではない(値が入っている)行を抽出する場合には、「is not null」と記述する必要があります。

また、null値を使った演算の結果はnull値となるため、データベース内のデータとしては、できるだけnull値を入れないように気をつける必要があります。

null値を入れないための対処方法として、「Not Null 制約」があります。



【ヒント】○○と△△の間、AとBのどちらか

比較演算子には他にも、指定した値が範囲内のデータかどうか、リストの中に存在するか、などを条件として抽出することができます。

比較演算子 意味
○ IN △ △のリストの中に○がある
○ NOT IN △ △のリストの中に○がない
○ BETWEEN △ AND △△ △から△△の間に○がある
○ NOT BETWEEN △ AND △△ △から△△の間に○がない


参考図書



LINE公式アカウント

仕事が辛くてたまらない人生が、仕事が楽しくてたまらない人生に変わります。
【登録いただいた人全員に、無料キャリア相談プレゼント中!】


LineOfficial

友だち追加