2012-12-06 7 views
29

可能性の重複:
MySQL ON vs USING?- MYSQL

クエリ1:

SELECT * 
FROM users 
JOIN orders ON (orders.user_id = users.user_id) 
WHERE users.user_id = 1; 

クエリ2:

SELECT * 
FROM users 
JOIN orders USING (user_id) 
WHERE user_id = 1; 

私はいくつかの特定のデータを取得するために注文とユーザーのテーブルに参加したい。それはうまく動作します。私の問題は、両方のクエリが同じ結果セットを出力するためです。同じですか?どちらを使用すると効率的ですか?どちらがパフォーマンスに適していますか?どちらがベストプラクティスですか?

+2

[はい。](http://dev.mysql.com/doc/refman/5.0/ja/join.html)ベンチマークしましたか?ベンチマークしましたか?あなたのコーディング基準は何ですか? – Ben

+2

それは[すでに議論されて]されていない(http://stackoverflow.com/questions/11366006/mysql-on-vs-using)一度? – Geo

答えて

29

USING句は、複数のテーブルからデータを取得するときに、JOINの条件で言及する必要はありません。 USING節を使用する場合は、その特定の列名が両方の表に存在し、SELECT問合せは、USING節の指定された列名を使用してこれらの表を自動的に結合します。

表に共通の列名が2つある場合は、USING句の希望の共通列名を表記

USINGも動的SQLの実行中に使用されます。

例えば、

EXECUTE IMMEDIATE 'DELETE FROM dept WHERE deptno = :num' 
    USING dept_id; 
  • USING句:これは、あなたが名前によって結合キーを指定することができます。

  • ON句:この構文では、両方のテーブルの結合キーの列名を指定できます。

複数の列が同じ名前を共有していますが、これらの共通の列のすべてを使用して参加したくない場合はUSING句が使用されている

USING句。 USING句に列挙されている列には、WHERE句を含む文の修飾子を使用できません。

ON句は、カラム名が両方のテーブルに一致していない表を結合するために使用される

ON句。 WHERE句のフィルタ条件から結合条件が削除されます。