Die Entwicklung meiner SQL-Abfragen

Hallo, alle miteinander! Ich bin Teamleiter und leitender Oracle-Entwickler. Ich arbeite seit 12 Jahren mit OeBS und schreibe hauptsächlich SQL-Abfragen. Ich möchte Ihnen sagen, wie sich mein Ansatz zum Schreiben von SQL-Abfragen in dieser Zeit geändert hat.





Am Anfang gab es ein Wort oder eher eine Bitte. Sagen wir





select name from user where id = 1
      
      



Es ist fast unmöglich, eine solche Anfrage zu schreiben. Es funktioniert in jeder mir bekannten Datenbank gleich gut. Und ich kenne nur Orakel: W Aber ich vermute, dass auch in anderen Beziehungen alles in Ordnung sein wird.





Also was ist passiert? Die Probleme begannen, als es zwei Tische gab:





select name from user u, rest r where u.id = 1 and u.id = r.user_id
      
      



Dieser Code gab mir weitere Fragen. Wie sollen diese Tabellen beispielsweise verbunden werden? Es scheint einfacher zu sein  id = user_id



, aber mir hat etwas nicht gefallen. In der where-Klausel fehlte mir eine klare Trennung zwischen Filterbedingungen und Tabellenverknüpfungen. Wenn die Abfrage 2 Tabellen enthielt, war dies noch normal, aber als die Anzahl der Tabellen 5 erreichte, fiel alles auseinander. Als ich mir die Abfrage ansah, konnte ich nicht sofort verstehen, wie die Tabellen verbunden waren und ob ein Link fehlte. Und alle lebten gut damit, aber ich konnte nicht. Als junger Juni stieß ich eines Tages auf die ANSI-Syntax.





select name from user inner join rest on u.id = r.user_id where u.id = 1
      
      



, , SQL . , - . . SQL. - . . ANSI , .





select u.name, r.resp_name 
from user u 
left join resp r on u.id = r.user_id  and r.end_date > sysdate 
where id = 1
      
      



, .  , , .  .  .  with.





select resp_q as (
  select resp_name, userid  
  from resp where r.end_date > sysdate)
 ,main_q as (
   select u.name, r.respname
   from user u 
   left join resp_q r on u.id = r.userid
   where id = 1)
 select * from main_q
      
      



, with “”, . : “ . . . , .”  . WET, .. , .  , . from .  , , with , hint MATERIALIZE. . . , .. + . , , 10 , with.





- . , , , - . , . unit , . . 100, 120. ? … , , , . ( ).





select * from document where xxstorno(id) = 'Y'
      
      



10 . , - . , .  . , , , . , 5-7 , .





with test_case as (
  select 10 id, 'Y' storno from dual 
  union all 
  select 5 id, 'N' storno from dual)
  , run_test as (
    select tc.id, decode(xxstorno(d.id), tc.storno, 'OK', 'Error') result
    from test_case  tc
    left join document d on d.id = tc.id)
 select * from run_test
      
      



, - , . , . , ! , . , . and id = 5--6 7 10 135 1345



  in denen verschiedene Werte einfach durch rohe Gewalt ersetzt wurden und was und wie es mit den Händen zurückkehren sollte. Seit diesem Tag habe ich mehrere Entwicklungen geschrieben und für jede habe ich bereits mein eigenes Testskript vorbereitet. Dieser Stil hat mir sehr gut gefallen und jetzt versuche ich, ihn meinen Entwicklern zu vermitteln. Damit sie nicht 12 Jahre reisen müssen, um schöne SQL-Abfragen zu schreiben.





Infolgedessen passiert in der SQL-Welt seit vielen Jahren fast nichts Neues. Es ist jedoch immer schön, Möglichkeiten zu finden, um Ihre Abfragen zu verbessern.








All Articles