教材ライブラリ

授業で使うスライド、触って動かせる図解、レッスンの導入スライドをまとめています。 左のリストで絞り込むか、キーワードで検索してください。

17 件(合計 78 枚)

5 枚

Linux入門 - ping で遅延を測る

ping で遅延を測る

ping は相手に小さなデータを送って、返ってくるまでの時間を測るコマンドです。返ってきた時間 (RTT) は、相手のおおまかな遠さの目安になります。

この time= の数字が何で決まるのかを、このあとの2つの図解で自分で確かめます。

ping を打つと、1 往復ごとにこの 1 行が返ってきます。

64 bytes from 10.0.0.1: time=1.2 ms

1 / 5

Linux入門 - ping で遅延を測る

近いところを測る

3か所を順に押して、往復時間の伸び方を見てください。

  • 同じ建物の中でも 0 にはならない。機器を通るぶんの時間が必ず乗る
  • 距離が10倍でも時間は10倍にならない。固定の下駄があるぶん、伸び方はゆるい

2 / 5

考えてみよう外しても進めます

アメリカ西海岸までの往復は何 ms くらいだと思いますか。

当ててから次の枚で確かめると、答えが記憶に残ります。

3 / 5

Linux入門 - ping で遅延を測る

遠いところを測る

2か所を押して、近いところとの桁の違いを見てください。

  • 国内が 1〜10 ms なのに対し、海をまたぐと 100 ms 台に跳ねる
  • 光が海底ケーブルを往復する時間そのものなので、機材を替えても縮まない

4 / 5

Linux入門 - ping で遅延を測る

測った結果

5か所の往復時間を並べると、距離が伸びるほど往復時間も伸びるのが分かります。近いところでも 0 にならないのは、機器を通るぶんの固定の下駄があるからです。

サイトが遅いときは、相手が遠いか経路が混んでいるかを疑います。

距離往復時間
同じ建物 (約 50 m)0.38 ms
東京 (約 40 km)1.2 ms
大阪 (約 400 km)9.0 ms
アメリカ西海岸 (約 8,000 km)105 ms
地球の裏側 (約 20,000 km)242 ms

5 / 5

SQL入門 - ファイルではなくデータベースを使う理由

保存するだけならファイルでもできる

在庫数をテキストファイルに書いておけば、たしかに保存はできます。それでも業務システムがデータベースを使うのは、保存できるかどうかとは別の理由があるからです。

1人で使っているうちは、この方法で何の問題も起きません。問題が出るのは2人目からです。

在庫数を書いたファイルを開くと、中身はこれだけです。

$ cat stock.txt 100

1 / 3

SQL入門 - ファイルではなくデータベースを使う理由

2人が同時に直すとどうなるか

手順を最後まで送って、ファイルと DBMS の結果を見比べてください。

  • 2人とも古い 100 を読んでから書くので、あとに書いたほうで上書きされる
  • エラーは出ない。消えたことに誰も気づかないまま話が進む
  • DBMS は読んだ行に鍵をかけて、片方を待たせることでこれを防ぐ

2 / 3

SQL入門 - ファイルではなくデータベースを使う理由

DBMS が肩代わりしていること

同時に触られたときの整理は、その一部にすぎません。自分で書くと大変なものを、DBMS があらかじめ引き受けてくれています。

この表の右側を扱う言葉が SQL です。次のレッスンから、その書き方に入ります。

ファイルだと自分でやることDBMS がやってくれること
同時に書かれたときの順番付け行に鍵をかけて待たせる
途中で落ちたときの巻き戻しトランザクション
変な値が入らないようにする型と制約
大量の行から目的の行を探すインデックス
誰がどこまで見てよいか権限

3 / 3

SQL入門 - なぜ表を分けて持つのか

1つの表に全部書いてみる

注文を記録する表に、ついでに顧客名とメールも書いておけば、その表を見るだけで済みます。実際に書いてみると、同じ人が2回目の注文をした時点で困りごとが出てきます。

同じメールが2行に書かれています。3回目、4回目と注文が増えたらどうなるかを、次の枚で見てください。

田中さんが 2 回注文すると、表はこうなります。

注文ID 顧客名 メール 金額 1001 田中 tanaka@x.com 2500 1003 田中 tanaka@x.com 1300

1 / 4

SQL入門 - なぜ表を分けて持つのか

1つの表に詰め込むと何が起きるか

トグルを入れて、同じメールが何か所に出るかを数えてください。

  • 混ぜたままだと、メールを直すのに注文の行数だけ直すことになる
  • 1行でも直し忘れると、同じ人なのに違うメールが記録として残る
  • 分けておけば直す場所は1か所。注文の側には顧客IDだけが残る

2 / 4

考えてみよう外しても進めます

顧客の表と注文の表を分けたあと、注文の 顧客ID に customers に存在しない番号を書いたらどうなると思いますか。

当ててから次の枚で確かめると、答えが記憶に残ります。

3 / 4

SQL入門 - なぜ表を分けて持つのか

分けた表をつなぐ2つの列

表を分けると、行どうしのつながりを列で表すことになります。そのために決まった役割を持つ列が2つあります。

customers.顧客ID が主キー、orders.顧客ID が外部キーです。この2つをたどって表をつなぎ直すのが、あとで出てくる JOIN です。

呼び方役割
主キーその表の中で1行を一意に指す列
外部キー別の表の主キーを指す列

4 / 4

データベースの仕組み

データベースは、こういう表の形でデータを持っています。この表そのものをテーブルと呼び、縦の列をカラム、横の行をレコードと呼びます。

products

商品ID商品名価格
10001商品A2500
10002商品B1000
10003商品C1300

縦に見れば商品IDだけが並び、横に見れば商品1件ぶんがまとまっています。

データベースが持つ表は1枚だけではありません。顧客の表、注文の表と、用途ごとに何枚も抱えています。

1 / 5

SQL入門 - テーブル・行・列の基本

表のどこを何と呼ぶか

ボタンを押して、表のどこを指す言葉なのかを見てください。

  • 縦の並びが列。商品ID なら商品ID だけ、価格なら価格だけが入る
  • 横の並びが行。商品1件ぶんの情報がここにまとまっている
  • この表そのものがテーブル。データベースは表を何枚も持っている

2 / 5

SQL入門 - テーブル・行・列の基本

同じものに呼び方が2つある

現場では日本語と英語が混ざって飛んできます。指しているものは同じなので、対応だけ先に押さえておくと、あとの話が全部読めるようになります。

SQL は結局、この表から行を選び、列を選ぶだけの言葉です。

現場で聞く言い方同じものを指す言葉
テーブル表 / relation
カラム / column / 項目
レコード / row / 1件
セル1行1列が交わったところの値

3 / 5

列には型が決まっている

表を作るときに、列ごとに「ここには何が入るか」を先に宣言します。決めておくと、価格の列に文字を入れようとした時点で DBMS が断ってくれます。

CREATE TABLE products (
表の名前
id INT,
name VARCHAR(50),
列の名前と型
price INT
)

products

idnameprice
10001商品A2500
10002商品B1000
10003商品C1300

宣言した3つの列に沿って、行が積み上がっていきます。

囲った1行が1レコード。商品C という1件ぶんの情報が横一列に並んでいます。

4 / 5

考えてみよう外しても進めます

products の表から「価格が 2000 円以上の商品」を出したいとき、選んでいるのは行と列のどちらですか。

当ててから次の枚で確かめると、答えが記憶に残ります。

5 / 5

4 枚

SQL入門 - SQL とクエリ

クエリを送ると何が起きるか

1手ずつ送って、行きに何が動き、帰りに何が動くのかを見てください。

  • 行きに運ぶのは文だけ。データはまだ1件も動いていない
  • 探すのはデータベース側。どう探すかは書かなくてよい
  • 帰りに返ってくるのも表。だから行と列の話がこの先も続く

1 / 4

SQL はデータベースに話しかける言葉

この「持ってこい」と伝える1行をクエリと呼びます。SQL は、そのクエリを書くための言葉です。

SELECT name
どの列が欲しいか
FROM purchases;
どの表から取るか

purchases

name
商品A
商品B
商品C

欲しいと書いた name の列だけが、表の形で返ってきます。

手順ではなく、欲しい結果だけを書きます。探し方を考えるのはデータベースの仕事です。

2 / 4

SQL入門 - SQL とクエリ

SELECT の最小の形

SELECT と FROM の2つが揃えば、それだけでクエリになります。まずはこの2行を手が覚えるところからです。

SELECT が列を選び、WHERE が行を選びます。表のどちら向きを選ぶ話なのかで見分けられます。

書く場所そこに書くこと
SELECT欲しい列の名前。全部なら *
FROM取ってくる表の名前
行末の ;クエリの終わり。1文ずつ区切る
WHERE行を絞る条件。次のレッスンで扱う

3 / 4

考えてみよう外しても進めます

SELECT * FROM purchases; と書いたとき、返ってくるのはどれですか。

当ててから次の枚で確かめると、答えが記憶に残ります。

4 / 4

6 枚

SQL入門 - WHERE で行を選ぶ

表は行と列でできている

ボタンを押して、表のどこを何と呼ぶのかを見てください。

  • 縦の並びが列 (カラム)。同じ種類の値が入る
  • 横の並びが行 (レコード)。商品1件ぶんの情報がまとまっている

1 / 6

WHERE で行を選ぶ

SELECT が列を選ぶのに対して、WHERE は行を選びます。条件が真になった行だけが結果に残り、偽だった行は捨てられます。

SELECT name, age
どの列を出すか
FROM users
どの表から
WHERE age >= 25
どの行を残すか

結果

nameage
佐藤28
鈴木9
田中35
高橋22
伊藤41

取り消し線の2行は条件が偽なので、結果には出てきません。

この >= 25 を動かすと結果が何行になるのかを、次の枚で自分で確かめます。

2 / 6

SQL入門 - WHERE で行を選ぶ

しきい値で行が減る

n を左右に動かして、残る行の数を見てください。

  • n を上げるほど残る行は減る。増えることはない
  • n = 0 なら全員が残る。条件が常に真になるから
  • n = 42 なら 0 行。空の結果もエラーではなく正しい答え

3 / 6

考えてみよう外しても進めます

age が数値ではなく文字列で入っていたら、age >= '25' に 9 歳は残ると思いますか。

当ててから次の枚で確かめると、答えが記憶に残ります。

4 / 6

SQL入門 - WHERE で行を選ぶ

文字列として比べると壊れる

トグルを入れて、混ざってくる行を見てください。

  • 9 歳が 25 歳以上の側に入る。"9" の先頭が "2" より大きいから
  • エラーは出ない。だから気づかないまま本番に出る
  • 列の型を数値にしておけば、この事故は起きない

5 / 6

SQL入門 - WHERE で行を選ぶ

比較演算子の早見

WHERE に書ける条件は等号だけではありません。よく使うものを先に覚えると、あとのレッスンが楽になります。

NULL だけは = で比べられません。NULL は「不明」なので、等しいかどうかも不明になるからです。

やりたいこと書き方
等しい=
等しくない<> または !=
大小< <= > >=
範囲BETWEEN a AND b
集合IN (1, 2, 3)
NULL 判定IS NULL

6 / 6

JOIN で2つの表を噛み合わせる

users には注文が入っておらず、orders には名前が入っていません。両方を1つの結果で見るために、どの行とどの行が同じものを指すのかを ON で書きます。

SELECT u.name, o.item
FROM users u
左の表
JOIN orders o
右の表
ON u.id = o.user_id
何をそろえるか

結果

nameitem
佐藤
佐藤ペン
鈴木ノート
鈴木付箋
田中

田中 は注文が1件も無いので、結果から消えます。

消えた 田中 を残したいときに LEFT JOIN を使います。このあとの図解で切り替えます。

1 / 4

考えてみよう外しても進めます

users と orders をカンマで並べて FROM に書くと、3行と4行で何行になると思いますか。

当ててから次の枚で確かめると、答えが記憶に残ります。

2 / 4

SQL入門 - INNER JOIN で表をつなぐ

つなぎ方で結果が変わる

つなぎ方を切り替えて、結果が何行になるか数えてください。

  • INNER は相手のいない 田中 が消える
  • LEFT は 田中 が残り、item に NULL が入る
  • カンマでつなぐと 3 × 4 で 12 行。線が全部と全部に引かれる

3 / 4

SQL入門 - INNER JOIN で表をつなぐ

つなぎ方の早見

JOIN の種類は「相手がいない行をどうするか」の違いだけです。先に対応を覚えておくと、あとのレッスンで迷いません。

表をカンマで並べると CROSS JOIN と同じ結果になります。JOIN の ON を書き忘れた場合はエラーで止まりますが、カンマはエラーが出ないので、行数が急に増えたら真っ先に疑う場所です。

やりたいこと書き方
両方にある行だけINNER JOIN
左を全部残すLEFT JOIN
右を全部残すRIGHT JOIN
そろえる条件ON a.x = b.y
同じ列名でつなぐUSING (id)
総当たりCROSS JOIN

4 / 4

GROUP BY で行を束ねる

WHERE が行を捨てるのに対して、GROUP BY は行を束ねます。同じ値を持つ行がひとかたまりになり、そのかたまりごとに1行が出ます。

SELECT dept, COUNT(*)
束ねたあとの計算
FROM emp
どの表から
GROUP BY dept
束ねる列

結果

deptCOUNT(*)
営業2
開発3

5行が2行になります。dept の値ごとに1行です。

行が捨てられたのではありません。営業の2行が1行に束ねられただけです。

1 / 4

考えてみよう外しても進めます

GROUP BY dept のあと、SELECT に name を足すとどうなると思いますか。

当ててから次の枚で確かめると、答えが記憶に残ります。

2 / 4

SQL入門 - GROUP BY で束ねて数える

束ねると値が1つに決まる

集計を切り替えたあと、SELECT に name を足してみてください。

  • 営業は 30 と 40 の2行が束ねられて1行になる
  • AVG に変えると営業は 35。COUNT の 2 とは別の計算
  • name を足すと、束ねた行に書ける値が無いのでエラーになる

3 / 4

SQL入門 - GROUP BY で束ねて数える

集計の早見

束ねたかたまりに対して何を計算するかを決めるのが集計関数です。よく使うものと、絞り込みの書き分けを先に押さえます。

WHERE は束ねる前、HAVING は束ねたあとに効きます。「平均が 40 以上の部署だけ」は WHERE では書けません。

やりたいこと書き方
行数COUNT(*)
合計SUM(salary)
平均AVG(salary)
最大 / 最小MAX(salary) / MIN(salary)
束ねる前の絞り込みWHERE
束ねたあとの絞り込みHAVING

4 / 4

4 枚

NULL は値が無いのではなく不明

NULL は空文字でも 0 でもありません。「分からない」という状態です。分からない値と何かを比べても、答えはやはり分かりません。

SELECT name, email
FROM users
どの表から
WHERE email = NULL
ここが罠

結果

nameemail
佐藤a@example.com
鈴木NULL
田中b@example.com
加藤NULL

1行も返りません。エラーも出ません。

= NULL は必ず 0 行になります。NULL の行すら返らないのが、いちばん引っかかる点です。

1 / 4

考えてみよう外しても進めます

WHERE email != 'a@example.com' は、この4行のうち何行を返すと思いますか。

当ててから次の枚で確かめると、答えが記憶に残ります。

2 / 4

SQL入門 - NULL の扱い

真でも偽でもない

条件を切り替えて、返る行数がどう変わるか見てください。

  • = NULL は 0 行。IS NULL なら 鈴木 と 加藤 の2行
  • != でも NULL の行は返らない。「違う」も判定できない
  • 真・偽のほかに「不明」がある、と考えると筋が通る

3 / 4

SQL入門 - NULL の扱い

NULL の扱い早見

比較演算子は NULL に効きません。NULL を相手にするときは、専用の書き方に切り替えます。

この4行なら COUNT(*) は 4、COUNT(email) は 2 になります。COUNT が2種類あるのではなく、集計関数が NULL を数えないからです。

やりたいこと書き方
NULL かどうかIS NULL
NULL でないかIS NOT NULL
NULL を別の値にCOALESCE(email, '未登録')
NULL を数えないCOUNT(email)
全行を数えるCOUNT(*)

4 / 4

SQL入門 - INSERT で行を追加する

列と値は前から順に対応する

3つの場合を切り替えて、どこで対応が崩れるか見てください。

  • INSERT で書くのは、表の名前と、列の並びと、値の並びの3つ
  • 列と値は前から順に1対1で結ばれる
  • 数が合わない文は、実行される前に弾かれる

1 / 5

SQL入門 - INSERT で行を追加する

作成ボタンの先で動いているもの

画面から見ると「作成する」を押しただけですが、その裏では3つの場所を順番に通っています。SQL が出てくるのは3番目です。

このレッスンで書くのは3行目です。画面もサーバーも、最後はこの1文にたどり着きます。

どこで起きることそこで何をしているか
フロントエンド入力された値をサーバーへ送る
サーバーサイド受け取った値で INSERT 文を組み立てる
データベース表に行を1本増やす
フロントエンド返ってきた一覧を描き直す

2 / 5

どの表のどの列に、何を入れるか

INSERT は3つの部品でできています。表の名前、値を入れる列の名前、そして入れる値です。

INSERT INTO memos (name)
どの表に足すか
値を入れる列
VALUES ('とまと')
入れる値

memos

idname
1じゃがいも
2にんじん
3たまねぎ
4とまと

囲った行が増えた1本です。id は自動で採番されるので、書いていません。

列の並びと値の並びは前から順に対応します。数が合わないとエラーになります。

3 / 5

SQL入門 - INSERT で行を追加する

ここでつまずく

INSERT は形が単純なぶん、間違いもいつも同じところに出ます。

エラーで止まるのはむしろ助かる側です。黙って入ってしまう間違いのほうが、あとで探すのに苦労します。

書いたことどうなるか
列名をまるごと省く全部の列に値を並べる約束になる
文字列を裸で書く列の名前だと解釈されてエラー
値の数が列より多い実行されずにエラー
id を自分で書く自動採番とぶつかることがある

4 / 5

考えてみよう外しても進めます

memos の表に3行入っている状態で、同じ INSERT 文を2回実行するとどうなりますか。

当ててから次の枚で確かめると、答えが記憶に残ります。

5 / 5

SQL入門 - UPDATE で行を書き換える

WHERE が決めるのは範囲

WHERE の行を外して、書き換わる行がどこまで広がるか見てください。

  • UPDATE は、何に書き換えるかの SET と、どれを書き換えるかの WHERE でできている
  • WHERE を省いた文はエラーにならない。表の全行が同じ値になって正常に終わる
  • 書く前に同じ条件で SELECT を流し、返ってきた行数を見るのが現場の手順

1 / 5

SQL入門 - UPDATE で行を書き換える

作成との違いは、どの行かを送ること

編集画面で直して送ったあとに通る場所は、作成のときと同じ3つです。違うのは、送るものと、データベースでやることの2点だけです。

「どの行か」を送っている点が作成との差です。これが文の中では WHERE になります。

INSERT のときUPDATE のとき
値だけを送る値と、どの行かを一緒に送る
表に行が1本増える既にある行の値が書き換わる
対象は新しい行対象は WHERE で選んだ行

2 / 5

SET が新しい値、WHERE が対象の行

UPDATE は2つの役割に分かれています。何に書き換えるかが SET、どれを書き換えるかが WHERE です。

UPDATE memos
SET name = 'とまと'
新しい値
WHERE id = 3
書き換える行

memos

idname
1じゃがいも
2にんじん
3とまと

3行目だけが書き換わりました。他の行には触れていません。

SET は列ごとにカンマで並べられます。触れなかった列の値はそのまま残ります。

3 / 5

WHERE を書き忘れると全行が変わる

UPDATE の WHERE は省略できます。省略した文はエラーになりません。表の全行が同じ値に書き換わったうえで、正常終了します。

UPDATE memos
対象は表そのもの
SET name = 'とまと'

memos

idname
1とまと
2とまと
3とまと

3行とも同じ値になりました。元の値はもう表のどこにも残っていません。

書く前に同じ条件で SELECT を流し、返ってきた行数を見てから UPDATE に直すのが、現場で使われている手順です。

4 / 5

考えてみよう外しても進めます

UPDATE memos SET name = 'とまと' WHERE id = 99; を、id が 99 の行が無い表に実行するとどうなりますか。

当ててから次の枚で確かめると、答えが記憶に残ります。

5 / 5

SQL入門 - DELETE で行を消す

消える単位は文で変わる

3つの文を切り替えて、消える単位がどう変わるか見てください。

  • DELETE が消すのは行。WHERE で選んだぶんだけ表から無くなる
  • WHERE を省くと全行が消える。それでもエラーにはならない
  • DROP TABLE が消すのは表そのもの。列の名前も一緒に消える

1 / 5

SQL入門 - DELETE で行を消す

更新との違いは、戻せないこと

通る場所は作成や更新と同じです。違うのは、送るものが減ることと、やり直しが効かないことの2点です。

消えた行は SELECT で探しても出てきません。だから消す前に、本当に消すのかを決めておきます。

UPDATE のときDELETE のとき
新しい値を送る値は要らない。どの行かだけを送る
行は表に残る行が表から取り除かれる
書き戻せば元に戻る戻せるのはバックアップからだけ

2 / 5

DELETE には SET が無い

消すのに新しい値は要らないので、DELETE にあるのは「どの表か」と「どの行か」の2つだけです。

DELETE FROM memos
どの表から
WHERE id = 3
消す行

memos

idname
1じゃがいも
2にんじん

3行目が表から消えました。id の 3 が空くだけで、下の行が繰り上がることはありません。

列を消すのは DELETE ではありません。あれは表の形を変える話なので ALTER TABLE の仕事です。

3 / 5

SQL入門 - DELETE で行を消す

消す前に決めておくこと

業務のデータは、消すと困るものが混ざっています。本当に取り除くのか、消えたことにするだけなのかを先に決めます。

削除フラグのやり方を論理削除と呼びます。表からは消えないので、以降の SELECT では毎回そのフラグで絞ることになります。

やり方向いている場面
DELETE で本当に消す作業中の下書きなど、残す価値が無いもの
削除フラグを立てる注文履歴など、あとから見返すもの
WHERE を省く無い。全行が消える
TRUNCATE を使う表を空にすると決めているとき

4 / 5

考えてみよう外しても進めます

注文履歴の表から、退会した人の注文を DELETE で消しました。困るのはどれですか。

当ててから次の枚で確かめると、答えが記憶に残ります。

5 / 5

SQL入門

第1正規形

5 枚

SQL入門 - 第1正規形

第1正規形とは

トグルを入れて、空いていたセルに何が入るか見てください。

  • 第1正規形とは、1つのセルに1つの値だけを持たせるというルール
  • 変わるのは3行目だけ。空いていた注文日が埋まる
  • 埋めたあとは、どの行も単体で何の注文か分かる

1 / 5

空欄は「上と同じ」ではない

1/13 の注文は商品が2つあるので、注文日の欄を空けたまま商品名だけを下に足しています。ここが後で効いてきます。

注文(非正規形)

注文日注文元商品名
2025/1/12XXX商品A
2025/1/13YYY商品A
YYY商品B
2025/1/15ZZZ商品C

囲った行には注文日がありません。人は上の続きだと読めますが、DBMS は読めません。

空欄は「上と同じ」という意味を持ちません。ただ値が無い行として扱われます。

2 / 5

行に分けて、どのセルにも値を入れる

第1正規形とは、1つのセルに1つの値だけを持たせるというルールです。まとめて書いていたところを行に分けて、空いていた欄を埋めます。

注文(第1正規形)

注文日注文元商品名
2025/1/12XXX商品A
2025/1/13YYY商品A
2025/1/13YYY商品B
2025/1/15ZZZ商品C

空いていた注文日と注文元が埋まりました。1行だけを見て、それが何の注文なのか分かります。

同じ日付が2回出てくるのは、この段階では正しい姿です。重複そのものを減らすのは第2正規形から先の話になります。

3 / 5

SQL入門 - 第1正規形

分けると何ができるようになるか

1行が1件として独立すると、SQL の基本的な操作がそのまま効くようになります。

どれも SQL が苦手なのではなく、表の持ち方が SQL の前提から外れているだけです。

やりたいこと非正規形だとどうなるか
1/13 の注文を全部出す空欄の行が条件に当たらず、取りこぼす
注文の件数を数える行の数と件数が一致しない
商品Bを買った人を出す注文元は取れるが注文日が取れない
注文日で並べ替える空欄の行が離れた場所へ飛ぶ

4 / 5

考えてみよう外しても進めます

商品名の欄に「商品A、商品B」とカンマ区切りで書いた表は、第1正規形ですか。

当ててから次の枚で確かめると、答えが記憶に残ります。

5 / 5

索引は全部めくらずに飛ぶ

索引が無いと、データベースは先頭から順に読み、最悪は全行を読みます。索引は本の巻末の索引と同じで、読む場所へ直接飛べるようにする仕組みです。

SELECT * FROM users
WHERE email = 'a@example.com'
この列に索引を張る
1件を狙い撃つ

調べる回数

行数索引なし索引あり
1001007
10,00010,00014
1,000,0001,000,00020

行数が1万倍になっても、索引ありは3倍にしかなりません。

この差は行数が増えるほど開きます。100行では体感できないので、小さい表で試すと効果が分かりません。

1 / 4

考えてみよう外しても進めます

索引を増やすと、書き込みの速さはどうなると思いますか。

当ててから次の枚で確かめると、答えが記憶に残ります。

2 / 4

SQL入門 - 索引 (インデックス) はなぜ速いのか

検索は速く、書き込みは遅く

行数を増やしたあと、書き込みに切り替えてみてください。

  • 検索は行数を増やすほど差が開く。索引ありの棒はほとんど伸びない
  • 書き込みに切り替えると逆転する。索引ありのほうが遅い
  • だから「とりあえず全部の列に張る」は間違い

3 / 4

SQL入門 - 索引 (インデックス) はなぜ速いのか

張る列・張らない列

索引は速くする道具ではなく、検索と書き込みを取り引きする道具です。どちらが多い表なのかで判断します。

値の種類が少ない列に張っても効きません。男女2種類しか無い列の索引は、結局半分の行を読むことになるからです。

どんな列・表か索引
WHERE で毎回使う列張る
JOIN の ON に出る列張る
ORDER BY で並べる列張る
値の種類が少ない列張らない
書き込みが多い表張らない
行数が少ない表張らない

4 / 4

HTML/CSS入門

HTML の基本構造

5 枚

HTML/CSS入門 - HTML の基本構造

タグは飾りではなく意味付け

タグを外して、同じ文字がブラウザにどう届くか見てください。

1 / 5

1つの要素は3つの部品でできている

開始タグ、中身、終了タグの3つです。終了タグの / を書き忘れると、その先の文まで見出しの中身として読まれます。

<h1>プログラミングの世界へ</h1>
ここから見出し
ここまで見出し
<a href="https://noiman.jp">noiman</a>
リンク先を渡す属性

属性は開始タグの中にだけ書きます。終了タグには書けません。

2 / 5

HTML/CSS入門 - HTML の基本構造

ページの外枠は毎回同じ

どのページもこの形から始まります。head は設定を書く場所で画面には出ません。目に見えるものは全部 body の中です。

「書いたのに画面に出ない」の多くは、body ではなく head に置いてしまった間違いです。まず自分の書いた行がどちらにあるか見てください。

<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8" /> <title>はじめてのページ</title> </head> <body> <h1>プログラミングの世界へ</h1> </body> </html>

3 / 5

HTML/CSS入門 - HTML の基本構造

ここでつまずく

HTML のエラーは赤い文字で止まってくれません。黙って別の意味に読まれます。

文字を大きくしたいだけなら CSS の仕事です。見出しかどうかで h1 を選びます。

書いたことどう読まれるか
終了タグを書き忘れる後ろの文まで同じ要素の中身になる
見た目のために h1 を選ぶ大きいだけの見出しが増える
改行しただけで段落を分ける1つの段落として続けて表示される
全角の < を書くタグではなく文字として出る

4 / 5

考えてみよう外しても進めます

文字を大きく太くしたいという理由だけで、段落を h1 タグで囲みました。何が起きますか。

当ててから次の枚で確かめると、答えが記憶に残ります。

5 / 5

HTML/CSS入門

CSS の書き方

5 枚

HTML/CSS入門 - CSS の書き方

CSS が変えるのは並びと見た目

CSS を外して、同じ中身がどう積み上がるか見てください。

1 / 5

どれに・何を・どうする

CSS の1つの決まりは、当てる相手のセレクタと、変える項目のプロパティと、値の3つでできています。

h1 {
どれに当てるか
color: #05b45b;
何を変えるか
どう変えるか
font-size: 32px;
}

1つの決まりの終わりには必ずセミコロンを打ちます。最後の1行だけ抜けても、次の行が読まれなくなります。

2 / 5

同じ相手に2回当てたら、後ろが勝つ

CSS は上から順に読まれ、あとから来た決まりが前の決まりを上書きします。効かないと思ったスタイルは、たいてい下の行に負けています。

h1 {
color: #05b45b;
}
/* ずっと下の行 */
h1 {
color: #333333;
あとに書いたほうが残る
}

画面に出る色

書いた順color の値結果
1つめ#05b45b負ける
2つめ#333333こちらが出る

消えたのではなく、後ろの行に上書きされただけです。

タグの style 属性に書くと、この順番でいつも勝ってしまいます。CSS は別ファイルに書いて link で読み込みます。

3 / 5

HTML/CSS入門 - CSS の書き方

ここでつまずく

書いたはずのスタイルが効かないとき、原因はだいたいこの4つのどれかです。

保存し直しても変わらないときは、読み込み直しをキャッシュ無しでやってみます。

起きること何を見るか
全部当たらないlink のパスとファイル名
1つだけ当たらないセレクタの綴りと、class の . の付け忘れ
上書きされる同じ相手に当てた別の決まりが後ろにないか
直したのに変わらないブラウザが古い CSS を持っている

4 / 5

考えてみよう外しても進めます

CSS ファイルを読み込む link の行を消すと、ページはどうなりますか。

当ててから次の枚で確かめると、答えが記憶に残ります。

5 / 5

5 枚

HTML/CSS入門 - 要素の取得と変更

書き換わるのは画面だけ

1手ずつ進めて、右の画面と下のファイルのどちらが変わるか見てください。

1 / 5

取ってから変える

要素を変えるには、先にどれを変えるのかを取ってきます。取れていないものは変えられません。

const msg = document.getElementById("msg")
id で1つ取る
HTML に書いた id
msg.textContent = "ようこそ"
中の文字を差し替える

id が見つからないと null が返ります。その次の行で「null の textContent は読めない」と止まります。

2 / 5

触った1か所だけが入れ替わる

textContent に代入すると、その要素の中の文字だけが入れ替わります。まわりの要素も、もとの HTML ファイルもそのままです。

const msg = document.getElementById("msg")
msg.textContent = "ようこそ"
ここだけが入れ替わる

書き換えたあと

どこ
画面の h1はじめてのページはじめてのページ
画面の p(id は msg)こんにちはようこそ
index.html の中身こんにちはこんにちは

動いたのは1行だけです。ファイルの行は最後まで変わりません。

見た目は style を1つずつ書かず、classList.add で class を付け外しします。CSS とどちらが本当かが分からなくなります。

3 / 5

HTML/CSS入門 - 要素の取得と変更

ここでつまずく

取得できていない、という一点が形を変えて出てきます。

script は body の終わり近くに置くか、読み込み完了を待ってから動かします。

起きること原因
null になるid の綴り違い、または要素より先に script が動いた
何も起きない取った要素と、画面で見ている要素が別物
読み込むと元に戻る変えたのは画面だけで、保存はしていない
1つしか変わらないgetElementById は1つしか返さない

4 / 5

考えてみよう外しても進めます

ボタンで画面の文字を書き換えたあと、ページを読み込み直すとどうなりますか。

当ててから次の枚で確かめると、答えが記憶に残ります。

5 / 5