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

回答編集履歴

3

追記

2017/09/13 12:56

投稿

SVC34
SVC34

スコア1149

answer CHANGED
@@ -5,6 +5,6 @@
5
5
 
6
6
  内部結合の場合は実行結果は変わりません。
7
7
 
8
- 「実行計画」については、変わる可能性があります。SQLの文法上の意味としては、ONに記述する条件は結合の際に適用され、WHEREに記述する条件は結合した後の結果に適用されることになっているからです。しかし、最近のデータベースのオプティマイザであれば内部結合の場合は結果が同じになることを理解しており、EXPLAINしてみると通常はWHERE句に記述した条件も結合の際 or 前に適用されているはずです。実際に実行計画が変わることはほぼないと考えています
8
+ 「実行計画」については、変わる可能性があります。SQLの文法上の意味としては、ONに記述する条件は結合の際に適用され、WHEREに記述する条件は結合した後の結果に適用されることになっているからです(外部結合で結果が変わる原因)。しかし、最近のデータベースのオプティマイザであれば内部結合の場合は結果が同じになることを理解しており、EXPLAINしてみるとWHERE句に記述した条件も通常効率がよくなる結合の際 or 前に適用されているはずです。実際に実行計画が変わることはほぼないと考えています
9
9
 
10
10
  私が内部結合のSQLを書く場合は、論理データモデルとして結合の中心として考えるテーブル、通常FROM句の最初に指定するテーブルに適用する条件であれば、意味合いとしてそれは結合条件というよりは抽出条件であると捉えてWHERE句に記述します(実際にどれを駆動表とするかはオプティマイザが選択するのですが)。

2

修正

2017/09/13 12:55

投稿

SVC34
SVC34

スコア1149

answer CHANGED
@@ -7,4 +7,4 @@
7
7
 
8
8
  「実行計画」については、変わる可能性があります。SQLの文法上の意味としては、ONに記述する条件は結合の際に適用され、WHEREに記述する条件は結合した後の結果に適用されることになっているからです。しかし、最近のデータベースのオプティマイザであれば内部結合の場合は結果が同じになることを理解しており、EXPLAINしてみると通常はWHERE句に記述した条件も結合の際 or 前に適用されているはずです。実際に実行計画が変わることはほぼないと考えています
9
9
 
10
- 私が内部結合のSQLを書く場合は、データモデルとして結合の中心とるテーブル、通常FROM句の最初に指定するテーブルに適用する条件であれば、意味合いとしてそれは結合条件というよりは抽出条件であると捉えてWHERE句に記述します(実際にどれを駆動表とするかはオプティマイザが選択するのですが)。
10
+ 私が内部結合のSQLを書く場合は、論理データモデルとして結合の中心として考えるテーブル、通常FROM句の最初に指定するテーブルに適用する条件であれば、意味合いとしてそれは結合条件というよりは抽出条件であると捉えてWHERE句に記述します(実際にどれを駆動表とするかはオプティマイザが選択するのですが)。

1

修正

2017/09/13 12:45

投稿

SVC34
SVC34

スコア1149

answer CHANGED
@@ -5,6 +5,6 @@
5
5
 
6
6
  内部結合の場合は実行結果は変わりません。
7
7
 
8
- 「実行計画」については、変わる可能性があります。SQLの文法上の意味としては、ONに記述する条件は結合の際に適用され、WHEREに記述する条件は結合した後の結果に適用されることになっているからです。しかし、最近のデータベースのオプティマイザであれば内部結合の場合は結果が同じになることを理解しており、EXPLAINしてみると通常はWHERE句に記述した条件も結合の際に適用されているはずです。実際に実行計画が変わることはほぼないと考えています
8
+ 「実行計画」については、変わる可能性があります。SQLの文法上の意味としては、ONに記述する条件は結合の際に適用され、WHEREに記述する条件は結合した後の結果に適用されることになっているからです。しかし、最近のデータベースのオプティマイザであれば内部結合の場合は結果が同じになることを理解しており、EXPLAINしてみると通常はWHERE句に記述した条件も結合の際 or 前に適用されているはずです。実際に実行計画が変わることはほぼないと考えています
9
9
 
10
10
  私が内部結合のSQLを書く場合は、データモデルとして結合の中心となるテーブル、通常FROM句の最初に指定するテーブルに適用する条件であれば、意味合いとしてそれは結合条件というよりは抽出条件であると捉えてWHERE句に記述します(実際にどれを駆動表とするかはオプティマイザが選択するのですが)。