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