Die Leistung von Oracle SQL

Nachdem Sie das heutige Thema „SQL. Unterhaltsame Aufgaben “, erinnerte ich mich, dass ich schon lange ein hervorragendes Buch für Fortgeschrittene von Oracle SQL von unserem hervorragenden Oracle-Spezialisten Alex Reprintsev empfehlen wollte -„ The Power of Oracle SQL “. Es ist nicht nur äußerst nützlich für diejenigen, die Oracle SQL auf hohem Niveau kennenlernen möchten, es ist auch kostenlos ! Darüber hinaus gibt es Versionen in Russisch und Englisch.

Im Allgemeinen Links zum Buch selbst .

Und um das Buch selbst mit dem Autor zu besprechen .

Und um ein paar Beispiele für Aufgaben daraus zu ziehen:

  • Verbundene Komponenten
    Es gibt einen ungerichteten (ungerichteten) Graphen, der durch eine Liste von Kanten und definiert ist
    erforderlich, um angeschlossene Komponenten zu erhalten.

    Für die Daten in der folgenden Tabelle:

    create table edge(x1, x2) as select 10,20 from dual union all select 50,40 from dual union all select 20,30 from dual union all select 20,40 from dual union all select 60,70 from dual union all select 80,60 from dual union all select 20,90 from dual; 

    Das folgende Ergebnis wird erwartet (die Nummerierungsreihenfolge der Komponenten ist nicht kritisch):

      X GRP --- ----- 10 1 20 1 30 1 40 1 50 1 60 2 70 2 80 2 90 1 

  • Ordnungsabhängigkeiten
    Betrachten Sie nun das Problem in einem gerichteten (gerichteten) Graphen.
    Es gibt eine Tabelle mit Abhängigkeiten zwischen Objekten, die keine zyklischen Elemente enthalten
    Abhängigkeiten. Es kann jedoch mehr als ein Pfad zwischen Scheitelpunktpaaren existieren
    Eine solche Struktur kann nicht als Baum bezeichnet werden.

     create table d(name, referenced_name) as (select null, 'a' from dual union all select null, 'd' from dual union all select 'a', 'b' from dual union all select 'd', 'b' from dual union all select 'b', 'e' from dual union all select 'b', 'c' from dual union all select 'e', 'c' from dual); 

    Bei jedem Schritt müssen alle Objekte in der Mindestanzahl von Schritten umgangen werden
    Sie können nur die Objekte umgehen, für die alle abhängigen Objekte umgangen werden. Das heißt, auf
    Der erste Schritt umgeht Objekte, die keine Abhängigkeiten aufweisen, im zweiten Schritt diejenigen, die davon abhängen
    von den Objekten des ersten Schritts und so weiter. Mit anderen Worten, Tiefenabhängigkeiten sind nummeriert.
  • Abdeckungsbereiche
    Angenommen, es gibt eine Tabelle mit der folgenden Form:

     create table t_range(a, b) as (select 1, 15 from dual union all select 3, 17 from dual union all select 6, 19 from dual union all select 10, 21 from dual union all select 17, 26 from dual union all select 18, 29 from dual union all select 20, 32 from dual union all select 24, 35 from dual union all select 28, 45 from dual union all select 30, 49 from dual); 

    b> a für jedes Paar a, b; ein einzigartiges

    Es ist notwendig, die Segmente (1:15), (17:26), (28:45) zu erhalten, dh wir beginnen mit der Linie mit
    Minimum a , und nehmen Sie die nächste Zeile so, dass dafür a größer als b von der aktuellen Zeile ist und so
    weiter.
  • Top Pfade
    Geben Sie für eine Tabelle mit einer Liste von Verzeichnissen im Dateisystem nur diejenigen aus, die keine haben
    Unterverzeichnis.

     create table t_path(path) as select '/tmp/cat/' from dual union all select '/tmp/cata/' from dual union all select '/tmp/catb/' from dual union all select '/tmp/catb/catx/' from dual union all select '/usr/local/' from dual union all select '/usr/local/lib/liba/' from dual union all select '/usr/local/lib/libx/' from dual union all select '/var/cache/' from dual union all select '/var/cache/'||'xyz'||rownum||'/' from dual connect by level <= 1e6; 

    Für die angegebenen Daten lautet das Ergebnis:

     PATH ------------------------------------------------------- /tmp/cat/ /tmp/cata/ /tmp/catb/ /usr/local/ /var/cache/ 

Source: https://habr.com/ru/post/de461971/


All Articles