🖥️ Microsoft Access でSQLを使おう
📊

AccessはSQLを「見える化」してくれるアプリ

AccessはSQLを直接書かなくても、マウスで操作できる デザインビュー でクエリが作れる。そして SQLビュー に切り替えると、自分が作ったクエリがSQL文として表示される。
「マウスで作る → SQLを見て学ぶ」の繰り返しで自然にSQLが身につくよ!

📋 デザインビュー:マウス操作でクエリ作成 💻 SQLビュー:SQL文を直接確認・編集 ▶️ 実行ボタン:クエリを実行して結果確認 ⚠️ Accessの * は標準SQLと少し違う(ワイルドカード)
🔄 Accessでクエリを作る手順
1
📂
クエリを新規作成
「作成」タブ→「クエリデザイン」をクリック
2
🖱️
デザインビューで操作
テーブルを追加して、使いたい列をチェック
3
💻
SQLビューに切替
「表示」→「SQLビュー」でSQL文を確認・編集
4
▶️
実行して確認
赤い「!」ボタンを押してクエリを実行
5
💾
保存
クエリに名前をつけて保存しておくと次回も使える
🗃️ テーブルってなに?
#
ID
名前
レベル
職業
1
1
アレックス
20
魔法剣士
2
2
竜騎士リナ
35
騎士
3
3
炎の魔法使い
28
魔法使い
4
4
弓使いサラ
15
弓使い
← 横の1行を レコード、縦の1列を カラム(列)、表全体を テーブル と呼ぶよ!
🔄 SQLの実行の流れ
SELECT
列を選ぶ
FROM
テーブル指定
WHERE
条件で絞る
GROUP BY
グループ化
HAVING
集計後絞る
ORDER BY
並び替え
✨ コマンド図鑑(Access対応版)
📥 SELECT / FROM
データを取り出す
テーブルから列を選んで取り出す、SQLの基本のキ。* で全列取得!
SELECT 名前, レベル
FROM キャラ;
-- 全列取得するなら
SELECT * FROM キャラ;
Accessでの操作
デザインビューでテーブルを追加し、使いたい列のチェックボックスをONにすると自動でSELECT文が作られる。SQLビューで確認できる。
SELECTFROM*
🔍 WHERE
条件で絞り込む
ほしいデータだけを取り出す条件指定。AND / OR で複数条件も組み合わせられる。
SELECT 名前 FROM キャラ
WHERE レベル >= 10
AND 職業 = '魔法使い';
Accessでの操作
デザインビューの「抽出条件」欄に条件を入力するだけでOK。複数列に条件を入れるとAND扱いになる。
WHERE>=ANDOR
↕️ ORDER BY / TOP
並び替えと件数絞り
ASC で昇順(小→大)、DESC で降順(大→小)。TOP N で上位N件だけ表示。
SELECT TOP 3 名前
FROM キャラ
ORDER BY レベル DESC;
Accessでの操作
デザインビューの「並べ替え」欄で昇順・降順を選択できる。件数指定はSQLビューで TOP を追加する。
Access固有の注意
標準SQLの LIMIT は使えない。Accessでは TOP N を使う。
ORDER BYASCDESCTOP
🔎 LIKE
あいまい検索
名前がうろ覚えでも大丈夫!ワイルドカードが何文字でも代わりに探してくれる。
WHERE 名前 LIKE '竜*' -- 竜で始まる
WHERE 名前 LIKE '*騎士' -- 騎士で終わる
WHERE 名前 LIKE '*炎*' -- 炎を含む
Access固有の注意
Accessのワイルドカードは *。標準SQLの % は使えないので注意!
Accessでの操作
デザインビューの「抽出条件」欄に Like "竜*" と入力するだけでOK。
LIKE*(Accessのワイルドカード)
✏️ INSERT / UPDATE / DELETE
データを追加・更新・削除
データを変更する3兄弟。UPDATE と DELETE は WHERE を忘れると全データが変わるから要注意!
-- 追加
INSERT INTO キャラ (名前, レベル)
VALUES ('アレックス', 1);
-- 更新
UPDATE キャラ SET レベル = 15
WHERE 名前 = 'アレックス';
-- 削除
DELETE FROM キャラ
WHERE 名前 = 'アレックス';
Accessでの操作
「作成」→「クエリデザイン」→「クエリの種類」から「追加」「更新」「削除」を選ぶ。これらをアクションクエリと呼ぶ。実行前に確認ダイアログが出るよ。
INSERT INTOVALUESUPDATESETDELETE
📊 集計関数
数字をまとめる5兄弟
COUNT で個数、SUM で合計、AVG で平均、MAX / MIN で最大・最小。
SELECT
  COUNT(*) -- 全件数
  SUM(レベル) -- レベル合計
  AVG(レベル) -- 平均レベル
  MAX(レベル) -- 最高レベル
  MIN(攻撃力) -- 最低攻撃力
FROM キャラ;
Accessでの操作
デザインビューで「集計」ボタン(Σ)をクリックすると「集計」行が現れる。列ごとにSUM・AVG・COUNTなどをドロップダウンで選べる。
COUNTSUMAVGMAXMIN
🗂️ GROUP BY / HAVING
グループ化して集計
職業ごと・クラスごとに集計したいときに使う。HAVING は GROUP BY のあとに絞る条件。
SELECT 職業, COUNT(*) AS 人数
FROM キャラ
GROUP BY 職業
HAVING COUNT(*) >= 3;
Accessでの操作
集計ボタン(Σ)を押して、グループ化したい列を「グループ化」、集計したい列をSUM/COUNTに設定。HAVINGはSQLビューで追記するのが確実。
GROUP BYHAVINGAS
🔗 JOIN
テーブルをつなぐ
INNER JOIN は両方に存在するデータだけ。LEFT JOIN はキャラ全員+アイテム未所持でも表示できる。
SELECT キャラ.名前, アイテム.名前
FROM キャラ
INNER JOIN アイテム
  ON キャラ.アイテムID = アイテム.ID;
Accessでの操作
「リレーションシップ」画面でテーブル同士をIDで結んでおくと、デザインビューで自動的にJOINが設定される。結合線をダブルクリックするとINNER/LEFT/RIGHTを切り替えられる。
INNER JOINLEFT JOINON
🪆 サブクエリ
SELECT の中に SELECT
カッコの中のSELECTを先に計算して、その結果を外側に渡す入れ子構造のまほう。
SELECT 名前 FROM キャラ
WHERE レベル > (
  SELECT AVG(レベル)
  FROM キャラ
);
-- 平均より強いキャラを取得
Accessでの操作
サブクエリはデザインビューでは設定できない。SQLビューに直接入力する必要があるよ。
サブクエリ( SELECT )
🏗️ CREATE TABLE
テーブルを設計・作成
データの入れ物を新しく作る。PRIMARY KEY で主キー設定、NOT NULL で空欄を禁止できる。
CREATE TABLE モンスター (
  ID       INTEGER PRIMARY KEY,
  名前     TEXT    NOT NULL,
  攻撃力   INTEGER,
  出現場所 TEXT
);
Accessでの操作
「作成」→「テーブルデザイン」で列名・データ型・主キーをGUIで設定できる。SQLを書かなくても同じテーブルが作れる。
CREATE TABLEPRIMARY KEYNOT NULL
🌟 便利コマンド集
DISTINCT / IS NULL / BETWEEN / IN
知っておくと絶対便利な4つの仕上げコマンド。
SELECT DISTINCT 職業 FROM キャラ;
-- 重複なし一覧

WHERE 出現場所 IS NULL;
-- 空欄を探す

WHERE レベル BETWEEN 5 AND 10;
-- 範囲で絞る

WHERE 職業 IN ('戦士', '魔法使い');
-- どれかに一致
Accessでの操作
DISTINCT はSQLビューで追加。IS NULL・BETWEEN・IN はデザインビューの抽出条件欄にそのまま書ける。例:Between 5 And 10
DISTINCTIS NULLBETWEENIN
⚠️ 気をつけて! & 豆知識
🚨
WHERE を忘れずに!
UPDATE や DELETE で WHERE を書かないと、テーブルの全データが変わったり消えたりしちゃう。Accessはアクションクエリ実行前に確認ダイアログが出るけど、必ず確認してから実行してね!
DELETE FROM キャラ;
← 全データ消滅!
⚠️
AccessはLIMITではなくTOP
Accessではワイルドカードが *(他のDBは%)、件数制限が TOP N(他のDBはLIMIT)と違う。将来MySQL等に移るときに「あれ?」ってなるから覚えておいて。
Access:LIKE '竜*' / SELECT TOP 3
標準SQL:LIKE '竜%' / LIMIT 3
💡
WHERE vs HAVING の違い
WHERE は集計する前に絞り込む。HAVING は GROUP BY で集計したあとに絞り込む。順番が大事!Accessでは HAVING はSQLビューで書くのが確実。
WHERE → 集計前に絞る
HAVING → 集計後に絞る
デザインビュー ↔ SQLビューを使いこなそう
操作に迷ったらデザインビューで作って、SQLビューでSQLを確認する。逆にSQLを書いてデザインビューで見た目を確かめてもOK。両方を行き来するのが上達の近道!
デザインビュー → マウスで直感操作
SQLビュー → SQL文で細かく調整

🎵 SQL Complete Song

~ データのまほう ~

Verse 1 — SELECT / FROM
キャラのテーブルをのぞいてみよ
SELECT 名前, レベル FROM キャラ
名前とレベルだけ取り出して
全部ほしいなら SELECT * ね
FROM のあとはテーブルの名前
どこから取るかを教えてあげて
SELECT * FROM アイテム
アイテム全部でておいで♪
Verse 2 — WHERE
全部じゃなくて絞りたいな
WHERE レベル >= 10
レベル10以上のコだけよんで
ずらっと並んででてきたよ
文字で絞るなら WHERE 職業 = '魔法使い'
クォーテーション忘れないでね
AND で条件をかさねれば
WHERE レベル >= 10 AND 職業 = '魔法使い'
Verse 3 — ORDER BY / TOP
並び替えたいなら ORDER BY
ORDER BY レベル ASC で低い順
ORDER BY レベル DESC で高い順
昇順降順うまく使い分けて
上位だけみたいなら TOP
SELECT TOP 3 名前 FROM キャラ ORDER BY レベル DESC
レベル高いコベスト3
たった1行でかわいく完成♪
Chorus
決めてあげる WHERE で絞って
見つけてあげる SELECT の目で
並べてあげる ORDER BY でそっと
私があなたのデータをあやつる
SQL それが私のことば
まほうじゃない ロジックの力
ラ ラ ラ データを支配して
ラ ラ ラ 世界を手に入れろ
Verse 4 — LIKE
名前うろ覚えでも大丈夫
WHERE 名前 LIKE '竜*'
竜からはじまる名前全部
ワイルドカード * が代わりに探してくれるよ
うしろがわからないなら '*騎士'
どちらもわからないなら '*騎士*'
WHERE 説明 LIKE '*炎*'
炎が含まれるアイテムおいで
Verse 5 — INSERT INTO
新しいキャラを追加したいな
INSERT INTO キャラ (名前, レベル, 職業)
VALUES ('アレックス', 1, '戦士')
新人ちゃんが仲間になったよ
複数の列をまとめて指定して
VALUES に値をならべるだけ
順番まちがえるとデータがズレるから
列名と値の順番をあわせてね
Verse 6 — UPDATE
レベルアップしたから更新しよ
UPDATE キャラ SET レベル = 15
WHERE 名前 = 'アレックス'
WHERE を忘れたらみんな書きかわっちゃう
気をつけて!WHERE は大切ないのちづな
SET 職業 = '魔法剣士', レベル = 20
複数の列を同時に変えるときは
カンマで区切ってならべればOK♪
Chorus
決めてあげる WHERE で絞って
見つけてあげる SELECT の目で
並べてあげる ORDER BY でそっと
私があなたのデータをあやつる
SQL それが私のことば
まほうじゃない ロジックの力
ラ ラ ラ データを支配して
ラ ラ ラ 世界を手に入れろ
Verse 7 — DELETE
引退したキャラをお別れしよう
DELETE FROM キャラ
WHERE 名前 = 'アレックス'
これでアレックスさようなら
でも WHERE を忘れないでね
DELETE FROM キャラ だけ書いたら
テーブルのデータが全部きえちゃう
後悔しても戻らないから気をつけて
Verse 8 — COUNT / SUM / AVG
何人いるか数えたいな
SELECT COUNT(*) FROM キャラ
全キャラの数がでてきたよ
COUNT はレコードを数えてくれる関数ちゃん
レベルの合計は SUM
SELECT SUM(レベル) FROM キャラ
平均レベルは AVG
SELECT AVG(レベル) FROM キャラ
Verse 9 — MAX / MIN
最強キャラを探したいな
SELECT MAX(レベル) FROM キャラ
最高レベルの数字がでてきたよ
名前も知りたいな、もっと教えて
最弱を探すなら MIN
SELECT MIN(攻撃力) FROM キャラ
MAX MIN COUNT SUM AVG
この5つで集計はばっちりよ♪
Chorus
決めてあげる WHERE で絞って
見つけてあげる SELECT の目で
並べてあげる ORDER BY でそっと
私があなたのデータをあやつる
SQL それが私のことば
まほうじゃない ロジックの力
ラ ラ ラ データを支配して
ラ ラ ラ 世界を手に入れろ
Verse 10 — GROUP BY
職業ごとに人数が知りたいな
SELECT 職業, COUNT(*) FROM キャラ
GROUP BY 職業
戦士が5人、魔法使いが3人
グループにまとめてすっきり整理
SELECT 職業, AVG(レベル) FROM キャラ
GROUP BY 職業
職業ごとの平均レベルもでてきたよ
Verse 11 — HAVING
GROUP BY のあとに絞りたいときは
WHERE じゃなくて HAVING を使ってね
SELECT 職業, COUNT(*) FROM キャラ
GROUP BY 職業 HAVING COUNT(*) >= 3
3人以上いる職業だけ表示されたよ
集計したあとの条件は HAVING
WHERE は集計前 HAVING は集計後
この違いをしっかり覚えておいてね♪
Verse 12 — JOIN
キャラテーブルとアイテムテーブル
バラバラだと使いにくいよね
SELECT キャラ.名前, アイテム.名前
FROM キャラ INNER JOIN アイテム
ON キャラ.アイテムID = アイテム.ID
ID をキーにして2つがつながったよ
LEFT JOIN ならアイテム未所持でも
キャラは全員表示されるの
Chorus
決めてあげる WHERE で絞って
見つけてあげる SELECT の目で
並べてあげる ORDER BY でそっと
私があなたのデータをあやつる
SQL それが私のことば
まほうじゃない ロジックの力
ラ ラ ラ データを支配して
ラ ラ ラ 世界を手に入れろ
Verse 13 — サブクエリ
平均より強いキャラを探したいな
SELECT 名前 FROM キャラ
WHERE レベル > (SELECT AVG(レベル) FROM キャラ)
SELECT の中に SELECT がはいったよ
これがサブクエリ、入れ子のまほう
カッコの中を先に計算して
その結果を外側にそっとわたすの
複雑な問いも1行で解決ね♪
Verse 14 — CREATE TABLE / PRIMARY KEY
新しいテーブルをお部屋ごとつくるよ
CREATE TABLE モンスター (
  ID INTEGER PRIMARY KEY,
  名前 TEXT NOT NULL,
  攻撃力 INTEGER,
  出現場所 TEXT)
PRIMARY KEY は ID にセットして
NOT NULL で空欄は NGよ
Verse 15 — DISTINCT / IS NULL / BETWEEN / IN / AS
重複なしで職業一覧
SELECT DISTINCT 職業 FROM キャラ
空欄データを見つけたいなら
WHERE 出現場所 IS NULL
レベル5から10のコたちは
WHERE レベル BETWEEN 5 AND 10
戦士か魔法使いか弓使いか
WHERE 職業 IN ('戦士', '魔法使い', '弓使い')
Chorus
決めてあげる WHERE で絞って
見つけてあげる SELECT の目で
並べてあげる ORDER BY でそっと
私があなたのデータをあやつる
SQL それが私のことば
まほうじゃない ロジックの力
ラ ラ ラ データを支配して
ラ ラ ラ 世界を手に入れろ
Final Chorus
SELECT FROM WHERE データを取り出して
INSERT UPDATE DELETE 自在に動かして
COUNT SUM AVG MAX MIN 数字を制圧
GROUP BY HAVING JOIN テーブルをつなげて
CREATE TABLE PRIMARY KEY 土台をしっかり
DISTINCT NULL BETWEEN IN AS 仕上げのひとおし
これが全部私のことば
SQL 私たちの力
ラ ラ ラ データを支配して
ラ ラ ラ 世界を手に入れろ