sql >> データベース >  >> RDS >> Mysql

MySQL JOIN ON vs USING?

    ほとんどが糖衣構文ですが、いくつかの違いが注目に値します:

    オン 2つのより一般的なです。列、列のセット、さらには条件でテーブルを結合できます。例:

    SELECT * FROM world.City JOIN world.Country ON (City.CountryCode = Country.Code) WHERE ...
    

    使用 両方のテーブルが、それらが結合するまったく同じ名前の列を共有する場合に役立ちます。この場合、次のように言うことができます:

    SELECT ... FROM film JOIN film_actor USING (film_id) WHERE ...
    

    追加の便利な点は、結合する列を完全に修飾する必要がないことです。

    SELECT film.title, film_id -- film_id is not prefixed
    FROM film
    JOIN film_actor USING (film_id)
    WHERE ...
    

    説明のために、上記を ONで実行します 、次のように書く必要があります:

    SELECT film.title, film.film_id -- film.film_id is required here
    FROM film
    JOIN film_actor ON (film.film_id = film_actor.film_id)
    WHERE ...
    

    film.film_idに注目してください SELECTの資格 句。 film_idとだけ言うのは無効です それはあいまいさを生むので:

    エラー1052(23000):フィールドリストの列'film_id'があいまいです

    select * 、結合列が結果セットにONで2回表示されます USINGでは1回だけ表示されます :

    mysql> create table t(i int);insert t select 1;create table t2 select*from t;
    Query OK, 0 rows affected (0.11 sec)
    
    Query OK, 1 row affected (0.00 sec)
    Records: 1  Duplicates: 0  Warnings: 0
    
    Query OK, 1 row affected (0.19 sec)
    Records: 1  Duplicates: 0  Warnings: 0
    
    mysql> select*from t join t2 on t.i=t2.i;
    +------+------+
    | i    | i    |
    +------+------+
    |    1 |    1 |
    +------+------+
    1 row in set (0.00 sec)
    
    mysql> select*from t join t2 using(i);
    +------+
    | i    |
    +------+
    |    1 |
    +------+
    1 row in set (0.00 sec)
    
    mysql>
    


    1. pyodbcを使用してMSSQLServerへの一括挿入を高速化する方法

    2. 初心者向けのSQLGROUPBY句

    3. MySQLとOracleを使用したHibernate自動キー生成

    4. Oracleで文字列と数値を連結する2つの方法