基本情報技術者試験では、SQL文と関係代数の対応関係を理解しておくことが重要です。特に「SELECTで列を指定する処理」と「WHEREで条件を指定する処理」が、それぞれ関係代数のどの演算に対応するのかで迷う人は多くいます。
この記事では、SQL文のSELECT句とWHERE句がなぜ「選択と射影」に対応するのかを、具体例を使いながら分かりやすく解説します。
関係代数における選択と射影の違い
関係代数とは、データベースの表(テーブル)を操作するための数学的な考え方です。SQLの基本的な操作は、この関係代数の演算に対応しています。
関係代数でよく使われる代表的な演算には「選択」と「射影」があります。それぞれ操作する対象が異なります。
| 演算 | 意味 | 対象 |
|---|---|---|
| 選択 | 条件に合う行を取り出す | 行(レコード) |
| 射影 | 必要な列だけを取り出す | 列(属性) |
簡単に言うと、選択は「横方向に絞る」、射影は「縦方向に絞る」操作と考えると理解しやすくなります。
SQLのSELECT句は射影に対応する
今回のSQL文では、以下の部分が射影にあたります。
SELECT A1, A2, A3 FROM G
このSQLでは、表Gに存在する列の中からA1、A2、A3という3つの列だけを取得しています。
例えば、表Gが以下のようなデータを持っているとします。
| A1 | A2 | A3 | A4 | A5 |
|---|---|---|---|---|
| 1 | 10 | x | a | 100 |
| 2 | 20 | y | b | 200 |
SELECT A1,A2,A3と指定すると、A4やA5の列は不要なので表示されません。このように「必要な列だけを取り出す」処理が射影です。
SQLのWHERE句は選択に対応する
一方で、選択にあたるのはWHERE句です。
WHERE A4='a'
WHERE句では、A4列の値が「a」である行だけを取り出すように条件を指定しています。
先ほどの表の場合、A4がaになっている1行目だけが対象になります。
| A1 | A2 | A3 | A4 | A5 |
|---|---|---|---|---|
| 1 | 10 | x | a | 100 |
つまり、WHEREによって「条件に合う行を選ぶ」処理を行っているため、これは関係代数の選択に対応します。
今回のSQL文を処理の順番で考える
今回のSQL文は、次のような流れで処理されます。
- 表GからA4=’a’という条件に合う行を選ぶ(選択)
- その中からA1、A2、A3の列だけを取り出す(射影)
そのため、このSQL文は「選択と射影」の組み合わせになります。
SQLを見るときは、SELECTは列、WHEREは行を操作すると覚えておくと、関係代数との対応が簡単になります。
結合や差、和ではない理由
選択肢にある「結合」「差」「和」は、今回のSQL文には登場していません。
結合は複数の表を関連付ける操作です。例えば、顧客表と注文表を顧客IDでつなげるような処理が該当します。
差や和は、2つの表のデータを比較したり、まとめたりする操作です。しかし今回のSQL文では、FROM句で指定している表はGだけであり、複数の表を扱っていないため使用されていません。
基本情報技術者試験で覚えるポイント
基本情報技術者試験では、SQLと関係代数の対応問題が頻出します。以下のように覚えておくと便利です。
- SELECT → 射影(列を選ぶ)
- WHERE → 選択(行を選ぶ)
- JOIN → 結合(表をつなぐ)
- UNION → 和(表を合成する)
- EXCEPT → 差(片方だけを取り出す)
特にSELECTだけを見ると射影だけに見えますが、SQL文全体を見ることが重要です。WHEREによる条件指定がある場合、選択も同時に行われています。
まとめ
SQL文「SELECT A1,A2,A3 FROM G WHERE A4=’a’」が「選択と射影」に対応する理由は、SELECT句で列を選び、WHERE句で条件に合う行を選んでいるためです。
射影は列を取り出す操作、選択は行を取り出す操作と覚えると、SQLと関係代数の対応問題を簡単に判断できます。
基本情報技術者試験では、SQLの各句がデータのどの部分を操作しているかを意識して読むことが、正解への近道になります。


コメント