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 
 
 
- 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