ON句における抽出条件の説明について

  • フォーラムは新サイトへ移行しました。
  • このフォーラムではゲスト投稿が禁止されています
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2017-6-7 16:23
yokoty  半人前   投稿数: 7
ON句における抽出条件の説明について
「表の結合時、結合した表から取り出したい行を指定してSQL文を実行できます。
行を指定する場合は、取り出す行の条件をWHERE句に指定します。」
という説明に続いて
「なお、ON句による結合の場合のみ、WHERE句は記述せず、ON句に記述した結合条件に
論理演算子ANDで続けて取り出す行の条件を指定することもできます。」
との記述があり、
ON句では結合条件にANDで続けて、WHERE句に記述していた抽出条件を指定することもできる、と読めます。

WHERE句に記述する条件は結合後に適用される抽出条件であり
ON句で指定される結合条件とは異なるもので
「on 条件A where 条件B 」と「on 条件A and 条件B 」では
結果が異なる場合があるのではないでしょうか。

読み違いであればすみません。

参考URL:http://blogs.itmedia.co.jp/doc-consul/2015/11/sql.html
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2017-6-12 17:31
quensan  長老   投稿数: 119
>ON句では結合条件にANDで続けて、WHERE句に記述していた抽出条件を指定することもできる、と読めます。

その通りではないでしょうか。
古いですが、オラクルマスター教科書(黒本)11g SQL基礎には以下のように書いてありました。
<引用>
ON句には結合条件を指定し、WHERE句には検索条件を指定します。
検索条件には、WHERE句、またはON句のANDキーワードのどちらを使用してもかまいません。
<引用>

>「on 条件A where 条件B 」と「on 条件A and 条件B 」では結果が異なる場合があるのではないでしょうか。

試してみると結果は同じでした。

SQL> SELECT e.employee_id, e.employee_name
FROM departments d JOIN employees e
ON d.department_id = e.department_id
WHERE e.department_id = 5;

EMPLOYEE_ID EMPLOYEE_NAME
----------- --------------------
1005 加藤昭彦
1012 阿部伊吹
1017 渡辺和也

SQL> SELECT e.employee_id, e.employee_name
FROM departments d JOIN employees e
ON d.department_id = e.department_id
AND e.department_id = 5;

EMPLOYEE_ID EMPLOYEE_NAME
----------- --------------------
1005 加藤昭彦
1012 阿部伊吹
1017 渡辺和也

参考URLは外部結合の話で、そうなると書き方が違ってくるのかもしれません。
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2017-6-13 13:41
yokoty  半人前   投稿数: 7
レスありがとうございます。
外部結合の場合には、onかwhereかで結果が変わるようですね。
外部結合の際は気を付けたいと思います。

  >フォーラム検索へ


Copyright (c) 2020 Ping-t All rights reserved.