ON句における抽出条件の説明について
- フォーラムは新サイトへ移行しました。
- このフォーラムではゲスト投稿が禁止されています
ON句における抽出条件の説明について
msg# 1
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
「表の結合時、結合した表から取り出したい行を指定して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
Re: ON句における抽出条件の説明について
msg# 1.1
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は外部結合の話で、そうなると書き方が違ってくるのかもしれません。
その通りではないでしょうか。
古いですが、オラクルマスター教科書(黒本)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は外部結合の話で、そうなると書き方が違ってくるのかもしれません。
Re: ON句における抽出条件の説明について
msg# 1.1.1
yokoty
投稿数: 7
レスありがとうございます。
外部結合の場合には、onかwhereかで結果が変わるようですね。
外部結合の際は気を付けたいと思います。
外部結合の場合には、onかwhereかで結果が変わるようですね。
外部結合の際は気を付けたいと思います。