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

FROM句のネストされた括弧は有効なOracleSQL構文ですか?

    join句で括弧を使用することは正当な構文です。 FROMで 、および括弧 do 効果があります。

    このクエリについて考えてみましょう:

    WITH table_a AS ( SELECT rownum id FROM DUAL CONNECT BY LEVEL <= 30),
         table_b as ( SELECT rownum id FROM DUAL CONNECT BY LEVEL <= 20),
         table_c AS ( SELECT rownum id FROM DUAL CONNECT BY LEVEL <= 10)
    SELECT a.id, b.id, c.id
    FROM   table_a a left join ( table_b b inner join table_c c ON c.id = b.id ) ON b.id = a.id 
    ORDER BY 1,2,3;
    

    括弧を使用すると、テーブルの内部結合を実行できますb およびc 次に、それをaに外部結合します 。

    括弧がないと、それを左結合として表現しようとすることは不可能です。テーブルaから行11〜30を取得することもできません。 または、テーブルcの行11〜20 nullになります s(どのように実行しようとしたかによって異なります)。

    上記のクエリは次と同等であることに注意してください:

    WITH table_a AS ( SELECT rownum id FROM DUAL CONNECT BY LEVEL <= 30),
         table_b as ( SELECT rownum id FROM DUAL CONNECT BY LEVEL <= 20),
         table_c AS ( SELECT rownum id FROM DUAL CONNECT BY LEVEL <= 10)
    SELECT a.id, b.id, c.id
    FROM   table_b b inner join table_c c on c.id = b.id right join table_a a on a.id = b.id 
    ORDER BY 1,2,3;
    

    、括弧は必要ありません。したがって、FROMで括弧を使用することを本当に避けたい場合 条項、あなたは通常そうすることができます。個人的には、LEFT JOINが好きです RIGHT JOINの代わりに括弧を使用したメソッド 。



    1. DapperとPostgresqlの使用-citextデータ型

    2. n番目の行をn+1番目の行と比較し、それがn番目の行の範囲内にある場合はn+1行を出力しますUSNGORACLEQUERY

    3. テーブルのマテリアライズド・ビュー・ログのフィルター列は使用できません

    4. 行を削除しようとしたときにSQLite例外が発生しました