Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Sintaxe Oracle - devemos escolher entre o antigo e o novo?


Coisa semelhante aqui, mas não tantos devs, e não tão antigo de código. Estou usando as coisas mais novas, os caras mais velhos estão usando o estilo mais antigo, mas nós dois sabemos o que o outro está tentando fazer.

Pessoalmente, eu diria que vá com o estilo que for mais fácil para o desenvolvedor individual usar. A menos que você execute benchmarks e descubra que um é mais rápido que o outro (como uma diferença suficiente para ser significativa), e tanto os novos quanto os antigos podem ler e entender as consultas que veem, não há motivo para alterá-las.

No entanto, meu voto pessoal seria deixar as coisas antigas como estão e escrever novas consultas usando a sintaxe mais recente, como usar JOIN se USING e ON etc. são muito mais fáceis de ler e saber o que está acontecendo, então ter um monte de AND x.col = y.col AND z.col = a.col no WHERE seção.

Isso, e os novos caras provavelmente ficarão por mais tempo, então eles vão conseguir o que querem eventualmente...

Um exemplo adicionado


Não sei sobre o resto de vocês, mas eu odiaria ter que tentar descobrir algo assim (ou escrever isso) usando o antigo estilo de junção:
SELECT DISTINCT product_zone_map_id, zh.name_english, zh.name_french, zone_id, ad.attribute_value_english AS bullprep_region_type,
        product_zone_type_id, ad.attribute_value_english, language_english, product_code, office_code,
        (
            SELECT attribute_value_english
            FROM presentation p JOIN presentation_details ad USING(presentation_id)
            WHERE dimension_id = 4
              AND object_id = product_zone_map_id
              AND attribute_type = 'BULLPREP PARENT ID'
              AND p.usage_start_date <= TO_TIMESTAMP('2010-05-12', 'yyyy-mm-dd hh24:mi:ss')
              AND (p.usage_end_date >= TO_TIMESTAMP('2010-05-12', 'yyyy-mm-dd hh24:mi:ss') OR p.usage_end_date IS NULL)
        ) AS bullprep_parent_id,
        (
            SELECT attribute_value_english
            FROM presentation p JOIN presentation_details ad USING(presentation_id)
            WHERE dimension_id = 4
              AND object_id = product_zone_map_id
              AND attribute_type = 'BULLPREP GROUP ID'
              AND p.usage_start_date <= TO_TIMESTAMP('2010-05-12', 'yyyy-mm-dd hh24:mi:ss')
              AND (p.usage_end_date >= TO_TIMESTAMP('2010-05-12', 'yyyy-mm-dd hh24:mi:ss') OR p.usage_end_date IS NULL)
        ) AS bullprep_group_id, product_zone_seq
FROM zone z JOIN zone_history zh ON(z.zone_id = zh.zone_id)
     JOIN product_zone_map pzm ON(z.zone_id = pzm.zone_id)
     JOIN product USING(product_id)
     JOIN product_history ph USING(product_id)
     JOIN language_reference USING(language_id)
     LEFT OUTER JOIN product_zone_attribute_details pzad USING(product_zone_map_id)
     LEFT OUTER JOIN attribute_details ad USING(attribute_id)
     JOIN zone_geocode_map USING(zone_id)
     JOIN geocode USING(geocode_id)
WHERE zh.usage_start_date <= TO_TIMESTAMP('2010-05-12', 'yyyy-mm-dd hh24:mi:ss')
  AND (zh.usage_end_date >= TO_TIMESTAMP('2010-05-12', 'yyyy-mm-dd hh24:mi:ss') OR zh.usage_end_date IS NULL)
  AND pzm.usage_start_date <= TO_TIMESTAMP('2010-05-12', 'yyyy-mm-dd hh24:mi:ss')
  AND (pzm.usage_end_date >= TO_TIMESTAMP('2010-05-12', 'yyyy-mm-dd hh24:mi:ss') OR pzm.usage_end_date IS NULL)
  AND (attribute_type = 'BULLPREP REGION TYPE' OR attribute_type IS NULL)
  AND product_id = 2075
ORDER BY product_zone_seq