CodeGym /Cours /SQL SELF /Extraction des données d’un tableau : unnest()

Extraction des données d’un tableau : unnest(), array_length(), array_position()

SQL SELF
Niveau 35 , Leçon 2
Disponible

Extraction des données d’un tableau : unnest(), array_length(), array_position()

Travailler avec les tableaux, ce n’est pas juste les créer et les stocker — souvent, t’as besoin d’extraire des éléments ou d’analyser leur contenu. PostgreSQL propose plusieurs fonctions intégrées pour ce genre d’opérations. On va les voir une par une.

Fonction unnest() : déballer un tableau

La fonction unnest() déballe littéralement un tableau, en transformant ses éléments en lignes séparées. C’est super utile si tu veux manipuler les données du tableau comme une table.

Exemple 1 : Déballage simple d’un tableau

Imaginons qu’on a un tableau avec des noms de facultés :

SELECT ARRAY['Informatique', 'Mathématiques', 'Physique'] AS facultes;

Maintenant, on veut extraire chaque élément comme une ligne séparée. On utilise unnest() :

SELECT unnest(ARRAY['Informatique', 'Mathématiques', 'Physique']) AS faculte;

Résultat :

faculte
Informatique
Mathématiques
Physique

Exemple 2 : Déballer un tableau dans une table

Supposons qu’on a une table courses :

CREATE TABLE courses (
    course_id SERIAL PRIMARY KEY,
    course_name TEXT,
    tags TEXT[]
);

INSERT INTO courses (course_name, tags)
VALUES
    ('Algorithmes', ARRAY['Programmation', 'Informatique']),
    ('Algèbre linéaire', ARRAY['Mathématiques', 'Algèbre']),
    ('Physique de base', ARRAY['Physique', 'Général']);

Maintenant, on va extraire tous les tags du tableau :

SELECT course_name, unnest(tags) AS tag
FROM courses;

Résultat :

course_name tag
Algorithmes Programmation
Algorithmes Informatique
Algèbre linéaire Mathématiques
Algèbre linéaire Algèbre
Physique de base Physique
Physique de base Général

Tu vois, chaque élément du tableau devient une ligne séparée dans la table.

Fonction array_length() : déterminer la taille d’un tableau

La deuxième fonction importante pour bosser avec les tableaux, c’est array_length(). Elle te donne la longueur du tableau (c’est-à-dire le nombre d’éléments) pour la dimension indiquée.

Exemple 1 : Nombre d’éléments dans un tableau à une dimension

Prenons un tableau :

SELECT ARRAY['Pomme', 'Banane', 'Orange'] AS fruits;

Si tu veux savoir combien de fruits il y a dans le tableau :

SELECT array_length(ARRAY['Pomme', 'Banane', 'Orange'], 1) AS longueur;

Résultat :

longueur
3

Ici, 1 indique la dimension du tableau. Les tableaux dans PostgreSQL peuvent avoir plusieurs dimensions (genre des tableaux à deux dimensions), mais ça, on en parlera une autre fois.

Exemple 2 : Nombre d’éléments dans un tableau d’une table

Voyons combien de tags chaque cours possède :

SELECT course_name, array_length(tags, 1) AS nombre_de_tags
FROM courses;

Résultat :

course_name nombre_de_tags
Algorithmes 2
Algèbre linéaire 2
Physique de base 2

La fonction te dit juste : « Hey, ici y’a deux éléments ! », et ça simplifie déjà pas mal l’analyse des données.

Fonction array_position() : chercher une valeur dans un tableau

Maintenant, imagine que tu cherches un élément précis dans un tableau. La fonction array_position() est là pour ça : elle te donne la position de la première occurrence de l’élément.

Exemple 1 : Chercher un élément

Imaginons qu’on a un tableau :

SELECT ARRAY['Rouge', 'Bleu', 'Vert', 'Jaune'] AS couleurs;

Essayons de trouver la position de l’élément "Bleu" :

SELECT array_position(ARRAY['Rouge', 'Bleu', 'Vert', 'Jaune'], 'Bleu') AS position;

Résultat :

position
2

Si l’élément n’est pas là, la fonction renvoie NULL. On va vérifier :

SELECT array_position(ARRAY['Rouge', 'Bleu', 'Vert', 'Jaune'], 'Noir') AS position;

Résultat :

position
NULL

Exemple 2 : Chercher dans un tableau d’une table

Tu veux savoir quel cours a le tag "Informatique". D’abord, on trouve les lignes concernées :

SELECT course_name, array_position(tags, 'Informatique') AS position
FROM courses;

Résultat :

course_name position
Algorithmes 2
Algèbre linéaire NULL
Physique de base NULL

Maintenant, ajoute un filtre pour ne garder que les lignes où le tag existe :

SELECT course_name
FROM courses
WHERE array_position(tags, 'Informatique') IS NOT NULL;

Résultat :

course_name
Algorithmes

La fonction array_position() permet de trouver rapidement des données dans un tableau, ce qui en fait une des fonctions clés pour bosser avec les tableaux dans PostgreSQL.

Utilisation pratique des fonctions

  • unnest() — à utiliser pour transformer les tableaux en lignes. C’est super important pour l’analyse de données, la création de rapports et la gestion des tags.
  • array_length() — parfait pour vérifier la longueur des tableaux. Par exemple, tu peux t’en servir pour valider les données : vérifier qu’un tableau n’est pas vide.
  • array_position() — un super outil pour chercher des éléments, que ce soit des catégories de produits, la participation d’un étudiant à un projet ou des mots-clés dans une description.

Erreurs fréquentes avec ces fonctions

  1. unnest() peut doubler le nombre de lignes si tu l’utilises sur plusieurs colonnes de tableaux en même temps. Tu peux régler ça avec JOIN LATERAL ou CROSS JOIN, mais fais gaffe.
  2. array_length() renvoie NULL pour un tableau vide. Si ton tableau peut être vide, pense à vérifier ce cas à part.
  3. array_position() peut renvoyer NULL si l’élément n’existe pas. Donc, pense toujours à gérer ce cas dans tes filtres (IS NOT NULL).

Exemples concrets

Les tableaux dans PostgreSQL, ce n’est pas juste de la théorie, c’est un vrai outil qui marche super bien dans les projets réels. Par exemple, tu tiens un blog et chaque article a une liste de tags — le tableau te permet de filtrer facilement les articles par thème ou même de faire un top des catégories populaires.

Ou alors, tu analyses le comportement des utilisateurs qui choisissent plusieurs cours ou produits. Toutes ces préférences, c’est pratique de les stocker dans un tableau — et tout aussi pratique à traiter.

Et puis, les tableaux aident à valider les données : avec array_length(), tu peux par exemple limiter le nombre d’éléments — genre pour empêcher un utilisateur de choisir plus de cinq options.

Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION