O poder do Oracle SQL

Depois de ler o tópico de hoje “SQL. Tarefas divertidas ” , lembrei que há muito tempo desejava recomendar um excelente livro para o nível avançado do Oracle SQL do nosso excelente especialista em Oracle, Alex Reprintsev -“ O Poder do Oracle SQL ”. Além de ser extremamente útil para quem deseja conhecer o Oracle SQL em alto nível, também é gratuito ! Além disso, existem versões em russo e inglês.

Em geral, links para o próprio livro .

E discutir o livro em si com o autor .

E para propagar alguns exemplos de tarefas:

  • Componentes conectados
    existe um gráfico não direcionado (não direcional) definido por uma lista de arestas e
    necessário para obter componentes conectados.

    Para os dados na tabela abaixo:

    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; 

    O seguinte resultado é esperado (a ordem de numeração dos componentes não é crítica):

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

  • Ordenando dependências
    Agora considere o problema em um gráfico direcionado (direcionado).
    Existe uma tabela com dependências entre objetos que não contém códigos cíclicos
    dependências. No entanto, mais de um caminho pode existir entre pares de vértices, portanto,
    Essa estrutura não pode ser chamada de árvore.

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

    É necessário contornar todos os objetos no número mínimo de etapas, enquanto em cada etapa
    Você pode ignorar apenas os objetos para os quais todos os objetos dependentes são ignorados. Ou seja, em
    a primeira etapa ignora objetos que não possuem dependências; na segunda, aqueles que dependem
    dos objetos do primeiro passo e assim por diante. Em outras palavras, as dependências de profundidade são numeradas.
  • Faixas de cobertura
    Suponha que exista uma tabela com o seguinte formato:

     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; um único

    É necessário obter os segmentos (1:15), (17:26), (28:45), ou seja, partimos da linha com
    mínimo a , e pegue a próxima linha de modo que, para ele, seja maior que b da linha atual e, portanto,
    mais adiante.
  • Caminhos principais
    Para uma tabela com uma lista de diretórios no sistema de arquivos, imprima somente aqueles que não possuem
    subdiretório.

     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 os dados indicados, o resultado será:

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

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


All Articles