【情報処理安全確保支援士試験 令和6年度 春期 午前2 問21】SQL

SQLの基礎を学ぼう!情報処理技術者試験にも役立つ実践知識

情報処理安全確保支援士やネットワークスペシャリストといった難関資格の取得を目指している皆さんにとって、データベースは避けて通れない重要な分野ですよね。そして、そのデータベースを操作するために不可欠なのが「SQL」です。

今回は、情報処理技術者試験にも頻出するSQLについて、その基礎から実践的な使い方まで、分かりやすく解説していきます。


【出典:情報処理安全確保支援士試験 令和6年度 春期 午前2(一部、加工あり)】

 ”人事”表に対して次のSQL分を実行したとき、結果として得られる社員番号はどれか。


ア 1、2、5
イ 1、3、4、5
ウ 1、3、5
エ 1、5

SQLってなんだろう?〜キーワードの定義〜

まず、SQLとは「Structured Query Language(構造化照会言語)」の略称です。簡単に言うと、データベースと会話するための「言語」だと思ってください。データベースに「こんなデータが欲しいな」「このデータを更新してほしいな」といった命令を出すときにSQLを使います。

SQLは、データの検索、追加、更新、削除といった操作を行うための標準的な言語として、世界中で広く利用されています。リレーショナルデータベース管理システム(RDBMS)と呼ばれるデータベース製品(Oracle Database, MySQL, PostgreSQL, SQL Serverなど)を操作する上で、SQLの知識は必須となります。

なぜSQLが重要なのか?〜背景・経緯〜

SQLの歴史は古く、1970年代にIBMが開発した「SEQUEL」という言語が元になっています。その後、ANSI(米国国家規格協会)やISO(国際標準化機構)によって標準化が進められ、現在では多くのデータベース製品で共通して利用できる汎用性の高い言語となりました。

情報処理技術者試験においてSQLが出題されるのは、システム開発や運用においてデータベースが不可欠であり、その操作言語であるSQLの知識がエンジニアにとって必須だからです。セキュリティの観点からも、SQLインジェクションなど、SQLの知識がなければ防ぎにくい攻撃手法が存在するため、情報処理安全確保支援士を目指す皆さんにとっては特に重要な分野と言えるでしょう。

SQLを動かしてみよう!〜事例と問題解説〜

それでは、実際にSQL文を見てみましょう。今回は、皆さんが試験対策でよく目にするようなテーブルとSQL文を使って解説していきます。


【問題】

下図の”人事”表に対して次のSQL文を実行したとき、結果として得られる社員番号はどれか。

”人事”表

社員番号所属勤続年数年齢
1総務部1331
2総務部528
3人事部1128
4営業部830
5総務部729

SQL文

SELECT 社員番号 FROM 人事
WHERE (勤続年数 > 10 OR 年齢 > 28)
AND 所属 = '総務部'

ア 1、2、5
イ 1、3、4、5
ウ 1、3、5
エ 1、5


解説

このSQL文は、「人事」テーブルから特定の条件を満たす「社員番号」を取得するものです。WHERE句に注目して、条件を一つずつ確認していきましょう。

SQLのANDやORは、論理演算子と呼ばれ、複数の条件を組み合わせる際に使用します。

  • AND:ANDで結合された全ての条件が真(True)の場合に真となります。
  • OR:ORで結合されたいずれかの条件が真(True)の場合に真となります。

今回のSQL文の条件は以下の2つの部分に分けられます。

  1. (勤続年数 > 10 OR 年齢 > 28)
  2. 所属 = ‘総務部’

そして、この2つの条件がANDで結合されています。つまり、「条件1が真 かつ 条件2が真」であるレコード(行)が抽出されます。

それでは、各社員のデータがこれらの条件を満たすか見ていきましょう。

  • 社員番号1(総務部、勤続年数13年、年齢31歳)
    • 条件1:(13 > 10 OR 31 > 28) → (True OR True) → True
    • 条件2:’総務部’ = ‘総務部’ → True
    • 結果:True AND True → True (抽出対象)
  • 社員番号2(総務部、勤続年数5年、年齢28歳)
    • 条件1:(5 > 10 OR 28 > 28) → (False OR False) → False
    • 条件2:’総務部’ = ‘総務部’ → True
    • 結果:False AND True → False (抽出対象外)
  • 社員番号3(人事部、勤続年数11年、年齢28歳)
    • 条件1:(11 > 10 OR 28 > 28) → (True OR False) → True
    • 条件2:’人事部’ = ‘総務部’ → False
    • 結果:True AND False → False (抽出対象外)
  • 社員番号4(営業部、勤続年数8年、年齢30歳)
    • 条件1:(8 > 10 OR 30 > 28) → (False OR True) → True
    • 条件2:’営業部’ = ‘総務部’ → False
    • 結果:True AND False → False (抽出対象外)
  • 社員番号5(総務部、勤続年数7年、年齢29歳)
    • 条件1:(7 > 10 OR 29 > 28) → (False OR True) → True
    • 条件2:’総務部’ = ‘総務部’ → True
    • 結果:True AND True → True (抽出対象)

以上の結果から、条件を満たす社員番号は「1」と「5」です。

よって、正解はエ 1、5です。

SQL学習の課題と対策

SQLは非常に強力な言語ですが、その構文や論理演算子の組み合わせは初学者にとって混乱しやすい点でもあります。

【課題】

  • SQLの構文が覚えられない
  • 複雑なWHERE句の条件を正しく解釈できない
  • 実際に手を動かす機会が少ない

【対策】

  • 繰り返し学習と実践: 参考書を読むだけでなく、実際にSQLを実行できる環境(例えば、DockerでMySQLを立てる、オンラインのSQL実行サイトを利用するなど)を用意し、たくさんのSQL文を書いてみることが重要です。
  • サンプルデータを用いた演習: 今回のように、具体的なテーブルデータとSQL文を使って、一つずつ条件を確認していく練習を繰り返しましょう。
  • 論理演算子の理解: AND、OR、NOTといった論理演算子の意味と優先順位をしっかりと理解することが、複雑な条件を読み解く鍵となります。

今後の動向と情報処理技術者としての視点

現代において、データの重要性はますます高まっています。ビッグデータ、AI、IoTといった先端技術の発展は、大量のデータを効率的に管理・分析する能力を必要としており、SQLはその基盤を支える技術の一つです。

クラウドサービス(AWS RDS, Azure SQL Database, Google Cloud SQLなど)の普及により、データベースの構築・運用が手軽に行えるようになりましたが、その内部でデータを操作するためのSQLの重要性は変わりません。

情報処理安全確保支援士を目指す皆さんにとっては、セキュリティの観点からSQLインジェクション対策や、安全なデータベース設計・運用に関する知識も合わせて習得することが求められます。ネットワークスペシャリストを目指す皆さんにとっては、データベースへのネットワーク接続や、分散データベースにおけるデータ連携なども学習の対象となるでしょう。

SQLの学習は、単に試験に合格するためだけでなく、これからのITエンジニアとして活躍するために不可欠なスキルです。ぜひ、楽しみながら奥深いSQLの世界を探求してみてくださいね!