回答編集履歴

1

回答を追記

2017/01/30 23:54

投稿

KiyoshiMotoki
KiyoshiMotoki

スコア4791

test CHANGED
@@ -23,3 +23,35 @@
23
23
  [https://dev.mysql.com/doc/refman/5.6/ja/join.html](https://dev.mysql.com/doc/refman/5.6/ja/join.html)
24
24
 
25
25
  > 結合条件が存在しない場合、INNER JOIN と , (カンマ) は意味的に同等です。どちらも、指定されたテーブル間のデカルト積を生成します (つまり、最初のテーブル内のすべての各行が 2 番目のテーブル内のすべての各行に結合されます)。
26
+
27
+
28
+
29
+ # 別解
30
+
31
+ 上の SQL文の INNER JOIN は、CROSS JOIN に置き換えることもできます。
32
+
33
+ ```sql
34
+
35
+ SELECT p.県コード, s.店コード, s.店名, IFNULL(nos.店舗数, 0) AS 店舗数
36
+
37
+ FROM 県テーブル AS p
38
+
39
+ CROSS JOIN 店テーブル AS s
40
+
41
+ LEFT OUTER JOIN 店舗数テーブル AS nos
42
+
43
+ ON p.県コード = nos.県コード AND s.店コード = nos.店コード
44
+
45
+ ORDER BY 県コード, 店コード;
46
+
47
+ ```
48
+
49
+ [http://sqlfiddle.com/#!9/b51a5/2](http://sqlfiddle.com/#!9/b51a5/2)
50
+
51
+
52
+
53
+ Panzer_vor様のコメントの通り、MySQLの場合は、どちらを使用しても結果は変わりません。
54
+
55
+ [https://dev.mysql.com/doc/refman/5.6/ja/join.html](https://dev.mysql.com/doc/refman/5.6/ja/join.html)
56
+
57
+ > MySQL では、JOIN、CROSS JOIN、および INNER JOIN は構文上同等です (互いに置き換えることができます)。標準 SQL では、それらは同等ではありません。