関数のネスト
関数の引数には、列の値や定数だけでなく、別の関数の結果を使うこともできます。
このように、関数の結果をさらに別の関数の引数にしていくことを、関数をネストさせる(入れ子にする)といいます。
別々の関数を組み合わせ、ネストさせることで、さまざまな情報を扱うことができるようになります。
(使用例)
「今日はYYYY-MM-DDです」いう形式で現在の日付を表示する。
(curdate関数で得た今日の日付と、「今日は」「です」という文字列をCONCAT関数で連結する。)
今日の日付から、曜日を調べる。( 1 = 日曜日 , 2 = 月曜日 , 3 = 火曜日 ..)
(curdate関数で得た今日の日付を、dayofweek関数の引数にする。)
今日から 90 日後の日付を調べる。
(curdate関数で得た今日の日付をto_days関数で日数に直し、90日を足してから、from_days関数の引数にする。)
【ヒント】ネストの考え方
関数のネストがいくつも重なることを、ネストが深くなる、と表現することがあります。
ネストが深くなった時には、内側の括弧の中の実行結果から順番に考えていくようにします。
条件を指定して レコードを 抽出する
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公式アカウント
仕事が辛くてたまらない人生が、仕事が楽しくてたまらない人生に変わります。
【登録いただいた人全員に、無料キャリア相談プレゼント中!】