Kekuatan Oracle SQL

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 --- ----- 10 1 20 1 30 1 40 1 50 1 60 2 70 2 80 2 90 1 

  • 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 ------------------------------------------------------- /tmp/cat/ /tmp/cata/ /tmp/catb/ /usr/local/ /var/cache/ 

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


All Articles