Oracle
 sql >> Database >  >> RDS >> Oracle

Sintassi Oracle:dovremmo scegliere tra il vecchio e il nuovo?

Qualcosa di simile qui, ma non così tanti sviluppatori e non così vecchio di codice. Sto usando le cose più recenti, i ragazzi più grandi usano lo stile più vecchio, ma sappiamo entrambi cosa sta cercando di fare l'altro.

Personalmente, direi di andare con qualsiasi stile sia più facile da usare per il singolo sviluppatore. A meno che tu non esegua i benchmark e scopri che uno è più veloce dell'altro (come in una differenza sufficiente per essere significativo) e sia i vecchi che i nuovi possono leggere e comprendere le query che vedono, non c'è motivo di cambiarle.

Tuttavia, il mio voto personale sarebbe di lasciare le vecchie cose così com'è e scrivere nuove query usando la sintassi più recente, come usando JOIN se USING e ON ecc. sono molto più facili da leggere e sapere cosa sta succedendo, quindi avere un sacco di AND x.col = y.col AND z.col = a.col nel WHERE sezione.

Quello, e probabilmente i nuovi ragazzi rimarranno in giro più a lungo, quindi alla fine faranno a modo loro...

Un esempio aggiunto

Non so voi, ma mi dispiacerebbe dover provare a capire qualcosa del genere (o scriverlo) usando il vecchio stile di adesione:

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