Oracle
 sql >> Base de données >  >> RDS >> Oracle

Syntaxe Oracle - doit-on choisir entre l'ancien et le nouveau ?

Chose similaire ici, mais pas autant de développeurs, et pas aussi vieux de code. J'utilise les trucs les plus récents, les gars plus âgés utilisent le style plus ancien, mais nous savons tous les deux ce que l'autre essaie de faire.

Personnellement, je dirais d'aller avec le style le plus facile à utiliser pour le développeur individuel. À moins que vous n'exécutiez des tests de performance et découvriez que l'un est plus rapide que l'autre (comme dans, une différence suffisante pour être significative), et que les nouveaux et les anciens peuvent lire et comprendre les requêtes qu'ils voient, il n'y a aucune raison de les changer.

Cependant, mon vote personnel serait de laisser les anciens éléments tels quels et d'écrire de nouvelles requêtes en utilisant la nouvelle syntaxe, en utilisant JOIN s et USING et ON etc. sont beaucoup plus faciles à lire et savent ce qui se passe, puis avoir un tas de AND x.col = y.col AND z.col = a.col dans le WHERE rubrique.

Ça, et les nouveaux gars vont probablement être là plus longtemps, donc ils finiront par se débrouiller...

Un exemple supplémentaire

Je ne sais pas pour le reste d'entre vous, mais je détesterais devoir essayer de comprendre quelque chose comme ça (ou écrire ceci) en utilisant l'ancien style d'adhésion :

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