0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

応用情報技術者試験(AP) 科目B SQLチートシート

0
Last updated at Posted at 2026-05-22

ChatGPTで出力、整形、追記。
AP科目B向けに、頻出ポイントを実践寄りに整理。

1. SELECT文の基本形

SELECT 列名
FROM 表名
JOIN 表名
ON 結合条件
WHERE 条件
GROUP BY 列名
HAVING 集約条件
ORDER BY 列名;

各句の意味

意味
SELECT 表示する列
FROM どの表を使うか
JOIN どの表と結合するか
ON どう結合するか
WHERE 行を条件で絞る
GROUP BY 同じ値ごとにまとめる
HAVING グループ化後の条件
ORDER BY 並び替え

2. SQLの実行順序(最重要)

SQLは上から読まれない。

FROM
↓
JOIN
↓
ON
↓
WHERE
↓
GROUP BY
↓
HAVING
↓
SELECT
↓
ORDER BY

超重要ポイント

SELECTは最後付近で実行される。

SELECT AVG(score)

と最初に書いてあっても、

実際は:

FROM
→ WHERE
→ GROUP BY
→ HAVING
→ SELECT

の順。

3. 実行順序の具体例

SELECT dept, AVG(test.score)
FROM test
JOIN test2
ON test.id = test2.id
WHERE test.score >= 60
GROUP BY dept
HAVING AVG(test.score) >= 70
ORDER BY AVG(test.score);

処理順

1. FROM

test表を読む。

2. JOIN

test2表と結合することを宣言。

3. ON

ON test.id = test2.id

idが一致する行同士を結合。

4. WHERE

WHERE test.score >= 60

60未満の行を除外。

5. GROUP BY

GROUP BY dept

部署ごとにまとめる。

6. HAVING

HAVING AVG(test.score) >= 70

平均70以上のグループだけ残す。

7. SELECT

表示列を決定。

8. ORDER BY

並び替え。


4. WHERE句

意味

行単位で条件を指定。
引数は論理値である事。
TRUEの行で絞り込む。

WHERE score >= 60

比較演算子

演算子 意味
= 等しい
<> 等しくない
> より大きい
< より小さい
>= 以上
<= 以下

AND / OR

WHERE age >= 20 AND age < 30
演算子 意味
AND 両方満たす
OR どちらか満たす

BETWEEN

WHERE score BETWEEN 60 AND 100

→ 60〜100

IN

WHERE dept IN ('営業', '開発')

ORの省略形イメージ。

WHERE dept='営業' OR dept='開発'

LIKE(部分一致)

WHERE name LIKE '田%'
記号 意味
% 0文字以上
_ 1文字

LIKE '田%'

→ 田中、田村

LIKE '%田%'

→ 山田、田中

5. NULL(超重要)

NULL = 「値が存在しない」

0や空文字ではない。

NG

WHERE col = NULL

NULLは = で比較できない。

OK

WHERE col IS NULL
WHERE col IS NOT NULL

三値論理

NULL = NULL

→ TRUEではない

→ UNKNOWN

6. ORDER BY句

意味

並び替え。

ORDER BY score DESC
指定 意味
ASC 昇順
DESC 降順

複数指定

ORDER BY dept ASC, score DESC

列番号指定

SELECT name, score
FROM test
ORDER BY 2 DESC;

→ 2列目(score)で降順。

7. 集約関数

意味

複数行をまとめて計算。

関数 意味
COUNT(*) 全行数
COUNT(col) NULL以外件数
SUM(col) 合計
AVG(col) 平均
MAX(col) 最大
MIN(col) 最小

8. NULLと集約関数

NULLは基本無視

AVG(score)
SUM(score)
MAX(score)
MIN(score)

→ NULL無視。

COUNT(*)だけ特殊

データ:

score
80
NULL
60
COUNT(*)

→ 3

COUNT(score)

→ 2

9. GROUP BY句(最重要)

意味

同じ値ごとにまとめる。

SELECT dept, AVG(score)
FROM test
GROUP BY dept;

10. GROUP BYの超重要ルール

SELECTに書けるのは:

  • GROUP BYした列
  • 集約関数

のみ。

OK

SELECT dept, AVG(score)
FROM test
GROUP BY dept;

NG

SELECT name, AVG(score)
FROM test
GROUP BY dept;

nameが1つに決まらない。

11. HAVING句

意味

GROUP BY後の条件。

HAVING AVG(score) >= 70

12. WHEREとHAVINGの違い

対象
WHERE
HAVING グループ

WHEREは集約前

WHERE score >= 60

HAVINGは集約後

HAVING AVG(score) >= 70

NG例

WHERE AVG(score) >= 70

WHERE時点ではまだ集約されていない。

13. JOIN(最重要)

意味

複数表を結合。

INNER JOIN

SELECT *
FROM A
INNER JOIN B
ON A.id = B.id;

一致した行だけ。

LEFT JOIN

SELECT *
FROM A
LEFT JOIN B
ON A.id = B.id;

左表は全部残す。
一致しない右側はNULL。

14. JOIN種類まとめ

種類 意味
INNER JOIN 一致した行のみ
LEFT JOIN 左表を全部残す

15. JOINで件数増加(頻出)

A

id
1

B

id
1
1
SELECT *
FROM A
JOIN B
ON A.id = B.id;

結果:

id
1
1

→ 1対多では件数増加。

16. ON句

意味

JOIN条件。

ON A.id = B.id

17. LEFT JOIN + NULL(超頻出)

存在しないデータを探す

SELECT A.id
FROM A
LEFT JOIN B
ON A.id = B.id
WHERE B.id IS NULL;

→ Bに存在しないA。

18. ON と WHERE の違い(超重要)

ONに書く

LEFT JOIN B
ON A.id = B.id
AND B.type = 'X'

→ Aは全部残る。

WHEREに書く

LEFT JOIN B
ON A.id = B.id
WHERE B.type = 'X'

→ NULL行消滅。
→ INNER JOIN化しやすい。

19. 表の別名

FROM employee e

employee を e として扱う。

JOINで頻出

SELECT e.name, d.dept_name
FROM employee e
JOIN dept d
ON e.dept_id = d.id;

20. 自己結合

同じ表を2回使う。

FROM employee e1
JOIN employee e2
ON e1.manager_id = e2.id

21. DISTINCT

意味

重複削除。

SELECT DISTINCT dept
FROM employee;

22. DISTINCT と GROUP BY

SELECT DISTINCT dept
FROM employee;

SELECT dept
FROM employee
GROUP BY dept;

は似た結果。

機能 意味
DISTINCT 重複削除
GROUP BY 集約前提

23. 副問い合わせ

SQLの中にSQLを書く

単一行副問い合わせ

SELECT name
FROM employee
WHERE score >= (
    SELECT AVG(score)
    FROM employee
);

複数行副問い合わせ

SELECT name
FROM employee
WHERE dept_id IN (
    SELECT id
    FROM dept
);

24. EXISTS

意味

存在確認。

WHERE EXISTS (
    SELECT *
    FROM B
)

25. EXISTS と IN の違い

演算子 特徴
IN 値比較
EXISTS 存在確認

26. CASE式

if文みたいな分岐

CASE
    WHEN score >= 80 THEN 'A'
    WHEN score >= 60 THEN 'B'
    ELSE 'C'
END

27. UNION

結果を縦結合

SELECT name FROM A
UNION
SELECT name FROM B

28. INSERT

INSERT INTO employee(id, name)
VALUES(1, '田中');

29. UPDATE

UPDATE employee
SET salary = 300000
WHERE id = 1;

超危険

WHERE忘れると全更新。

30. DELETE

DELETE FROM employee
WHERE id = 1;

超危険

WHERE忘れると全削除。

31. AP頻出読み替え辞典

問題文 疑うもの
〜ごと GROUP BY
平均以上 副問い合わせ
存在しない LEFT JOIN + NULL
件数 COUNT(*)
並び替え ORDER BY
条件で絞る WHERE
重複除去 DISTINCT
存在する EXISTS
該当なしも含む LEFT JOIN

32. AP超頻出ひっかけ

LEFT JOIN後のWHERE

FROM A
LEFT JOIN B
ON A.id = B.id
WHERE B.id IS NOT NULL

→ INNER JOINっぽくなる。

LEFT JOINの意味が薄れる。

33. 最低限覚えるテンプレ

JOIN

SELECT *
FROM A
JOIN B
ON A.id = B.id;

GROUP BY

SELECT dept, AVG(score)
FROM test
GROUP BY dept;

HAVING

HAVING AVG(score) >= 70

副問い合わせ

WHERE score >= (
    SELECT AVG(score)
    FROM test
)

34. AP対策コツ

  • SELECTよりFROMから読む
  • 実行順序を常に意識
  • 「〜ごと」→ GROUP BY
  • 「存在しない」→ LEFT JOIN + NULL
  • GROUP BY時のSELECT制限注意
  • NULL関連を最優先警戒
  • JOIN後の件数変化を見る
  • WHEREとHAVINGを混同しない
  • LEFT JOIN後のWHEREに注意

35. 優先順位

最優先

  1. JOIN
  2. GROUP BY
  3. HAVING
  4. 副問い合わせ
  5. NULL

次点

  • CASE
  • DISTINCT
  • ORDER BY
  • EXISTS
  • UPDATE / DELETE
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?