アプリ版:「スタンプのみでお礼する」機能のリリースについて

MySQLで複数テーブルからデータ取得する際、
FROMの後に、テーブル名を2つ書いて、「WHERE」で繋げる書き方と、
「JOIN ★★ ON」で繋げる書き方では、何が違うのでしょうか?

・「INNER JOIN」と同じ意味でしょうか?
・書き方によっては、「LEFT OUTER JOIN」みたいにも書けるのでしょうか?

・普通は、どちらの書き方で書くとか、そういうお作法的な暗黙の了解はあるでしょうか?
・例えば「WHERE」だと3つ以上繋げられない(?)から、奨励されていない、とか…

A 回答 (2件)

select *


from 表A, 表B
where 表A.列1 = 表B.列2 and 表A.列3 = 値



select *
from 表A inner join 表B on 表A.列1 = 表B.列2
where 表A.列3 = 値

は同じ結果となります。前者の方が古くからある構文,後者が新しい構文になります。新しいといっても20年は経っていますけれど。


> 普通は、どちらの書き方で書くとか、
> そういうお作法的な暗黙の了解はあるでしょうか?

旧構文は,結合を指定する要素がfrom句とwhere句に分かれてしまっているのに対して,
新構文では次のように各句の機能が明確ですから,join句の使用をお薦めします。

射影…select *
結合…from 表A inner join 表B on 表A.列1 = 表B.列2
選択…where 表A.列3 = 値


> 書き方によっては「LEFT OUTER JOIN」みたいにも書けるのでしょうか?

旧構文で外部結合を記述することもできますが,各データベース製品の独自構文になります。標準SQLの規格ではありません。


> 「WHERE」だと3つ以上繋げられない(?)から、奨励されていない、とか

そういう制限はありません。
    • good
    • 1
この回答へのお礼

回答ありがとうございました。

>新しいといっても20年は経っていますけれど
・初めて知りました
・大変参考になりましたー

お礼日時:2013/05/22 12:15

>FROMの後に、テーブル名を2つ書いて、「WHERE」で繋げる書き方と、


>「JOIN ★★ ON」で繋げる書き方では、何が違うのでしょうか?
WHEREは古いやり方で、JOIN ONは新しいやり方で、書き方以外の違いは無いと思います。
>「INNER JOIN」と同じ意味でしょうか?
そうです。
>書き方によっては、「LEFT OUTER JOIN」みたいにも書けるのでしょうか?
Oracleの場合(+)を付けて可能ですがMySQLは多分出来ないと思います。
>普通は、どちらの書き方で書くとか、そういうお作法的な暗黙の了解はあるでしょうか?
>例えば「WHERE」だと3つ以上繋げられない(?)から、奨励されていない、とか…
どちらも規格になっているので良いと考えますが、後で見たときにINNER JOINの方が結合の条件がONでのみ確定するので解析しやすいと思います。
    • good
    • 0
この回答へのお礼

回答ありがとうございました。

>Oracleの場合(+)を付けて可能ですがMySQLは多分出来ないと思います
・Oracleに言及している記述は見たことがあるのですが、MySQLに関しては触れられていなかったので、疑問に思っていました
・大変参考になりましたー

お礼日時:2013/05/22 12:18

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!