基本情報技術者 学習ページ|科目A・データベース
SQLでデータを取り出す
データ操作では、関係演算とSQLの対応を押さえることが重要です。SELECT文の絞込み、集約、結合、副問合せに加え、NULLを含むときの判定にも注意します。
関係演算の基本
関係演算は、表から必要なデータを取り出したり組み合わせたりする操作です。選択は条件に合う行を取り出し、射影は必要な列を取り出します。結合は、共通する列などを手掛かりに複数の表を関連付けます。
SQLでは、選択は主にWHERE句、射影はSELECT句に対応します。結合はJOIN句と結合条件で表せます。選択は行、射影は列という対応を逆にしないことが大切です。
選択は行、射影は列、結合は表同士を関連付ける。
SELECT文の絞込み
SELECT文は表からデータを検索するために使います。SELECT句で取得する列を指定し、FROM句で対象の表、WHERE句で行の条件を指定します。複数条件はANDやORで組み合わせ、BETWEENやINも条件指定に利用できます。
検索結果の並び替えにはORDER BYを使います。ASCは昇順、DESCは降順で、省略時は一般に昇順として扱われます。WHERE句は集約前の行を絞り込む点を押さえます。
WHEREは行を絞り、ORDER BYは結果を並べ替える。
集約とグループ化
集合関数にはCOUNT、SUM、AVG、MAX、MINなどがあり、複数行から件数や合計、平均などを求めます。GROUP BYは、指定した列の値ごとに行をまとめ、グループ単位で集合関数を適用するときに使います。
グループ化した後の集計結果に条件を付けるときはHAVINGを使います。WHEREはグループ化前、HAVINGはグループ化後の条件です。似た条件でも適用される段階が異なります。
WHEREは集約前、HAVINGは集約後の条件。
結合と副問合せ
複数表に分かれたデータを一度に扱うときは結合を使います。内部結合では結合条件を満たす行だけを結果に含め、外部結合では片方に対応行がなくても残す方式があります。JOIN句では、どの列同士を対応させるかをON句などで指定します。
副問合せは、SQL文の中に別のSELECT文を入れる方法です。副問合せで得た値や集合を、外側の問合せの条件として利用できます。結合条件を省くと意図しない組合せが大量に生じることがあります。
結合は表同士を対応付け、副問合せは問合せ結果を条件に使う。
更新とNULL
データの追加にはINSERT、既存行の変更にはUPDATE、削除にはDELETEを使います。UPDATEやDELETEでWHERE句を付けない場合、対象表の多数の行に処理が及ぶため、条件の有無を確認します。
NULLは値が存在しない、又は不明であることを表し、0や空文字とは別物です。NULLとの比較は= NULLではなくIS NULLやIS NOT NULLを使います。COUNT(列名)はNULLを除いて数える一方、COUNT(*)は行そのものを数えます。
NULLは0ではなく、判定にはIS NULLを使う。
本番の形で解いてみる
科目Aの形: 四肢択一(表を読む)(このページのために作った問題)
次の売上表に対して、下のSQL文を実行した結果として正しいものはどれか。
売上
| 部門 | 担当 | 金額 |
|---|---|---|
| 東 | 佐藤 | 120 |
| 東 | 鈴木 | 80 |
| 西 | 高橋 | 150 |
| 西 | 田中 | 70 |
| 南 | 伊藤 | 90 |
1SELECT 部門, SUM(金額) AS 合計 2FROM 売上 3GROUP BY 部門 4HAVING SUM(金額) >= 200 5ORDER BY 合計;
- 東 200、西 220
- 東 200、西 220、南 90
- 東 120、西 150
- 西 220だけ
答えと解説を見る
正解: 東 200、西 220
部門ごとに合計すると、東は200、西は220、南は90です。HAVING句で合計が200以上の部門だけを残すので、東と西が結果になります。
まちがえやすい点: WHERE句の条件と同じ感覚で各行の金額だけを見ず、GROUP BY後の合計にHAVINGが適用される点を確認する。
科目Aの形: 四肢択一(表を読む)(このページのために作った問題)
次の社員表と部門表に対して、下のSQL文を実行したときに得られる氏名はどれか。
社員
| 社員ID | 氏名 | 部門ID | 評価 |
|---|---|---|---|
| 1 | 青木 | 10 | 5 |
| 2 | 井上 | 20 | 4 |
| 3 | 加藤 | 10 | NULL |
| 4 | 木村 | 30 | 3 |
部門
| 部門ID | 部門名 |
|---|---|
| 10 | 開発 |
| 20 | 営業 |
| 30 | 管理 |
1SELECT 社員.氏名 2FROM 社員 JOIN 部門 3ON 社員.部門ID = 部門.部門ID 4WHERE 部門.部門名 = '開発' 5AND 社員.評価 >= 4 6ORDER BY 社員.氏名;
- 青木だけ
- 青木と加藤
- 井上だけ
- 青木と井上
答えと解説を見る
正解: 青木だけ
開発部門は部門IDが10なので対象候補は青木と加藤です。青木は評価5で条件を満たしますが、加藤の評価はNULLであり、NULL >= 4は真にならないため結果に含まれません。
まちがえやすい点: NULLを0や空欄の値として比較せず、通常の比較条件では真にならないと考える。
科目Aの形: 四肢択一(このページのために作った問題)
関係演算における選択と射影の説明として、最も適切なものはどれか。
- 選択は条件に合う行を取り出し、射影は必要な列を取り出す
- 選択は必要な列を取り出し、射影は条件に合う行を取り出す
- 選択は二つの表を結合し、射影は重複行だけを削除する
- 選択は表を並べ替え、射影は集計結果をグループ化する
答えと解説を見る
正解: 選択は条件に合う行を取り出し、射影は必要な列を取り出す
選択は条件に合う行を抽出する演算で、射影は必要な列を抽出する演算です。SQLでは、それぞれ主にWHERE句とSELECT句に対応させて考えられます。
まちがえやすい点: 日本語の語感ではなく、選択は行、射影は列という対応で覚える。
基本情報の学習ページ
ほかの学習ページの一覧と、2択の用語カード(750語)は、基本情報技術者のページにあります。
基本情報技術者のページへ →このページの内容は、IPA「基本情報技術者試験 シラバス Ver.9.2」(2026年1月公表)と試験要綱Ver.5.6の範囲にもとづきます(2026年10月確認)。IPAは2027年度春ごろから新しい試験制度に移る予定です。