回答編集履歴

3

マニュアルについて追記

2019/05/01 00:20

投稿

Y.H.
Y.H.

スコア7914

test CHANGED
@@ -15,6 +15,8 @@
15
15
 
16
16
 
17
17
  [実行計画(実行プラン)](https://dev.mysql.com/doc/refman/5.6/ja/explain-output.html)を確認してみないと正確な事は判りませんが、以下と同等な実行がなされたのではないでしょうか?
18
+
19
+ ※本質問のような疑問に対しては[実行計画(実行プラン)](https://dev.mysql.com/doc/refman/5.6/ja/explain-output.html)を確認すると解ることが多いです。使用方法および結果の見方を覚えておかれると役立つと思います。(また、SQLの性能改善には利用必須の機能となります)
18
20
 
19
21
 
20
22
 
@@ -54,9 +56,9 @@
54
56
 
55
57
 
56
58
 
57
- 本質問のような疑問対しては[実行計画(実行プラン)](https://dev.mysql.com/doc/refman/5.6/ja/explain-output.html)を確認すると解ることが多す。
59
+ ※ [saziさん回答(追記2)](https://teratail.com/questions/186500#reply-277172)にも記載されていますが、このようなMySQLの動作関する事柄についてはMySQLのマニュアル「[8.2.1.18.4 EXISTS 戦略によるサブクエリーの最適化](https://dev.mysql.com/doc/refman/5.6/ja/subquery-optimization.html#subquery-optimization-with-exists)」に記載されてす。
58
60
 
59
- 使用方法および結果見方を覚えておかれると役立つと思います。(また、SQLの性能改善には利用必須機能なります)
61
+ 部分来限らずMySQLについて動作原理ついて疑問を解消(また理解を深める)ならば、公式マニュアルを読まれるこをお勧めします
60
62
 
61
63
 
62
64
 

2

修正

2019/05/01 00:20

投稿

Y.H.
Y.H.

スコア7914

test CHANGED
@@ -3,6 +3,8 @@
3
3
 
4
4
 
5
5
  (コメントより)
6
+
7
+ > 仕組みを理解したくて質問させていただきました
6
8
 
7
9
  > inにした場合の結果が一件だけなのでしょうか
8
10
 

1

コメントを受けて追記

2019/04/30 23:59

投稿

Y.H.
Y.H.

スコア7914

test CHANGED
@@ -1,3 +1,69 @@
1
+ 追記
2
+
3
+
4
+
5
+ (コメントより)
6
+
7
+ > inにした場合の結果が一件だけなのでしょうか
8
+
9
+
10
+
11
+ サブクエリーの結果は全件取得されています。
12
+
13
+
14
+
15
+ [実行計画(実行プラン)](https://dev.mysql.com/doc/refman/5.6/ja/explain-output.html)を確認してみないと正確な事は判りませんが、以下と同等な実行がなされたのではないでしょうか?
16
+
17
+
18
+
19
+ 親のselect文のテーブル`player p`に対してサブクエリーの`where p.teamNo = 2 and p.uniformNo=5`(キー項目による絞り込み)が評価され1件が抽出ます。
20
+
21
+ このレコードがサブクエリー(結果:player全件)に存在するため、sql全体として1件抽出される結果となります。
22
+
23
+
24
+
25
+ ```
26
+
27
+ (
28
+
29
+ select teamName , positionName ,uniformNo ,playerName
30
+
31
+ from player
32
+
33
+ where teamNo = 2 and uniformNo=5
34
+
35
+ ) p
36
+
37
+ join team using(teamNo)
38
+
39
+ join position1 using(PositionNo)
40
+
41
+ where positionNo in
42
+
43
+ (
44
+
45
+ select positionNo
46
+
47
+ from player
48
+
49
+ );
50
+
51
+ ```
52
+
53
+
54
+
55
+ 本質問のような疑問に対しては[実行計画(実行プラン)](https://dev.mysql.com/doc/refman/5.6/ja/explain-output.html)を確認すると解ることが多いです。
56
+
57
+ 使用方法および結果の見方を覚えておかれると役立つと思います。(また、SQLの性能改善には利用必須の機能となります)
58
+
59
+
60
+
61
+
62
+
63
+ ----
64
+
65
+
66
+
1
67
  このサブクエリーですが、Playerとの結合がないのでplayerテーブルの全件が取得されます。
2
68
 
3
69