基本情報でわかる SQL 「英語だと思って日本語に訳せばわかる」
error
この記事は基本情報技術者試験の旧制度( 2022 年以前)の記事ですが、試験対策ではなく、技術用語を理解する上では問題ないと考えています。
試験対策としてお読みになる場合は、現在の試験制度では出題されない午後問題を一部題材にしているので、ご注意ください。
この連載では、基本情報技術者試験によく出題されるテクノロジー関連の用語を、午前問題と午後問題のセットを使って解説します。
午前問題で用語の意味や概念を知り、午後問題で技術の活用方法を知ってください。それによって、単なる丸暗記では得られない明確さで、用語を理解できるようになります。
今回のテーマは、 SQL です。
SQL とは?
はじめに、 SQL とは何かを説明しましょう。
現在主流のデータベースの形式は、データを表に格納する「関係データベース」です。関係データベースは、「 RDBMS( Relational Database Management System )」というシステムによって実現されます。
RDBMS を使うことで、関係データベースに様々な操作ができますが、そのためには、専用の言語で命令を与えなければなりません。この言語が「 SQL ( Structured Query Language 、エスキューエル)」であり、 SQL で記述された命令文を「 SQL 文」と呼びます。 RDBMS には、いくつかの製品がありますが、 SQL の構文は、どの製品でも基本的に同じです。
SQL を理解するコツは、「英語だと思って日本語に訳してみること」です。 SQL の構文は、英語の構文とほとんど同じだからです。
RDBMS に命令を与えるのですから、
です。
この基本構文に、前置詞や関係副詞などを使って、様々な意味を追加できます。その際に使われる単語の意味も、英語の単語の意味と同じです。とにかく「 SQL は英語」なのです。
SQL の主な命令を紹介しましょう。表の操作には、
- データの登録
- 読み出し
- 更新
- 削除
の 4 種類があり、それぞれ、 INSERT, SELECT, UPDATE, DELETE という動詞で示されます。
日本語に訳すと、「挿入せよ(登録せよ)」「選択せよ(読み出せ)」「更新せよ」「削除せよ」です。もとの英語では難しく感じるかもしれませんが、日本語に訳せば簡単に理解できるでしょう。
SQL の命令 | 日本語訳 |
---|---|
INSERT | データを挿入せよ | (登録せよ)
SELECT | データを選択せよ | (読み出せ)
UPDATE | データを更新せよ |
DELETE | データを削除せよ |
SQL に関する午前問題
それでは、 SQL に関する午前問題を見てみましょう。
以下は、データを読み出す SELECT 命令の問題です。選択肢を見ると、知らない構文や単語が並んでいますが、心配はいりません。「英語だ」と思って日本語に訳してみれば、意味がわかるからです。
“中間テスト” 表からクラスごと,教科ごとの平均点を求め,クラス名,教科名の昇順に表示する SQL 文中の a に入れるべき字句はどれか。
中間テスト (クラス名, 教科名, 学生番号, 名前, 点数)
〔SQL 文〕
SELECT クラス名, 教科名, AVG(点数) AS 平均点
FROM 中間テスト
[ a ]
ア
GROUP BY クラス名, 教科名 ORDER BY クラス名, AVG(点数)
イ
GROUP BY クラス名, 教科名 ORDER BY クラス名, 教科名
ウ
GROUP BY クラス名, 教科名, 学生番号 ORDER BY クラス名, 教科名, 平均点
エ
GROUP BY クラス名, 平均点 ORDER BY クラス名, 教科名
まず、aの前までの SQL 文の意味を考えてみましょう。
英語の単語を日本語に訳すと、
「 SELECT 」は「選択せよ(読み出せ)」
「 AS 」は「~として」
「 FROM 」は「~から」
です。
したがって、
SELECT クラス名, 教科名、AVG(点数) AS 平均点 FROM 中間テスト
という SQL 文は、
“中間テスト” 表から、
“クラス名”、 “教科名” 、 “AVG(点数)” を
“平均点” として、読み出せ
という意味です。「 AVG(点数) 」は、その名前と構文から「点数の平均値( AVERAGE )を求める関数だ」と予測できるでしょう。それで、バッチリ合っています。
次に、aの中に入る SQL 文を、選択肢の中から選んでみましょう。
aには、問題文に示された「クラスごと、教科ごと」「クラス名、教科名の昇順」を意味する SQL 文が入るはずです。
どの選択肢にも、GROUP BY
とORDER BY
という英語があります。これらを日本語に訳すと、
GROUP BY
は「~によってグループ化して」であり、
ORDER BY
は「~による順序で」
です。一方が「ごと」で、もう一方が「昇順」に該当するはずですから、GROUP BY
が「ごと」で、ORDER BY
が「昇順」でしょう。
したがって、
「クラスごと、教科ごと」と「クラス名、教科名の昇順」は、
SQL 文でGROUP BY クラス名, 教科名
とORDER BY クラス名, 教科名
であり、選択肢イが適切だと判断できます。
このように、「英語だ」と思って日本語に訳してみれば、 SQL 文の意味がわかるのです!
解答イ
SQL に関する午後問題
今度は、 SQL に関する午後問題を見てみましょう。
基本情報技術者試験の午後問題は、午前問題の知識を架空の事例に仕立てたものです。したがって、問題を解くために必要な知識は午前問題と同じなのですが、問題の内容がより実践的になっています。
SQL 文も、それを使うまでの経緯が、問題の冒頭で説明されます。まず、この経緯を読み取ってください。
電子部品の出荷データを管理する関係データベースの運用に関する次の記述を読んで,設問 1 ~ 4 に答えよ。
C 社は,電子部品を製造販売する会社である。
ある期間に出荷した特定の電子部品について,製造装置の設定ミスによる不具合が発生しているおそれがあるので,顧客への連絡と出荷済みの電子部品の無償交換(回収及び再出荷。以下,リコールという)を実施することにした。
出荷情報は,図 1 に示す表で管理されている。下線付きの項目は主キーを表す。
顧客番号 | 顧客名 | 住所 | 代表電話 |
---|---|---|---|
0181 | 情報電機株式会社 | 東京都文京区本駒込OO-A | 99-9999-9999 |
部品番号 | 部品名 | 単価 |
---|---|---|
007551 | スイッチ | 80 |
出荷番号 | 顧客番号 | 部品番号 | 出荷数 | 出荷金額 | 出荷日 |
---|---|---|---|---|---|
150412 | 0181 | 007551 | 400 | 32000 | 20150115 |
150413 | 0059 | 000890 | 100 | 48000 | 20150115 |
設問 1
リコールの対象となる電子部品の出荷先の顧客番号,顧客名, 出荷番号,出荷日,出荷数を,顧客番号の昇順に表示する。リコールの対象となる電子部品の部品番号は “007551” で,出荷日は 2015 年 1 月 10 日から 2015 年 1 月 20 日までである。次の SQL 文のaに入れる正しい答えを,解答群の中から選べ。
SELECT 顧客表.顧客番号, 顧客表.顧客名,
出荷表.出荷番号, 出荷表.出荷日, 出荷表.出荷数
FROM 顧客表, 出荷表
WHERE 出荷表.顧客番号 = 顧客表.顧客番号 AND
出荷表.部品番号 = '007551' AND
[ a ]
ORDER BY 顧客表.顧客番号
解答群
ア 出荷表.出荷日 = ‘20150110’ OR 出荷表.出荷日 = ‘20150120’
イ 出荷表.出荷日 = ANY (‘20150110’, ‘20150120')
ウ 出荷表.出荷日 BETWEEN '20150110' AND '20150120'
エ 出荷表.出荷日 IN (‘20150110’, ‘20150120')
部品の不具合があってリコールを実施するということです。それでは、設問を見てみましょう。
リコールの対象となる電子部品の出荷先の
顧客番号、顧客名、出荷番号、出荷日、出荷数を、
顧客番号の昇順に表示する
に対応する SQL 文を作ることがテーマです。
そして、リコールの対象となる電子部品の条件が
部品番号は “007551” で、
出荷日は 2015 年 1 月 10 日から 2015 年 1 月 20 日までである
ということも示されています。
SQL 文の「英語」を、これらの「日本語」の文章に対応付ければ、aに入る正しい答えがわかります。
SELECT 顧客表.顧客番号, 顧客表.顧客名, 出荷表.出荷番号, 出荷表.出荷日, 出荷表.出荷数
/* 中略 */
ORDER BY 顧客表.顧客番号
は、
顧客番号、顧客名、出荷番号、出荷日、出荷数を、
顧客番号の昇順に表示する
に該当します。FROM 顧客表, 出荷番号
は、データを取り出す表を指定しているだけなので、気にする必要はありません。ポイントは、WHERE
の後の部分です。
WHERE 出荷表.顧客番号 = 顧客表.顧客番号 AND
出荷表.部品番号 = '007551' AND
[ a ]
「 WHERE 」は、「~であるところの」という意味の「関係副詞」です。 SQL 文では、WHERE
の後に条件を指定します。
条件は、「~かつ」を意味するAND
でつながれて 3 つあります。
出荷表.顧客番号 = 顧客表.顧客番号
looks_one「出荷表の顧客番号と顧客表の顧客番号を結び付ける」という意味であり、複数の表(ここでは、顧客表と出荷表)からデータを取り出すときのお決まりの条件です。
出荷表.部品番号 = '007551'
looks_two
部品番号は “007551” で
という条件に該当します。
[ a ]
looks_3したがって、残ったaは、
出荷日は 2015 年 1 月 10 日から 2015 年 1 月 20 日まで
に該当します。
解答群に示された SQL 文を日本語に訳して、
出荷日は 2015 年 1 月 10 日から 2015 年 1 月 20 日まで
に該当するものを選んでみましょう。
出荷表.出荷日 = '20150110' OR 出荷表.出荷日 = '20150120'
OR
が「または」という意味なので、
「出荷表の出荷日が 2015 年 1 月 10 日、または、 出荷表の出荷日が 2015 年 1 月 20 日」であり、「~から・・・まで」ではありません
出荷表.出荷日 = ANY ('20150110', '20150120')
ANY
が「いずれか」という意味なので、
「出荷表の出荷日が 2015 年 1 月 10 日、 2015 年 1 月 20 日のいずれか」であり、「~から・・・まで」ではありません
出荷表.出荷日 BETWEEN '20150110' AND '20150120'
BETWEEN ~ AND ・・・
が「~から・・・まで」という意味なので、
「出荷表の出荷日が 2015 年 1 月 10 日から 2015 年 1 月 20 日まで」にピッタリ該当します
したがって、選択肢ウが正解です
念のため、選択肢エも見ておきましょう。
出荷表.出荷日 IN ('20150110', '20150120')
IN
が「~の中にある」という意味なので、
「出荷表の出荷日が 2015 年 1 月 10 日、 2015 年 1 月 20 日の中にある」であり、「~から・・・まで」ではありません。
解答ウ
いかがでしたか? 「英語だと思って日本語に訳してみること」で、 SQL 文の読み方が「わかった」でしょう。
今後の試験対策としては、まず、教材(きっと何らかの試験対策教材をお持ちですね)に示された SQL の構文に、一通り目を通してください。 SQL 文の英語を日本語に訳して意味を理解できれば、構文を暗記する必要はありません。
その上で、できるだけ多くの過去問題を解いてください。問題を解くときも、 SQL 文の英語を日本語に訳して意味を考えてください。
もしも、知らない英単語に遭遇したら、英和辞典で意味を調べてください。そうすれば、きっと SQL 文の意味がわかるはずです。
最後にもう一度だけ言います。 SQL 文は英語 です。それでは、またお会いしましょう!
label 関連タグ免除試験を受けた 74.9% の方が、 科目A免除資格を得ています。
基本情報でわかる IPアドレス と サブネットマスク
update基本情報でわかる ホワイトボックステスト
update基本情報でわかる トランザクション
update基本情報でわかる コンパイラ 最適化
update基本情報でわかる CRC 「具体例を見て体験すれば仕組みがわかる」
update基本情報でわかる 浮動小数点 「3つの情報で1つの数を表す仕組みを知れば、浮動小数点数がわかる」
update基本情報でわかる MIME タイプ 「電子メールの仕組みを知れば役割がわかる」
update基本情報でわかる 7セグメントLED 「 1 と 0 を書き込めば点灯するパターンがわかる」
update基本情報でわかる 論理演算 「真理値表を書けば、半加算器と全加算器の仕組みがわかる」
update基本情報でわかる SMTP / POP3 「ITエンジニア視点で見れば役割がわかる」
update『プログラムはなぜ動くのか』(日経BP)が大ベストセラー
IT技術を楽しく・分かりやすく教える“自称ソフトウェア芸人”
大手電気メーカーでPCの製造、ソフトハウスでプログラマを経験。独立後、現在はアプリケーションの開発と販売に従事。その傍ら、書籍・雑誌の執筆、またセミナー講師として活躍。軽快な口調で、知識0ベースのITエンジニアや一般書店フェアなどの一般的なPCユーザの講習ではダントツの評価。
お客様の満足を何よりも大切にし、わかりやすい、のせるのが上手い自称ソフトウェア芸人。
主な著作物
- 「プログラムはなぜ動くのか」(日経BP)
- 「コンピュータはなぜ動くのか」(日経BP)
- 「出るとこだけ! 基本情報技術者」 (翔泳社)
- 「ベテランが丁寧に教えてくれる ハードウェアの知識と実務」(翔泳社)
- 「ifとelseの思考術」(ソフトバンククリエイティブ) など多数