La clause WITH

Les expressions de table communes : nommer une requête, en enchaîner plusieurs, ce que WITH apporte face à une sous-requête imbriquée, et WITH RECURSIVE pour parcourir une hiérarchie.

  • 20 cartes
  • 6 thèmes
  • Gratuit

Le programme, thème par thème

Le poids de chaque thème suit celui que lui donne l'examen.

  1. Notions
  2. Questions
  3. Ranger et relier
  4. Les chiffres
  5. Mises en situation
  6. Comprendre

Quelques cartes du deck

  • Expression de table commune (CTE) : de quoi s'agit-il ?

    Voir la réponse

    Requête nommée en tête d'une instruction par WITH nom AS (…) : le reste de l'instruction la cite comme une table, sans la recopier.

    Le nom n'existe que pendant cette instruction, rien n'est enregistré dans la base. On peut en enchaîner plusieurs, séparées par des virgules, chacune pouvant citer les précédentes.

  • La table employe(id, nom, id_chef) contient : 1 Roux (NULL), 2 Sam (1), 3 Tara (1), 4 Uma (2), 5 Vik (2), 6 Wen (3), 7 Xav (4). Quels noms rend cette requête ?

    ```sql
    WITH RECURSIVE equipe AS (
    SELECT id, nom FROM employe WHERE id = 2
    UNION ALL
    SELECT e.id, e.nom
    FROM employe e JOIN equipe q ON e.id_chef = q.id
    )
    SELECT nom FROM equipe;
    `

    • Sam, Uma, Vik et Xav
    • Sam, Uma et Vik
    • Uma, Vik et Xav
    • Roux, Sam, Uma, Vik et Xav
    Voir la réponse

    Sam, Uma, Vik et Xav

    L'amorce donne Sam ; le premier tour ajoute ses subordonnés directs, Uma et Vik ; le deuxième ajoute ceux d'Uma, Xav ; le troisième ne trouve personne et la récursion s'arrête. Roux, supérieure de Sam, n'est jamais atteinte.

  • Le nom donné par WITH nom AS (…) n'existe que pour … : il n'est pas enregistré dans la base.

    Voir la réponse

    Le nom donné par WITH nom AS (…) n'existe que pour cette seule instruction : il n'est pas enregistré dans la base.

    Dans l'instruction suivante, il faut le redéfinir : SELECT * FROM total_client répond relation "total_client" does not exist. Pour un nom durable, on crée une vue.

  • Amorce : de quoi s'agit-il ?

    Voir la réponse

    Première partie d'une requête récursive, exécutée une seule fois : elle fournit les lignes de départ que la partie récursive va étendre.

    Dans un organigramme, c'est par exemple SELECT … FROM employe WHERE id_chef IS NULL, la directrice. Sans amorce, la récursion n'aurait rien à étendre.