El poder de Oracle SQL

Habiendo leído el tema de hoy “SQL. Tareas entretenidas " , recordé que siempre había querido recomendar un excelente libro para el nivel avanzado de Oracle SQL de nuestro excelente especialista de Oracle, Alex Reprintsev -" El poder de Oracle SQL ". No solo es extremadamente útil en sí mismo para aquellos que desean conocer Oracle SQL a un alto nivel, ¡también es gratis ! Además, hay versiones en ruso e inglés.

En general, enlaces al libro en sí .

Y para discutir el libro en sí con el autor .

Y para sembrar un par de ejemplos de tareas de él:

  • Componentes conectados
    hay un gráfico no dirigido (no direccional) definido por una lista de aristas y
    requerido para conectar componentes.

    Para los datos en la tabla a continuación:

    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; 

    Se espera el siguiente resultado (el orden de numeración de los componentes no es crítico):

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

  • Ordenar dependencias
    Ahora considere el problema en un gráfico dirigido (dirigido).
    Hay una tabla con dependencias entre objetos que no contiene ciclos
    dependencias Sin embargo, puede existir más de una ruta entre pares de vértices, por lo tanto
    Tal estructura no se puede llamar un árbol.

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

    Es necesario rodear todos los objetos en el número mínimo de pasos, mientras que en cada paso
    Puede omitir solo aquellos objetos para los que se omiten todos los objetos dependientes. Es decir, en
    el primer paso pasa por alto los objetos que no tienen dependencias; en el segundo paso, los que dependen
    de los objetos del primer paso y así sucesivamente. En otras palabras, las dependencias de profundidad están numeradas.
  • Rangos de cobertura
    Supongamos que hay una tabla de la siguiente forma:

     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 para cada par a, b; un unico

    Es necesario obtener los segmentos (1:15), (17:26), (28:45), es decir, comenzamos desde la línea con
    mínimo a , y tome la siguiente línea de tal manera que a sea mayor que b de la línea actual y así
    más lejos
  • Mejores caminos
    Para una tabla con una lista de directorios en el sistema de archivos, envíe solo aquellos que no tienen
    subdirectorio

     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; 

    Para los datos indicados, el resultado será:

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

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


All Articles