絶対取りたいSQL(その1)

同友館
doyukan_logo

本日もお読みいただき、ありがとうございます。牛の歩みも千里、みずのです。
西日本チーム3連投のノリの良さに憧れる今日この頃です。

さて、本日から複数回にわたってSQLの記事を書いてみようと思います。

SQLは、リレーショナルデータベース(RDB)と呼ばれるデータベースで使われる言語です。なお、出題形式が似ているものに表計算もありますので、簡単にではありますが表計算についても触れたいと思います。

確実に正解したい表計算・データベース問題

 

 

表計算・データベース問題について

表計算やデータベース問題は大きく分けて「知識が問われる問題」と「理解力や応用力が問われる問題」があり、前者は文章問題が多く、後者は以下のExcelのような表と一緒に出題されることが多いです。
経営情報システム 平成25年度 第9問
(経営情報システム 平成25年度 第9問)

既に過去問を解かれている方は、上のような表を既にご覧になったことがあるのではないでしょうか。

 

出題頻度が高く、正答率も高い

平成18年度以降の過去問を確認してみたところ、ほぼ毎年、上のような表が載っていました。つまり、非常に高い確率で表計算問題かデータベース問題のいずれかが出題されているということです。さらに、平成23年度や平成27年度では同じ年度に表計算問題とデータベース問題の両方が出題されていました。

この形式の問題は正答率も高く、直近3年のTACデータリサーチによると、表計算問題が70%以上、データベース問題が60%以上と高めでした。

出題頻度が高く、正答率も高いため確実に正解したい問題だと思います。

 

表計算のお薦めサイト

今年度の試験で表計算とデータベースのどちらが出題されるかは分かりませんが、表計算よりも出題率が若干高く、正答率が若干低いSQLを中心に記事を書きたいと思います。

そうは言っても表計算が出題される可能性がありますので、お薦めサイトとして、よねさんの「WordとExcelの小部屋」を紹介いたします。
Excelのページが表計算の学習内容と重なっています。

お薦め記事

リレーショナルデータベースについて

SQLの話に入る前に、リレーショナルデータベースの基礎についてご紹介します。

データベースの構造と名称

データベースの構造や名称を先ほどの商品表にまとめてみました。

  • :(テーブル)データを保存する表全体を指します。
  • :(カラム)表の縦方向(列)を指します。列によって保存するデータの内容が定義されています。
  • :(レコード)表の横方向(行)を指します。1件分のデータのまとまりを指します。
  • オレンジ:(フィールド)Excelでいうセル1マス分です。

SQLでデータを表示する(SELECT文)

データベースに蓄えられたデータを見るためにはSQLで「SELECT」という命令文を使う必要があります。

SELECT文の基本形

SELECT <列名> FROM <表名>

これが一番シンプルなSELECT文です。これでデータを見ることができます。

列名の指定方法

列を指定するポイントは下記の通りです。

・基本は列名をそのまま書く。
・複数の列を指定する時は、それぞれの列名をカンマ(,)」で区切る。
・<列名>の箇所にアスタリスク(*)を書くと、すべての列を指定できる。

例:先ほどの商品表から商品名と商品区分と販売数量を表示する場合

SELECT 商品名, 商品区分, 販売数量 FROM 商品表

こちらを実行すると下記の結果を得られます。

Excelでも特定の列を非表示にして見やすくしたいときってありますよね。データベースでも同様に見たい列だけ表示することができます。
(指定した列のみ表示することを「射影」と言います)

 

条件に合う行のみ表示する(WHERE句)

次は、条件に合う行を抽出してみます。
条件に合う行を抽出する場合は、SELECT文にWHERE句を追加します。

WHERE句を使ったSELECT文の基本形

SELECT <列名> FROM <表明> WHERE <条件式>

WHERE句の条件式は「=(等しい)」「>(より大きい)」「>=(以上)」など演算子と呼ばれる記号や単語を使って条件を指定します。
(条件に合う行のみ抽出することを「選択」と言います)

例:商品区分が「筆記具」のデータを選択して、商品名、商品区分、販売数量を表示したい場合

SELECT 商品名, 商品区分, 販売数量 FROM 商品表 WHERE 商品区分=’筆記具’

こちらを実行すると下のように表示されます。

WHERE句のポイント

  • 「=」などの演算子を使う
  • 形式は「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 は若干複雑ですね。
「=」と似ているのですが「=」は完全一致しなければいけないのに対し、LIKEはワイルドカードと呼ばれる「%(パーセント)」や「_(アンダーバー) 」と組み合わせることで部分一致(「~で始まる」など)の検索ができます。

ワイルドカードの説明

ワイルドカードはおおまかに言うと「ワイルドカードのある位置にどんな文字でもいいから何か文字を指定したことになる」(文字の代わりになる)ものです。トランプのジョーカーみたいなイメージです。

「%」と「_」の違い

「%」;「%」の位置に何文字あってもOK。文字がなくてもOK。
「_」:「_」の位置に何か1文字あればOK。2文字以上はNG。文字がなくてもNG。

種類 説明 使用例
% 0文字以上の任意の文字列 WHERE 商品名 LIKE ‘%ノート’ 
WHERE 商品名 LIKE ‘ノート%’
_ 1文字の任意の文字 WHERE 商品名 LIKE ‘_ノート’
WHERE 商品名 LIKE ‘_ノート_’

使用例を参考に、どのような結果になるか確認してみます。

SELECT 商品名 FROM 商品表 WHERE 商品名=’%ノート’

上記のSQL文を実行すると下のような結果を得られます。

「ノート」の手前に任意の文字(今回は「B5判」「A4判」)があるデータが表示されています。
「%」は0文字でも良いので、今回は対象のデータはありませんが「ノート」というデータも条件に一致するとみなされます。

SELECT 商品名 FROM 商品表 WHERE 商品名=’_ノート’

上記のSQL文を実行すると……何も得られません
「_」は1文字の任意の文字なので「ノート」の前に3文字ある「B5判ノート」も「A4判ノート」も条件にあてはまらないことになります。

複数条件を指定して行を選択する(AND, OR)

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が「+」になるイメージです。

  • ANDとORの両方がある場合はANDを優先
  • ()がある場合は、()内を優先

過去問の出題例

ここまでお伝えした内容に該当する出題例は以下の通りです。
他のメンバーがすでに話している通り、過去問演習は大切なので良ければ解いてみてくださいね。

  • 平成22年度 第12問(難易度は低めで解きやすいと思います)
  • 平成25年度 第9問(記事内で紹介した「商品表」の問題です。やや難しめ)
  • 平成29年度 第10問(やや難しめ)

明日はとうへい…と、いつもであれば言うところですが、前回の記事でお知らせした「ふぞろいな答案分析5」「ふぞろいな合格答案5」の告知記事が入ることになりました。

事例Ⅱ84点のとうへいによる、高得点を取れた理由をお待ちの皆さまは申し訳ありませんが、もう1日お待ちくださいませ。

「この記事が参考になった」と思った方はクリックをお願いします!
SNSでフォローする