本日もお読みいただき、ありがとうございます。牛の歩みも千里、みずのです。
西日本チーム3連投のノリの良さに憧れる今日この頃です。
さて、本日から複数回にわたってSQLの記事を書いてみようと思います。
SQLは、リレーショナルデータベース(RDB)と呼ばれるデータベースで使われる言語です。なお、出題形式が似ているものに表計算もありますので、簡単にではありますが表計算についても触れたいと思います。
目次
表計算やデータベース問題は大きく分けて「知識が問われる問題」と「理解力や応用力が問われる問題」があり、前者は文章問題が多く、後者は以下のExcelのような表と一緒に出題されることが多いです。
(経営情報システム 平成25年度 第9問)
既に過去問を解かれている方は、上のような表を既にご覧になったことがあるのではないでしょうか。
平成18年度以降の過去問を確認してみたところ、ほぼ毎年、上のような表が載っていました。つまり、非常に高い確率で表計算問題かデータベース問題のいずれかが出題されているということです。さらに、平成23年度や平成27年度では同じ年度に表計算問題とデータベース問題の両方が出題されていました。
この形式の問題は正答率も高く、直近3年のTACデータリサーチによると、表計算問題が70%以上、データベース問題が60%以上と高めでした。
出題頻度が高く、正答率も高いため確実に正解したい問題だと思います。
今年度の試験で表計算とデータベースのどちらが出題されるかは分かりませんが、表計算よりも出題率が若干高く、正答率が若干低いSQLを中心に記事を書きたいと思います。
そうは言っても表計算が出題される可能性がありますので、お薦めサイトとして、よねさんの「WordとExcelの小部屋」を紹介いたします。
Excelのページが表計算の学習内容と重なっています。
SQLの話に入る前に、リレーショナルデータベースの基礎についてご紹介します。
データベースの構造や名称を先ほどの商品表にまとめてみました。
データベースに蓄えられたデータを見るためにはSQLで「SELECT」という命令文を使う必要があります。
SELECT <列名> FROM <表名>
これが一番シンプルなSELECT文です。これでデータを見ることができます。
列を指定するポイントは下記の通りです。
・基本は列名をそのまま書く。
・複数の列を指定する時は、それぞれの列名をカンマ(,)」で区切る。
・<列名>の箇所にアスタリスク(*)を書くと、すべての列を指定できる。
例:先ほどの商品表から商品名と商品区分と販売数量を表示する場合
SELECT 商品名, 商品区分, 販売数量 FROM 商品表
Excelでも特定の列を非表示にして見やすくしたいときってありますよね。データベースでも同様に見たい列だけ表示することができます。
(指定した列のみ表示することを「射影」と言います)
次は、条件に合う行を抽出してみます。
条件に合う行を抽出する場合は、SELECT文にWHERE句を追加します。
SELECT <列名> FROM <表明> WHERE <条件式>
WHERE句の条件式は「=(等しい)」「>(より大きい)」「>=(以上)」など演算子と呼ばれる記号や単語を使って条件を指定します。
(条件に合う行のみ抽出することを「選択」と言います)
例:商品区分が「筆記具」のデータを選択して、商品名、商品区分、販売数量を表示したい場合
SELECT 商品名, 商品区分, 販売数量 FROM 商品表 WHERE 商品区分=’筆記具’
演算子に以下のようなものがあります。
数学の等号や不等号と似てるものが多いので、覚えやすいのではないでしょうか。
演算子 | 使い方 | 説明 |
= | <列名> = a | <列名>がaと等しい |
> | <列名> > a | <列名>がaより大きい |
< | <列名> < a | <列名>がaより小さい |
>= | <列名> >= a | <列名>がa以上 |
<= | <列名> <= a | <列名>がa以下 |
!= <> |
<列名> != a <列名> <> a |
<列名>がaと等しくない |
BETWEEN | <列名> BETWEEN a AND b | <列名>がa以上b以下 |
LIKE | <列名> LIKE … | ※ 後述 |
LIKE は若干複雑ですね。
「=」と似ているのですが「=」は完全一致しなければいけないのに対し、LIKEはワイルドカードと呼ばれる「%(パーセント)」や「_(アンダーバー) 」と組み合わせることで部分一致(「~で始まる」など)の検索ができます。
ワイルドカードはおおまかに言うと「ワイルドカードのある位置にどんな文字でもいいから何か文字を指定したことになる」(文字の代わりになる)ものです。トランプのジョーカーみたいなイメージです。
「%」と「_」の違い
「%」;「%」の位置に何文字あってもOK。文字がなくてもOK。
「_」:「_」の位置に何か1文字あればOK。2文字以上はNG。文字がなくてもNG。
種類 | 説明 | 使用例 |
% | 0文字以上の任意の文字列 | WHERE 商品名 LIKE ‘%ノート’ WHERE 商品名 LIKE ‘ノート%’ |
_ | 1文字の任意の文字 | WHERE 商品名 LIKE ‘_ノート’ WHERE 商品名 LIKE ‘_ノート_’ |
使用例を参考に、どのような結果になるか確認してみます。
SELECT 商品名 FROM 商品表 WHERE 商品名=’%ノート’
「ノート」の手前に任意の文字(今回は「B5判」「A4判」)があるデータが表示されています。
「%」は0文字でも良いので、今回は対象のデータはありませんが「ノート」というデータも条件に一致するとみなされます。
SELECT 商品名 FROM 商品表 WHERE 商品名=’_ノート’
上記のSQL文を実行すると……何も得られません。
「_」は1文字の任意の文字なので「ノート」の前に3文字ある「B5判ノート」も「A4判ノート」も条件にあてはまらないことになります。
ANDやORといった論理演算子を使うことで、複数条件を指定することができます。
論理演算子 | 使い方 | 説明 | 使用例 |
AND | a AND b | aかつb | SELECT 商品名 FROM 商品表 WHERE 販売数量 >= 20 AND 商品区分 = ‘筆記具’ |
OR | a OR b | aまたはb | SELECT 商品名 FROM 商品表 WHERE 販売数量 >= 20 OR 商品区分 = ‘筆記具’ |
条件を3つ以上指定する場合、優先順位は以下の通りです。
数学の計算式で例えると、ANDが「×」、ORが「+」になるイメージです。
ここまでお伝えした内容に該当する出題例は以下の通りです。
他のメンバーがすでに話している通り、過去問演習は大切なので良ければ解いてみてくださいね。
明日はとうへい…と、いつもであれば言うところですが、前回の記事でお知らせした「ふぞろいな答案分析5」「ふぞろいな合格答案5」の告知記事が入ることになりました。
事例Ⅱ84点のとうへいによる、高得点を取れた理由をお待ちの皆さまは申し訳ありませんが、もう1日お待ちくださいませ。