teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

見直し

2020/01/31 02:08

投稿

退会済みユーザー
answer CHANGED
@@ -1,3 +1,4 @@
1
+ 質問の趣旨とズレますけど、
1
2
  resテーブルのidってなんのidですか?
2
3
  resテーブル内のユニークなidを保持するためなのか、それともboard.idと紐付けるためのidなのか。
3
4
 
@@ -18,4 +19,24 @@
18
19
  INNER JOIN res ON boards.id = res.boards_id
19
20
 
20
21
  などとして連結します。
21
- こうすることで、res個別の削除はres.idを指定して簡単にできます。
22
+ こうすることで、res個別の削除はres.idを指定して簡単にできます。
23
+
24
+ ---
25
+
26
+ FROM句とJOIN句で、テーブルの結合をON句に書かれた条件で行ったものに対して、
27
+ WHERE句の条件で絞り込みを行うものです。
28
+
29
+ 例えば
30
+ ```SQL
31
+ SELECT * FROM boards, res
32
+ WHERE boards.id = res.boards_id AND boards.id = ?
33
+ ORDER BY res.res_time;
34
+ ```
35
+ のようにも書けなくもないですが、
36
+ テーブルboardsとテーブルresの全行を総当りで結合させたものの中から、
37
+ WHERE boards.id = res.boards_id AND boards.id = ?
38
+ の条件で絞り込みを行うため、得られる結果は一見同じに見えますが、
39
+ 将来テーブルの行数が何千、何万、何十万同士を総当りで結合させる無駄な処理をした後に
40
+ 絞り込みを行うと、総当たりの無駄な処理+膨大な量からの無駄な絞り込みということになり、
41
+ そういう無駄を省くためにも、
42
+ FROM句にJOIN句をつないでテーブルの結合を効率良く行うのがセオリーです。