La puissance d'Oracle SQL

Après avoir lu le sujet d'aujourd'hui «SQL. Tâches divertissantes », je me souvenais que je voulais depuis longtemps recommander un excellent livre pour le niveau avancé d'Oracle SQL de notre excellent spécialiste Oracle, Alex Reprintsev -« The Power of Oracle SQL ». Non seulement il est extrêmement utile en soi pour ceux qui veulent connaître Oracle SQL à un niveau élevé, mais il est également gratuit ! De plus, il existe des versions en russe et en anglais.

En général, des liens vers le livre lui-même .

Et pour discuter du livre lui-même avec l'auteur .

Et pour en semer quelques exemples de tâches:

  • Composants connectés
    il y a un graphique non orienté (non directionnel) défini par une liste d'arêtes et
    nécessaire pour obtenir les composants connectés.

    Pour les données du tableau ci-dessous:

    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; 

    Le résultat suivant est attendu (l'ordre de numérotation des composants n'est pas critique):

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

  • Ordonner les dépendances
    Considérons maintenant le problème sur un graphique dirigé (dirigé).
    Il existe une table avec des dépendances entre les objets qui ne contient pas de cyclique
    dépendances. Cependant, plusieurs chemins peuvent exister entre des paires de sommets, donc
    Une telle structure ne peut pas être appelée arbre.

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

    Il est nécessaire de faire le tour de tous les objets dans le nombre minimum d'étapes, tandis qu'à chaque étape
    Vous pouvez contourner uniquement les objets pour lesquels tous les objets dépendants sont contournés. Autrement dit, le
    la première étape contourne les objets qui n'ont pas de dépendances; dans la deuxième étape, ceux qui dépendent
    des objets de la première étape et ainsi de suite. En d'autres termes, les dépendances de profondeur sont numérotées.
  • Couvertures
    Supposons qu'il existe un tableau de la forme suivante:

     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 pour chaque paire a, b; un unique

    Il est nécessaire d'obtenir les segments (1:15), (17:26), (28:45), c'est-à-dire que nous partons de la ligne avec
    au minimum a , et prenez la ligne suivante de telle sorte que pour elle a soit supérieur à b de la ligne actuelle et ainsi
    plus loin.
  • Chemins supérieurs
    Pour une table avec une liste de répertoires dans le système de fichiers, affichez uniquement ceux qui n'ont pas
    sous-répertoire.

     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; 

    Pour les données indiquées, le résultat sera:

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

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


All Articles