Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Składnia Oracle - czy powinniśmy wybierać między starą a nową?

Tutaj podobnie, ale nie tak wielu deweloperów i nie tak stary kod. Używam nowszych rzeczy, starsi ludzie używają starszego stylu, ale oboje wiemy, co próbuje zrobić ten drugi.

Osobiście powiedziałbym, że wybierz dowolny styl, który jest łatwiejszy w użyciu dla indywidualnego programisty. O ile nie uruchomisz testów porównawczych i nie dowiesz się, że jeden jest szybszy od drugiego (na przykład różnica jest wystarczająca, aby była znacząca), a zarówno nowi, jak i starsi mogą czytać i rozumieć zapytania, które widzą, nie ma powodu, aby je zmieniać.

Jednak moim osobistym głosem byłoby pozostawienie starych rzeczy bez zmian i napisanie nowych zapytań przy użyciu nowszej składni, jak przy użyciu JOIN s i USING i ON itp. są o wiele łatwiejsze do odczytania i wiedzą, co się dzieje, niż posiadanie kilku AND x.col = y.col AND z.col = a.col w WHERE sekcja.

To, a nowi faceci prawdopodobnie będą w pobliżu dłużej, więc w końcu dojdą do celu...

Dodatkowy przykład

Nie wiem jak reszta z was, ale nie chciałbym próbować wymyślić czegoś takiego (lub napisać to) używając starego stylu łączenia:

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dzielenie dużej liczby wierszy na mniejsze zapytania? Równoległość

  2. Wybierz liczbę (*) z wielu tabel

  3. Jak używać listagg z querydsl?

  4. WYBIERANIE pierwszych N wierszy bez ROWNUM?

  5. Jak za pomocą Oracle przeprowadzić audyt usunięć w określonej tabeli?