こんにちは、数強塾代表の藤原進之介です。この記事は参考書『藤原進之介の最強120講義』の第91講「関係データベースの操作(選択・射影・結合)」のWeb版です。共通テスト「情報Ⅰ」での重要度はA(頻出。得点差がつく)、情報Ⅱでの接続先は(3)情報とデータサイエンス、しかもSQLへの直接の橋にあたる講です。
第90講では、1枚の大きな表を複数の表に分ける理由を扱いました。この講はその続きで、分けた表をどう操作するかの話です。選択・射影・結合という3語を暗記させる講ではありません。なぜ3つで足りるのか、なぜ結合には共通の列が要るのかを原理から説明し、最後は小さな2枚の表を手で操作してから、同じことをSQLiteで実行して一致を確かめます。
1. この講の問い
なぜ「選択・射影・結合」というたった3つの操作だけで、表への問い合わせのほとんどが書けてしまうのか。
2. 結論
3つが直交しているからです。選択は行を絞り、射影は列を絞り、結合は表と表をつなぐ。互いに他の代わりをしないので、組み合わせるだけで要求に届きます。
さらに決定的なのは、どの演算も結果がまた表になることです。結果が表なら、その結果にもう一度演算をかけられます。関数を合成できるのと同じ構造で、3つの部品から複雑な問い合わせが組み上がります。
そして結合には共通の列が要ります。第90講で表を分けたときに置いた外部キーが、ここで表をつなぎ直す糸になります。分けたから、つなぐ操作が要る。
3. なぜそうなるのか
3-1. 国の教材が「関係演算」と呼んでいるもの
まず一次資料から入ります。文部科学省「情報Ⅰ」教員研修用教材 第4章 学習21 に、この3語の定義がそのまま書かれています。
リレーショナルデータベースでは,「選択」・「射影」・「結合」という関係演算を用いて処理することが多い。選択はテーブルから条件を満たすレコードを抽出する操作である。(中略)射影はテーブルから一部のフィールドを取り出す操作である。(中略)結合は複数のテーブルを1つの表にする操作である。
文部科学省「高等学校情報科『情報Ⅰ』教員研修用教材」第4章 情報通信ネットワークとデータの活用(令和2年、該当箇所はp.176相当)
3つの定義を並べると、絞る対象がきれいに分かれていることが見えます。
| 演算 | 何を絞るか | 結果の形 |
|---|---|---|
| 選択(selection) | 行(レコード)を条件で絞る | 列はそのまま、行が減る |
| 射影(projection) | 列(フィールド)を選んで取り出す | 行はそのまま、列が減る |
| 結合(join) | 表と表を共通の列でつなぐ | 列が増える(行数は条件次第) |
表は縦と横でできています。選択は横方向の切り方、射影は縦方向の切り方です。方向が違うので、片方でもう片方の代わりはできません。そして結合だけが「1枚の表の中を切る」のではなく「表の枚数を減らす」方向に働きます。この3つが独立した3方向を担当しているから、3つで足ります。
図1 選択は横に切って行を絞り、射影は縦に切って列を絞る。方向が違うので互いの代わりにならない
3-2. なぜ「結果がまた表になる」ことが重要なのか
ここが本講でいちばん大事な理屈です。
選択の結果は表です。射影の結果も表です。結合の結果も表です。入力が表で、出力も表。 だから、選択の結果に射影をかけられますし、結合の結果にさらに選択をかけられます。
数学でいえば、これは演算がその集合の中で閉じているということです。整数と整数を足すと整数になるから、足し算を何回でも重ねられます。もし整数どうしを足したら整数でない何かが出てくるなら、2回目の足し算は定義できません。関係演算も同じで、表を入れたら表が出るという性質があるから、演算を鎖のようにつなげられるのです。
① 生徒表と成績表を結合して1枚にする → ② その結果を「2年A組」で選択する → ③ その結果から「氏名」と「点数」だけを射影する
各段階の中間結果はすべて表なので、途中で止めて確かめることもできます。複雑な問い合わせは、複雑な1つの命令ではなく、単純な操作の合成です。
これが分かると、SQLの長い文を見ても身構えなくなります。探すのは3か所だけです。どこで行を絞り、どこで列を選び、どこで表をつないでいるか。
3-3. 選択の条件式は、論理演算そのもの
選択は「条件を満たすレコードを抽出する操作」ですが、その条件は多くの場合1つではありません。「2年生」かつ「A組」、「数学」または「情報」、「3年生でない」。この and / or / not が、そのまま第43講で扱った論理演算です。
大学入試センターが公表している「共通テスト用プログラム表記」の例示にも、論理演算として and(論理積)・or(論理和)・not(否定)が並んでいます。プログラムの条件式と、データベースの選択条件と、検索エンジンの絞り込みは、同じ1つの構造の別の顔です。
だから、条件が増えたときの落とし穴も同じです。
学年 = 2 and クラス = 'A'… 両方を満たす行だけ(絞られる)学年 = 2 or クラス = 'A'… どちらかを満たす行(増える)not (学年 = 2)… 2年生以外
「and で絞ったつもりが or になっていて、結果の行数が増えた」は、試験でも実務でも最頻出の間違いです。and は結果を減らす方向、or は増やす方向という向きだけは、体で覚えてください。
3-4. なぜ結合には共通の列が要るのか
第90講で、私たちは1枚の表を2枚に分けました。分けた理由は、更新・挿入・削除の3つの不整合を消すためでした。そして分けるときに、片方の表の主キーをもう片方に外部キーとして持たせました。
その外部キーが、ここで表をつなぎ直す糸になります。
成績表の1行にある生徒ID=1001 を見て、生徒表の中から生徒ID=1001 の行を探しに行き、横に並べる。これが結合です。つなぐ手がかりがない2枚の表は結合できません。というより、つなげてしまうと意味のない組み合わせが大量に生まれます(次の 3-5)。
図2 結合は、外部キーをたどって相手の表の行を探し、横に並べる操作
ここに因果の順序があります。
- 1枚に詰めると壊れるから、表を分けた(第90講)
- 分けたので、つなぐ操作が要る(本講)
- つなぐために、分けるときに共通の列を残しておいた
つまり外部キーは「分けたときの後始末」ではなく、最初から再結合を前提にした設計です。分割と結合は同じ設計思想の裏表であって、片方だけ覚えても意味がありません。
3-5. 結合の正体は「直積+選択」である
結合を「2枚の表をつなぐ魔法」だと思っていると、行数の感覚が身につきません。中身はもっと単純です。
まず全部の組み合わせを作ります。生徒表5行と成績表5行なら、5×5=25通りの組み合わせがすべて作られます。これを直積といいます。次に、その25行の中から「生徒表の生徒IDと成績表の生徒IDが等しい」行だけを選択します。残ったものが結合の結果です。
新しい演算に見えて、実は「全組み合わせを作ってから条件で絞る」だけです。
この理解には、実用的な効き目が2つあります。
絞る条件を書かなければ、直積がそのまま結果になります。5行×5行なら25行で済みますが、1万行×1万行なら1億行です。結合条件の書き忘れは「間違った答えが出る」のではなく、システムが止まります。4-4で実際に見せます。
(2) 結合の結果の行数が予想できるようになる。 「1人の生徒が3科目の成績を持っていれば、その生徒は結果に3行現れる」。結合すると行が増えることがある、という感覚は、直積から考えれば自然に出てきます。
なお、情報Ⅰの教員研修用教材に「直積」の語は出てきません(第4章の全文検索で0件)。しかしIPA「基本情報技術者試験 シラバス Ver.9.2」は、関係演算を「選択,射影,結合,商,直積」の5つとして挙げ、集合演算(和,差,積)と並べ、用語例に「関係代数」を置いています。高校で3つに絞られているのは、5つのうち高校生が手で追える3つを選んだということであって、3つで全部ではありません。
3-6. 射影で消えるものと、消えないもの
射影は「列を選ぶだけ」に見えて、実は罠が1つあります。列を減らすと、行が同じに見えてしまうことがあるのです。
生徒表から「学年」だけを射影すると、2・2・1・3・2 という5行が出ます。もとは5人の別々の生徒ですが、学年だけ取り出したら区別がつきません。関係演算を集合の演算として厳密に定義する立場では、表は行の集合なので重複行は残りません(学年は 1・2・3 の3行になります)。ところが実際のSQLは、既定では重複行をそのまま返します。消したければ DISTINCT と明示的に書く必要があります。
理論の射影と、SQLの「列を指定した SELECT」は、重複の扱いが違う。 これは次の章で実際に実行して確かめます。試験で「射影の結果は何行か」と問われたときに、重複をどう扱う前提かを問題文から読み取る必要がある、ということでもあります。
4. 手で確かめる
ここからは小さな2枚の表で、①選択 ②射影 ③結合 をまず手で作り、同じ操作をSQLiteで実行して一致を確かめます。以下の出力はすべて SQLite 3.51.0 で実際に実行し、確認したものです(2026年8月3日)。人名はすべて例示用の架空名です。
4-0. 使う2枚の表
生徒表
| 生徒ID(主キー) | 氏名 | 学年 | クラス |
|---|---|---|---|
| 1001 | 山田太郎 | 2 | A |
| 1002 | 鈴木花子 | 2 | B |
| 1003 | 佐藤一郎 | 1 | A |
| 1004 | 高橋二郎 | 3 | B |
| 1005 | 田中三郎 | 2 | A |
成績表
| 成績ID(主キー) | 生徒ID(外部キー) | 科目 | 点数 |
|---|---|---|---|
| 1 | 1001 | 数学 | 82 |
| 2 | 1002 | 数学 | 91 |
| 3 | 1003 | 数学 | 55 |
| 4 | 1001 | 情報 | 74 |
| 5 | 1005 | 情報 | 68 |
作成のSQLは次のとおりです。
CREATE TABLE 生徒(生徒ID INTEGER PRIMARY KEY, 氏名 TEXT NOT NULL,
学年 INTEGER NOT NULL, クラス TEXT NOT NULL);
CREATE TABLE 成績(成績ID INTEGER PRIMARY KEY,
生徒ID INTEGER NOT NULL REFERENCES 生徒(生徒ID),
科目 TEXT NOT NULL, 点数 INTEGER NOT NULL);
INSERT INTO 生徒 VALUES
(1001,'山田太郎',2,'A'),(1002,'鈴木花子',2,'B'),(1003,'佐藤一郎',1,'A'),
(1004,'高橋二郎',3,'B'),(1005,'田中三郎',2,'A');
INSERT INTO 成績 VALUES
(1,1001,'数学',82),(2,1002,'数学',91),(3,1003,'数学',55),
(4,1001,'情報',74),(5,1005,'情報',68);
注目してほしいのは、高橋二郎(1004)には成績が1件もないことです。これが結合のところで効いてきます。
4-1. 選択(行を絞る)
手作業:生徒表を上から1行ずつ見て「学年が2、かつ、クラスがA」を確かめます。
- 1001 山田太郎:2年・A → 残る
- 1002 鈴木花子:2年・B → クラスが違う。落ちる
- 1003 佐藤一郎:1年・A → 学年が違う。落ちる
- 1004 高橋二郎:3年・B → 両方違う。落ちる
- 1005 田中三郎:2年・A → 残る
手作業の答えは2行(山田太郎・田中三郎)。列は4列のまま変わりません。
SELECT * FROM 生徒 WHERE 学年 = 2 AND クラス = 'A';
実行結果:
生徒ID|氏名|学年|クラス
1001|山田太郎|2|A
1005|田中三郎|2|A
一致しました。WHERE の後ろが選択の条件式であり、AND はまさに第43講の論理積です。ここを OR に変えると、2年生(3人)とA組(3人)の和集合になり、行は増えます。
4-2. 射影(列を絞る)
手作業:生徒表から「氏名」の列だけを縦に書き写します。5行1列。行は減りません。
SELECT 氏名 FROM 生徒;
氏名
山田太郎
鈴木花子
佐藤一郎
高橋二郎
田中三郎
次が 3-6 で予告した罠です。「学年」だけを射影します。
SELECT 学年 FROM 生徒;
学年
2
2
1
3
2
5行そのまま返ってきました。 集合として厳密に射影するなら 2・1・3 の3行のはずですが、SQLは既定では重複を消しません。消すには明示的に書きます。
SELECT DISTINCT 学年 FROM 生徒;
学年
2
1
3
3行になりました。「射影=列を選ぶ」だけでは済まず、重複をどう扱うかまでが射影の話だと押さえておいてください。
4-3. 結合(表をつなぐ)
手作業:成績表を1行ずつ見て、その行の生徒IDを生徒表から探し、氏名を横に並べます。
- 成績1(生徒ID=1001, 数学, 82)→ 1001は山田太郎 → 山田太郎・数学・82
- 成績2(1002, 数学, 91)→ 鈴木花子・数学・91
- 成績3(1003, 数学, 55)→ 佐藤一郎・数学・55
- 成績4(1001, 情報, 74)→ 山田太郎・情報・74
- 成績5(1005, 情報, 68)→ 田中三郎・情報・68
手作業の答えは5行。山田太郎は2回出てきます(2科目あるから)。そして高橋二郎はどこにも出てきません。成績表に彼を指す行が1つもないからです。
SELECT 生徒.氏名, 成績.科目, 成績.点数
FROM 生徒 INNER JOIN 成績 ON 生徒.生徒ID = 成績.生徒ID;
氏名|科目|点数
山田太郎|数学|82
鈴木花子|数学|91
佐藤一郎|数学|55
山田太郎|情報|74
田中三郎|情報|68
一致しました。ON 生徒.生徒ID = 成績.生徒ID が結合の条件、つまりつなぐ糸です。この糸は、第90講で表を分けたときに置いた外部キーそのものです。
消えた高橋二郎を確認しておきます。
SELECT 生徒.氏名, 成績.科目, 成績.点数
FROM 生徒 LEFT JOIN 成績 ON 生徒.生徒ID = 成績.生徒ID
WHERE 成績.成績ID IS NULL;
氏名|科目|点数
高橋二郎||
「クラス全員の成績一覧を出したのに1人分足りない」という事故は、たいていこれが原因です。全員を残したいなら LEFT JOIN(外部結合)を使います。
4-4. 結合条件を書き忘れると何が起きるか
3-5 で述べた「直積」を実際に見ます。FROM 生徒, 成績 と書いて条件を書かないと、全組み合わせが作られます。
SELECT COUNT(*) AS 行数 FROM 生徒, 成績;
行数
25
5×5=25行。 手で数えても25です。中身を見ると、意味のなさが分かります。
SELECT 生徒.氏名, 成績.科目, 成績.点数 FROM 生徒, 成績 LIMIT 6;
氏名|科目|点数
山田太郎|数学|82
山田太郎|数学|91
山田太郎|数学|55
山田太郎|情報|74
山田太郎|情報|68
鈴木花子|数学|82
山田太郎に、鈴木花子の91点も佐藤一郎の55点もくっついています。誰の点数でもない行が大量に生まれているわけです。
「結合=直積+選択」という理解を確かめます。直積に生徒IDの一致条件を足せば、内部結合と同じ5行になるはずです。
SELECT COUNT(*) AS 行数 FROM 生徒, 成績 WHERE 生徒.生徒ID = 成績.生徒ID;
行数
5
一致しました。内部結合は、直積を作ってから条件で絞る操作の別の書き方にすぎません。
いちばん怖いのは「条件を書いたつもり」です。
SELECT COUNT(*) AS 行数 FROM 生徒, 成績 WHERE 成績.科目 = '数学';
行数
15
WHERE は書いてあるのに15行。生徒5人×数学の成績3件=15です。選択の条件は書いたが、結合の条件を書いていない。 条件が書いてあるから安心、ではありません。「2枚の表をつなぐ条件があるか」を独立に確認する習慣をつけてください。
4-5. 3つを合成する
最後に、3つを組み合わせて「2年A組の生徒の氏名と、その数学の点数」を出します。
- 結合 → 5行(4-3の結果)
- その中から「2年A組」かつ「数学」を選択 → 山田太郎の数学82点だけ(田中三郎は2年A組ですが数学の成績を持っていません)
- 氏名と点数を射影 → 1行2列
SELECT 生徒.氏名, 成績.点数
FROM 生徒 INNER JOIN 成績 ON 生徒.生徒ID = 成績.生徒ID
WHERE 生徒.学年 = 2 AND 生徒.クラス = 'A' AND 成績.科目 = '数学';
氏名|点数
山田太郎|82
手作業と一致しました。そして、演算が閉じている(結果がまた表である)ことを目で見るために、途中結果を丸ごと入れ子にしても同じ答えが出ることを確かめます。
SELECT 氏名 FROM (SELECT * FROM 生徒 WHERE 学年 = 2) WHERE クラス = 'A';
氏名
山田太郎
田中三郎
内側の SELECT の結果が、外側からは1枚の表として見えています。 これが「結果がまた表である」ことの実物です。関数の合成をしているのと同じことを、表に対してやっているわけです。
5. 共通テストではこう出る(重要度A)
まず事実を正確に置きます。データベースは、共通テストの本試験ではまだ出ていませんが、追・再試験では2年連続で出ています。 私は大学入試センターの公開資料を1件ずつ当たって確かめました(2026年8月3日確認)。
| 試験 | 『情報Ⅰ』でのデータベースの扱い |
|---|---|
| 試作問題(令和7年度・概要) | 「データベース」の語が全文で0件 |
| 令和7年度 本試験 | 問題PDF全文に「データベース」0件。自己評価にも0件 |
| 令和7年度 追・再試験 | 第1問 問3で出題。センターの自己評価「問3がデータベースの性質を分析させる問題」 |
| 令和8年度 本試験 | 問題PDF全文に「データベース」0件。自己評価にも0件 |
| 令和8年度 追・再試験 | 第1問 問4で出題。センターの自己評価「アンケート結果の集計をテーマにデータの前処理やデータベースの設計における基礎的な概念の理解と課題解決の過程について考察できるか問う問題」 |
つまり「試作問題と本試験の範囲では出ていない」は正しいのですが、それを『データベースは出ない』と読むのは誤りです。 作問部会は2年続けて、追・再試験の第1問(小問集合)にデータベースを置いています。しかも自分たちでこう書いています。
問3において「情報Ⅰ」の学習範囲の制約内でデータベース問題を出題した点については好意的な評価が得られた。
大学入試センター「令和7年度 問題評価・分析委員会報告書(追・再試験)」『情報Ⅰ』自己評価
「学習範囲の制約内で」という言い方に注目してください。SQLは情報Ⅰの範囲外だから書かせない。しかし関係演算の考え方そのものは範囲内だから、SQLを使わない形にして出す。これが作問側の設計であり、この講で「用語ではなく作業を身につけてほしい」と言ってきたことの裏付けになっています。
なお、追・再試験の設問別得点率・正答率は公表されていません(センターが公開している「試験情報データ」は本試験のみ)。ですから「この問題の正答率は何%だった」という話は、私にはできません。受験者数は、令和8年度で本試験305,202名に対し追・再試験577名です(同報告書)。
5-1. 出題の型(実際に出た2問に即して)
型1:表の「形」を選ぶ・変える(令和7年度 追・再試験 第1問 問3) 施設の予約表を題材に、「日付×施設」のマス目に書き込むクロス表から、「日付・施設・団体」の3列に1件1行で並べるレコード形式へ置き換える場面が与えられます。予約は「末尾に1行追加する」、取り消しは「条件に合う行を探して消す」。1件分のデータ=1行、という感覚がそのまま点になる型です。
型2:選択の条件式と、消す単位(同上) 取り消しの場面で、探す条件が「<日付>が◯月◯日、かつ、<施設>が武道場」というand の複合条件になり、さらに「消すのはその行のマス1つか、その行そのものか」を選ばせます。前者が選択の条件式、後者がレコード(行)という単位の理解です。日付だけ、施設だけでは1行に絞れない(=複数の列を組み合わせて初めて一意になる)ことに気づけるかが分かれ目になります。
型3:2つの表を1つにまとめる/別表で関連づける(令和8年度 追・再試験 第1問 問4) 10年前と今回の2回分のアンケート結果という列の作りが違う2枚の表を1枚にまとめる場面と、企画の一覧表を別に用意して識別番号で本体の表と関連づける場面が出ます。後者は「このように別表を用意して項目を関連づけることの利点」を選ばせる形で、第90講の外部キーと正規化の利点そのものです。センターはこの設問について「単なる知識理解だけでなく実習を伴った実質的な理解が必要とされることから、やや難易度が高かった」と自己評価しています。この講の第4章を手で動かした人が有利になる、と作問側が言っているに等しいわけです。
型4:複数の表から条件に合う行を追う/どの列が結合の鍵か 2枚以上の表が与えられ、片方の値をキーにしてもう片方の行を特定させる型。これは手作業の結合です。指で追ってかまいません。 鍵の判断基準は1つ、両方の表に共通して存在し、片方では一意である列(=主キーと、それを指す外部キー)です。氏名や科目名のように重複しうる列を鍵にすると、対応が1対1になりません。
型5:選択条件の論理式 「〜かつ〜」「〜または〜」「〜でない」を条件式に直す、あるいは条件式から該当行を数える型。第43講の論理演算がそのまま出ます。
5-2. 本試験に出ていないことを、どう受け取るか
追・再試験は、本試験を受けられなかった人のための試験で、受験者数は本試験の約500分の1です。ですから「追試に出た=本試験にも必ず出る」とは言えません。しかし逆も言えません。 追・再試験は本試験と同じ作問部会が、同じ方針・同程度の難易度を目指して作っています(センターは報告書で「追・再試験の難易度は本試験と同程度を目指した」と明記しています)。作問部会が2年続けて出題可能と判断し、外部評価でも好意的に受け止められた題材である以上、本試験に降りてくる準備をしておくのが合理的です。重要度をAとしているのは、この理由によります。
5-3. 落とし穴
- and と or の取り違え。「2年生とA組の生徒」という日本語は、たいてい and(両方満たす)の意味です。日本語の「と」に引きずられて or にしない
- 結合すると行が減ることがあるのを忘れる。相手のいない行は内部結合で落ちます(高橋二郎)
- 結合すると行が増えることもある。1人が3科目持っていれば3行になります。「人数」と「行数」は別物
- 射影の結果の重複。列を減らすと、別々だった行が同じに見えます
- 選択と射影の混同。選択=横に切る、射影=縦に切ると、図で覚えてください
5-4. 自作の練習問題
(1) 「1年生またはB組の生徒」を選択すると何行になるか。
(2) 生徒表から「クラス」の列を射影したとき、重複を消さなければ何行、消せば何行か。
(3) 生徒表と成績表を生徒IDで結合すると何行になるか。またそこに現れない生徒は誰か。
(4) 結合条件を書き忘れると何行になるか。式で答えよ。
(5) 「情報を受験した生徒の氏名」を出すには、3つの演算をどの順に使えばよいか。
解答
- 3行(佐藤一郎=1年、鈴木花子=B組、高橋二郎=B組かつ3年)。or なので和集合になります。
- 消さなければ5行(A・B・A・B・A)、消せば2行(A・B)。
- 5行。現れないのは高橋二郎(成績表に彼を指す行が無い)。
- 5×5=25行。生徒表の行数×成績表の行数。
- 結合(生徒IDで)→ 選択(科目=情報)→ 射影(氏名)。選択を先にしてもかまいませんが、結合は必ず必要になります。
6. 情報Ⅱではこうなる
6-1. 学習指導要領解説が名指ししているもの
情報Ⅱ(3)「情報とデータサイエンス」ア(ア)の解説に、この一文があります。
なお,データの収集,整理,整形に関しては,関係データベースの関係演算を扱うとともにデータベースの管理や操作を行うプログラミング言語についても触れる。
文部科学省「高等学校学習指導要領(平成30年告示)解説 情報編」平成30年7月(該当箇所は解説p.50相当)
「関係演算」と「データベースの管理や操作を行うプログラミング言語」。 後者が指しているのがSQLで、情報Ⅱの教員研修用教材 学習11「データと関係データベース」は「RDBを操作するためにはSQL(Structured Query Language)を使う」と明記しています。
つまり制度上の役割分担はこうです。情報Ⅰは関係演算を「手でたどる」。情報Ⅱは同じことを「言語で書く」。 この記事で、手作業とSQLを必ずセットで示してきたのは、その分水嶺をまたいで見せるためでした。
6-2. 語数調査 ── 数字で見ると、ねじれている
同じ語が、①学習指導要領解説 情報編 ②情報Ⅰ教員研修用教材 ③情報Ⅱ教員研修用教材 で何回出てくるかを、PDFの全文検索で数えました(2026年8月3日、当方で実施)。
| 語 | 解説 情報編(全文) | 情報Ⅰ 教員研修用教材 |
情報Ⅱ 教員研修用教材 |
|---|---|---|---|
| 関係演算 | 3(情報Ⅱ 1・専門教科「データベース」2。情報Ⅰの記述には0) | 1(第4章 学習21) | 0 |
| 射影 | 1(専門教科「データベース」のみ) | 3(すべて学習21) | 0 |
| 結合 | 4(共通教科は情報Ⅱの1のみ。残り3は専門教科) | 4(すべて学習21) | 54(うち第4章の「結合テスト」等48・目次2・「線形結合」3。表の結合は1) |
| SQL | 0 | 8(すべて学習21) | 21(学習11) |
読み取れることが3つあります。
(1) 学習指導要領解説の情報Ⅰの記述には「関係演算」も「射影」も1度も出てきません。 解説全体でも「射影」は1回だけで、しかも共通教科ではなく専門教科情報科の科目「データベース」の記述です。それなのに、情報Ⅰの教員研修用教材は学習21で3語をきちんと定義し、SQLの例(SELECT/WHERE/INNER JOIN/INSERT/DELETE)まで載せています。用語の出どころが、法令に準ずる文書ではなく研修用教材の側にあるわけです。
(2) 情報Ⅱの教員研修用教材には「関係演算」も「射影」も0件です。 解説が情報Ⅱで名指しした語を、国が作った情報Ⅱの研修用教材は一度も使っていません。「結合」は54回も出てきますが、その大半は第4章のシステムの結合テストで、表の結合の意味で使われているのは学習12の1か所だけです。
(3) それどころか、情報Ⅱの教材はSQLより pandas を勧めています。
データを扱うことに向いたこれらの言語ではRDBをSQLで直接操作するよりもずっと簡単に高速にデータを読み込み,適切な形で処理することができる。
文部科学省「高等学校情報科『情報Ⅱ』教員研修用教材」第3章 情報とデータサイエンス(令和2年7月、学習11)
学習12でも「リレーショナルデータベースのように二つのデータを結合したり,重複データを取り除いたりすることができる」と書かれ、pandasが関係演算の役をそのまま引き受けています。操作の中身(行を絞る・列を選ぶ・表をつなぐ)は変わらず、書く道具だけが変わるということです。だからこの講で身につけた3つの見方は、そのまま情報Ⅱで使えます。
6-3. 配信教材の側でも、データベースは情報Ⅰに置かれている
文部科学省の「授業・研修用コンテンツ」を確認すると、【情報Ⅰ】には学習動画[3]「身近にあるデータベースを学ぼう!」があり、スライドとワークシートが配布されています。一方、【情報Ⅱ】の授業・研修用コンテンツは6本で、データベースを扱うものは1本もありません。さらに「情報Ⅱ解説動画」のうち【情報とデータサイエンス】は7本ありますが、学習11「データと関係データベース」に対応する動画はありません(回帰分析・主成分分析・機械学習などが並びます。2026年8月3日確認)。
まとめると、関係データベースの実習は、国の配信教材の上では情報Ⅰ側に置かれています。制度文書(解説)は「関係演算は情報Ⅱ」と書き、実際の教材は情報Ⅰに厚い。このねじれを知っておくと、「情報Ⅰの教科書に選択・射影・結合が載っているのはなぜか」という疑問が解けます。載っているのが正しい。ただし根拠は解説ではなく、教員研修用教材の側にあります。 そして共通テストの追・再試験が2年続けて出題しているのも、この線の上にあります。
6-4. 3つの先には何があるか
高校で扱う関係演算は3つですが、その先があります。IPA「基本情報技術者試験 シラバス Ver.9.2」は、関係データベースのデータ操作をこう定義しています。
集合演算(和,差,積(共通)),関係演算(選択,射影,結合,商,直積)などの代表的なデータの操作を理解する。用語例 関係代数
情報処理推進機構(IPA)「基本情報技術者試験(科目A・科目B)シラバス Ver.9.2」
関係演算は5つ(選択・射影・結合・商・直積)、さらに集合演算(和・差・積)が別立てで並びます。 高校の3つは、この体系の入口です。学習指導要領解説の専門教科「データベース」も同じ構造で書かれています。
ここでは,集合演算や関係演算を取り上げ,和集合,差集合,共通集合,選択,射影,結合など,データの操作の基礎的な知識と技術を扱う。
前掲「解説 情報編」専門教科情報科 第8節「データベース」(3)ア
同じ節では、データベース操作言語として「表の問い合わせ,結合,副問い合わせ,ビューの作成,挿入,更新,削除」までが扱われます。副問い合わせとビューは、まさに4-5でやった「演算の結果をまた表として使う」ことの、制度化された形です。 閉じているという性質が、言語の機能として名前をもらうわけです。
6-5. 情報Ⅰと情報Ⅱの扱いの違い
| 情報Ⅰ | 情報Ⅱ・その先 | |
|---|---|---|
| 選択 | 表を指で追って条件に合う行を拾う | WHERE/pandasの条件式で書く。分析前の抽出になる |
| 射影 | 必要な列を目で選ぶ | 列を選ぶことが特徴量の選択になる |
| 結合 | 2枚の表を突き合わせる | 複数のデータソースの統合(「二つのデータを結合」) |
| 演算の主体 | 人間が手でたどる | 言語(SQL・Python)が実行する |
| 誤りの現れ方 | 答えが違う | 行が爆発して処理が終わらない/間違った母集団を分析する |
| 位置づけ | 表を読む技能 | 分析の前処理(データの収集・整理・整形) |
最後の行がいちばん大事です。情報Ⅱにおける関係演算は、それ自体が目的ではありません。分析にかける前にデータを正しい形に整えるための工程であり、ここを間違えると、その後の回帰分析も機械学習も、間違った表の上で正しく計算されることになります。第43講で書いた「間違った母集団を分析する」という危険が、ここでも同じ形で顔を出します。
7. この講のまとめ
- 関係演算は3つ。選択=行を絞る(横に切る)/射影=列を絞る(縦に切る)/結合=表をつなぐ
- 3つで足りるのは、互いに直交していて、結果がまた表になる(閉じている)から。だから合成できる
- 選択の条件式は論理演算そのもの。and は絞る、or は増やす
- 結合には共通の列が要る。第90講で表を分けたときの外部キーが、つなぐ糸になる。分けたから、つなぐ操作が要る
- 結合=直積+選択。 条件を書き忘れると5×5=25行、1万行どうしなら1億行に爆発する
- 内部結合は相手のいない行を落とす。人数と行数は別物
- 共通テストは本試験(令和7・8年度)では未出題だが、追・再試験では2年連続で出題(令和7年度 第1問問3・令和8年度 第1問問4)。センターは「情報Ⅰの学習範囲の制約内で」「データベースの設計における基礎的な概念」と自己評価している。用語より作業として出る
- 学習指導要領解説の情報Ⅰの記述に「関係演算」「射影」は0件。用語は情報Ⅰ教員研修用教材 学習21 にある
- 情報Ⅱの教員研修用教材には「関係演算」「射影」が0件で、SQLより pandas を勧めている。制度文書と配信教材がねじれている
出典(すべて2026年8月3日に取得)
- 文部科学省「高等学校学習指導要領(平成30年告示)解説 情報編」平成30年7月
- 文部科学省「高等学校情報科『情報Ⅰ』教員研修用教材」第4章 情報通信ネットワークとデータの活用(令和2年)
- 文部科学省「高等学校情報科『情報Ⅱ』教員研修用教材」第3章 情報とデータサイエンス(令和2年7月)
- 文部科学省「授業・研修用コンテンツ」【情報Ⅰ】【情報Ⅱ】および「情報Ⅱ解説動画」(高等学校情報科に関する特設ページ)
- 情報処理推進機構(IPA)「基本情報技術者試験 シラバス Ver.9.2」
- 大学入試センター「令和7年度大学入学共通テスト 試作問題『情報』の概要」
- 大学入試センター「過去3年分の試験問題」令和7年度・令和8年度の本試験/追・再試験『情報Ⅰ』問題PDF
- 大学入試センター「問題評価・分析委員会報告書」令和7年度・令和8年度(追・再試験)『情報Ⅰ』自己評価・高等学校評価
- SQLの実行環境:SQLite 3.51.0(本記事のSQLはすべて実行して出力を確認しています)
本シリーズの全体像は『藤原進之介の最強120講義』ハブページ、公開済みの各講はシリーズ一覧からご覧いただけます。データの種類と尺度については第80講も併せてどうぞ。制度の話は2026年8月時点の情報です。
執筆:藤原進之介(数強塾グループ代表)
オンライン数学専門塾「数強塾」代表。累計3,500名以上の中高一貫校生を指導。東進ハイスクール・東進衛星予備校・代々木ゼミナールなど出講実績あり。情報Ⅰの参考書を複数執筆しており、KADOKAWA『ゼロから始める情報I』、Gakken『きめる!共通テスト 情報Ⅰ』などがあります。本記事は参考書『藤原進之介の最強120講義』第91講のWeb版です。
「情報Ⅰ、独学でいけるのか不安」という方へ
数強塾では数学と情報Ⅰの両方に対応したオンライン個別指導を行っています。学習相談は無料、体験授業は3,000円(税込)でお受けしています。
