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

CROSSJOIN条件が'ON'句で機能せず、WHERE句でのみ機能するのはなぜですか?

    CROSS JOINは、2つのテーブル間で完全なデカルト積を実行するSQL演算子です。デカルト積であるため、操作中の条件はありません。 、結果を制限できるのは、一部のフィルタリング操作(WHERE条件)のみです。

    JOIN(INNERおよびOUTER JOIN、つまり)演算子は、演算子のON部分で表現されたフィルタリング演算子を含む単純な直積です(実際、SQLの元の構文では、JOIN演算子はなく、単に「comma」です。常にWHERE部分で表現される結合条件を持つ製品を示す表記)。

    例:

    「古い」表記:

    SELECT ...
    FROM table1 t1, table2 t2
    WHERE t1.attribute = t2.attribute
    

    「モダン」表記と同等:

    SELECT ...
    FROM table1 t1 INNER JOIN table2 t2 ON t1.attribute = t2.attribute
    

    一方、デカルト積の場合:

    「古い」表記:

    SELECT ...
    FROM table1 t1, table2 t2
    

    「モダン」表記と同等:

    SELECT ...
    FROM table1 t1 CROSS JOIN table2 t2
    

    つまり、条件を必要とするCROSS JOINは、実際にはある種のINNERJOINです。




    1. 正しくサニタイズ/エスケープしますか?

    2. OracleからPostgreSQLに移行する10の理由

    3. SQL Serverデータベーステーブルにデータテーブルを挿入するにはどうすればよいですか?

    4. パッケージ「pgadmin4」には、Ubuntu20.04のインストール候補がありません