MySQLのJOIN構文で、USINGを利用した場合のメリット、デメリットはなんでしょうか。


例)日記一覧テーブルと日記詳細テーブルを結合する。
SELECT A.id, B.id, A.title, A.body, A.date FROM diary_table as A INNER JOIN diary_list_table as B USING(id);

回答の条件
  • 1人2回まで
  • 13歳以上
  • 登録:2011/01/28 11:58:56
  • 終了:2011/01/28 18:57:30

ベストアンサー

id:chuken_kenkou No.2

chuken_kenkou回答回数722ベストアンサー獲得回数542011/01/28 16:13:27

ポイント35pt

まず、USINGが使えるのは、結合するそれぞれの表に同一名称の列があり、その列同士で等価なものを結合する場合だけで使える構文です。

この構文は、SQL-92くらいで標準SQLに入りましたが、各RDBMSのバージョンアップの頻度、実装優先順序などにより、主要RDBMSでも未実装の場合があります。

したがって、メリットとしては、

  1. 結合条件が単純明快

デメリットとしては、

  1. 同一列名による等価結合以外では、ON条件に変えるなど、構文の使い分けが必要になる
  2. 異なるRDBMS、同一RDBMSでも新旧バージョンを使うなどのケースでは、USINGを使えない場合がある

などが考えられます。

id:is0me

他の回答と合わせわかり易い説明ありがとうございます。

2011/01/28 18:55:50

その他の回答(3件)

id:iQuest No.1

iQuest回答回数66ベストアンサー獲得回数52011/01/28 12:53:38

ポイント10pt

メリット/デメリットではなく、USINGがないと内部結合が成立しません。


参考「JOIN 構文」(MySQLリファレンス)

id:is0me

ありがとうございます。

ON A.id=B.idでは、成立しないのでしょうか。

2011/01/28 18:53:57
id:chuken_kenkou No.2

chuken_kenkou回答回数722ベストアンサー獲得回数542011/01/28 16:13:27ここでベストアンサー

ポイント35pt

まず、USINGが使えるのは、結合するそれぞれの表に同一名称の列があり、その列同士で等価なものを結合する場合だけで使える構文です。

この構文は、SQL-92くらいで標準SQLに入りましたが、各RDBMSのバージョンアップの頻度、実装優先順序などにより、主要RDBMSでも未実装の場合があります。

したがって、メリットとしては、

  1. 結合条件が単純明快

デメリットとしては、

  1. 同一列名による等価結合以外では、ON条件に変えるなど、構文の使い分けが必要になる
  2. 異なるRDBMS、同一RDBMSでも新旧バージョンを使うなどのケースでは、USINGを使えない場合がある

などが考えられます。

id:is0me

他の回答と合わせわかり易い説明ありがとうございます。

2011/01/28 18:55:50
id:doropon No.3

回答回数94ベストアンサー獲得回数162011/01/28 15:05:56

ポイント25pt

USING じゃないときは、ONっすよね。

USINGはカラム名が同じときしか使えないです。

メリットは

結合に使うカラム名が同じときは、ちょっと省略して書けるですね。

SELECT A.id, B.id, A.title, A.body, A.date FROM diary_table as A INNER JOIN diary_list_table as B USING(id);

SELECT A.id, B.id, A.title, A.body, A.date FROM diary_table as A INNER JOIN diary_list_table as B ON A.id=B.id;

USINGがちょっと得した気分です。

好みかもしれないです。自分は常にONで書きますね。

id:is0me

簡潔に書けますが、バージョンによる影響を考えるとONの方が良さそうですね。

ありがとうございます。

2011/01/28 18:53:48
id:taroe No.4

taroe回答回数1099ベストアンサー獲得回数1322011/01/28 13:35:26

id:is0me

自然結合との比較が非常に分かりやすかったです。

ありがとうございます。

2011/01/28 18:51:18
  • id:windofjuly
    うぃんど 2011/01/28 12:50:15
    【メリット】初心者にも上級者にもありがたいこと
    記述が簡単になって読みやすくなること
    下記のようにも書けます
    SELECT id, A.title, A.body, A.date FROM 以下略
     
    【デメリット】
    プランナが効率的な計画を立てることが出来ない可能性が高まり、極端に実行時のパフォーマンスが落ちる場合があること
    初心者はプランナに適したSQLを組み立てることがそもそもできませんし、構文ミスで誤ったデータを取得するよりかはメリットを享受したほうが良いとは思われます
    中級者以上の場合はEXPLAINの結果などからパフォーマンスの出る構文に置きなおすなども随時行っていくほうが良いです

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません