Setelah membaca topik hari ini
“SQL. Menghibur tugas, " Saya ingat bahwa saya sudah lama ingin merekomendasikan buku yang bagus untuk tingkat lanjut Oracle SQL dari spesialis Oracle kami yang sangat baik, Alex Reprintsev -" Kekuatan Oracle SQL ". Tidak hanya itu sangat berguna bagi mereka yang ingin tahu Oracle SQL pada tingkat tinggi, juga
gratis ! Selain itu, ada versi dalam bahasa Rusia dan Inggris.
Secara umum,
tautan ke buku itu sendiri .
Dan untuk
membahas buku itu sendiri dengan penulis .
Dan untuk menanamkan beberapa contoh tugas dari itu:
- Komponen yang terhubung
ada grafik yang tidak terarah (non-directional) yang ditentukan oleh daftar tepi dan
diperlukan untuk mendapatkan komponen yang terhubung.
Untuk data dalam tabel di bawah:
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;
Diharapkan hasil berikut (urutan penomoran komponen tidak kritis):
X GRP
- Ketergantungan memesan
Sekarang pertimbangkan masalah pada grafik terarah (terarah).
Ada tabel dengan dependensi antara objek yang tidak mengandung siklik
ketergantungan. Namun, lebih dari satu jalur mungkin ada di antara pasangan simpul
Struktur seperti itu tidak dapat disebut pohon.
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);
Perlu untuk berkeliling semua objek dalam jumlah minimum langkah, sementara pada setiap langkah
Anda dapat mem-bypass hanya objek-objek yang semua objek dependen dilewati. Yaitu, on
langkah pertama mem-bypass objek yang tidak memiliki dependensi, pada langkah kedua, mereka yang bergantung
dari objek langkah pertama dan seterusnya. Dengan kata lain, dependensi kedalaman diberi nomor.
- Rentang mencakup
Misalkan ada tabel dengan bentuk berikut:
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 untuk setiap pasangan a, b; sebuah yang unik
Adalah perlu untuk mendapatkan segmen (1:15), (17:26), (28:45), yaitu, kita mulai dari garis dengan
minimum a , dan ambil baris berikutnya sehingga untuk itu a lebih besar dari b dari baris saat ini dan seterusnya
selanjutnya.
- Jalur teratas
Untuk tabel dengan daftar direktori di sistem file, output hanya yang tidak punya
subdirektori.
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;
Untuk data yang ditunjukkan, hasilnya adalah:
PATH