SELECT文・射影と選択とは?セレクトぶん・しゃえいとせんたく
SELECT文は関係データベースからデータを取り出すSQLの命令で、取り出す列を絞る射影と、条件に合う行を絞る選択を組み合わせて必要な範囲だけを返す。運用の現場では障害調査や監査への証跡提出でこの読取りだけを使うことが多く、付与する権限も参照に限るのが原則になる。
最終更新:2026-10-06
この語が出る過去問を解く →背景
必要な数行のために表を丸ごとアプリケーション側へ読み出していては、通信も処理も無駄になる。どの列とどの行が要るかをデータベース側へ伝え、絞り込んだ結果だけを返させる——この考え方が関係代数の射影と選択にあたり、SQLはそれを一つの命令で書けるようにしたものである。
具体例
「SELECT 受付番号, 発生時刻 FROM インシデント WHERE 優先度 = '高'」は、列を2つへ絞る射影と、優先度が高い行だけを残す選択を同時に行っている。監査で特権IDの利用記録を求められた場面でも、必要な列と期間だけを取り出して渡すのが原則で、表ごと渡さない。
試験での引っ掛け
射影が列、選択が行という対応が狙い目で、日常語の「選択」は列を選ぶ感覚と結びつくため逆に覚えやすい。運用側の注意もひとつ——本番データベースへ直接投げるSELECTは無害に見えて、範囲を絞らないと大量読取りで性能に響く。参照するだけだから承認は要らない、という扱いにしないこと。
関連用語
出た過去問
出典:平成30年度 秋期 ITサービスマネージャ試験 午前Ⅱ 問21(IPA)
“社員”表から、役割名がプログラマである社員が3人以上所属している部門の部門名を取得するSQL文はどれか。ここで、実線の下線は主キーを表す。 社員(社員番号, …
正解:SELECT 部門名 FROM 社員 WHERE 役割名 = 'プログラマ' GROUP BY 部門名 HAVING COUNT(*) >= 3
要点:行の条件はWHERE、集約後の条件はHAVINGに書く
SQLの評価順は、WHEREで行を絞り込み、GROUP BYで集約し、HAVINGで集約結果を絞り込む、という順序になる。したがって役割名の条件は行単位なのでWHEREに、人数3人以上という集約後の条件はHAVING COUNT(*)>=3に書く必要がある。集約関数をWHEREに書くことはできず、HAVINGをWHEREより前に置くこともできない。
出典・参考
解説は資格暗記が独自に作成しています。過去問の出典は各問題に記載のとおりです。