基本情報技術者試験 科目 A
SQL をブラウザで動かして、わかりやすく理解する
プログラミング未経験でもつまずかないように、 データベース分野の SQL をその場で書いて実行できるようにしました。
「一つ進める」を押していくと、SQL が実際に評価される順番で、 それぞれの時点の表が 1 つずつ表示されます。
IPA シラバス Ver.9.2「データ操作」の範囲に対応。処理はすべてブラウザ内で完結します。
2 つの表を結合する練習に。在庫の無い商品があるので、外部結合や NOT EXISTS の違いが見える。
| 商品番号 | 商品名 | 分類 | 単価 |
|---|---|---|---|
| P01 | ボールペン | A | 120 |
| P02 | ノート | A | 200 |
| P03 | 消しゴム | B | 80 |
| P04 | 定規 | B | 150 |
| P05 | ホチキス | C | 500 |
| 商品番号 | 倉庫 | 在庫数 |
|---|---|---|
| P01 | W1 | 30 |
| P01 | W2 | 10 |
| P02 | W1 | 0 |
| P03 | W2 | 25 |
使用している表は過去問の構造をもとにした架空データです(平成26年春 問28 の表の構造をもとにした(値は作り直しています))。
SQL は書いた順に実行されない
SQL は SELECT から書き始めますが、評価されるのは最後です。実際の順番はこうなります。
| 順 | 句 | その時点で何が起きるか |
|---|---|---|
| 1 | FROM / JOIN | 表を読み込み、複数あれば組み合わせる。ここで扱う行が最も多くなる |
| 2 | WHERE | 1 行ずつ見て絞り込む。まだグループが無いので集約関数は使えない |
| 3 | GROUP BY | 残った行を、指定した列の値ごとにグループへまとめる |
| 4 | HAVING | グループ単位で絞り込む。集約関数の結果で条件を書ける |
| 5 | SELECT | ここでようやく列が決まる。別名 (AS) が有効になるのもこの時点 |
| 6 | DISTINCT | 確定した行から重複を取り除く |
| 7 | ORDER BY | 最後に並べ替える。SELECT で付けた別名を使えるのはこのため |
この順番から分かること
- WHERE では集約関数が使えない。
WHEREは 2 番目、グループ化は 4 番目なので、WHEREの時点ではまだグループが存在しません。 グループに対する条件はHAVINGに書きます。 - ORDER BY では SELECT で付けた別名が使える。
ORDER BYはSELECTの後なので、 そこで確定した列名を参照できます。 - GROUP BY に無い列は取り出せない。 1 グループに複数行がまとまるため、どの行の値を出すか決まらないからです。
試験で問われる SQL の範囲
IPA シラバス Ver.9.2 の中分類「データ操作」に挙げられている用語のうち、 SQL に関わるものです。
| 分類 | 項目 | このツール |
|---|---|---|
| 問合せ | SELECT文 / 相関名 / パターン文字列 / 副問合せ / 集約関数 | 実行できる |
| 関係演算 | 選択 / 射影 / 結合(内部結合・外部結合) | 実行できる |
| 集合演算 | 和 (UNION) / 差 (EXCEPT) / 積 (INTERSECT) / 直積 | 実行できる |
| DML | INSERT文 / UPDATE文 / DELETE文 | 実行できる |
| DDL・制約 | CREATE TABLE / 一意性制約 / 参照制約 / 検査制約 / 非NULL制約 / 実表とビュー | 実行できる |
| アクセス権 | GRANT文 / REVOKE文 | 解説のみ |
| 親言語方式 | 埋込みSQL / カーソル / モジュール言語 | 解説のみ |
GRANT とカーソルは、利用者の概念やホスト言語が必要になるため実行できません。 エディタに書くと、実行できない理由と解説へのリンクが表示されます。
SQL をわかりやすく学ぶ — レッスン 12 本
シラバス「データ操作」の範囲をテーマ別に解説しています。 各レッスンには実行できるエディタが埋め込まれています。
読めるようになったら — 練習問題 14 問
SQL を読んで実行結果を当てる 4 択問題です。解答すると解説と、 その SQL をこのシミュレーターで開くリンクが出ます。
データベースをもっと深く理解する
科目 A のデータベース分野では、SQL と並んで正規化とER 図が頻出です。このツールで扱う制約が「なぜ必要なのか」は参照整合性の解説で、実行速度に効くインデックスはRDB インデックス図解で扱っています。
科目 B の擬似言語は擬似言語 実行シミュレーターで同じように 1 行ずつ動かせます。
よくある疑問
試験対策に使える書籍
イラスト主体で科目Aの全範囲を通読できる入門書。用語の土台を作ってから科目Bのアルゴリズムに入ると理解が速い。
科目Aの頻出テーマを図と語呂で押さえる入門書。参考書と問題集を兼ねるので初受験の一冊目に選びやすい。
公開問題を大量に解いて仕上げるための問題集。擬似言語の読解に慣れた後、本番形式で時間配分を試す段階で使う。
擬似言語の記法の読み方から、トレースして答えを出すまでを一冊で通せる科目B特化本。手を動かして追う練習量を確保したいときの定番。
プログラミング未経験を前提に、記号の意味とアルゴリズムの考え方を最小単位から積み上げる入門書。変数や条件分岐で手が止まる段階に向く。
科目Bの出題パターンを網羅的に演習できる対策書。構文を理解した後、解法の型を身につける段階で効く。
科目Bの出題範囲を絞り込んだ薄型の対策書。頻出アルゴリズムと情報セキュリティを短期間で一周したいときに。
本セクションはAmazonアソシエイトのリンクを含みます。