Rechercher dans des tableaux
Opérateurs ANY, de contenance et de recouvrement.
Rechercher dans des tableaux est une leçon SQL Academy gratuite sur CoddyKit. Ceci est la leçon 2 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage SQL Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours SQL Academy comprend 4 leçons au total.
Les tableaux stockent plusieurs valeurs
Dans PostgreSQL, une colonne de tableau contient plusieurs valeurs dans une seule cellule. Avant de pouvoir effectuer des recherches dans les tableaux, il est utile de voir à quoi ils ressemblent.
La requête ci-dessous crée une table dans laquelle chaque produit peut appartenir à plusieurs catégories stockées dans un tableau de texte.
CREATE TABLE products (
id SERIAL PRIMARY KEY,
name TEXT,
tags TEXT[]
);
INSERT INTO products (name, tags) VALUES
('Laptop', ARRAY['electronics', 'computers', 'sale']),
('T-Shirt', ARRAY['clothing', 'summer', 'sale']),
('Coffee Mug', ARRAY['kitchen', 'gifts']),
('Headphones', ARRAY['electronics', 'audio']),
('Notebook', ARRAY['stationery', 'office']);Vérifier l'appartenance avec ANY
L'opérateur ANY vous permet de vérifier si une valeur apparaît n'importe où dans un tableau. La syntaxe est : value = ANY(array_column).
Cette requête trouve tous les produits étiquetés électronique.
SELECT name, tags
FROM products
WHERE 'electronics' = ANY(tags);ANY ne concerne pas seulement le texte
ANY fonctionne avec tout type de données qui prend en charge l'égalité. Voici une table de scores stockés dans des tableaux d'entiers. La requête récupère les étudiants qui ont obtenu un score parfait de 100 à au moins une évaluation.
CREATE TABLE students (
student TEXT,
scores INT[]
);
INSERT INTO students VALUES
('Alice', ARRAY[88, 95, 100]),
('Bob', ARRAY[70, 80, 90]),
('Carol', ARRAY[100, 100, 99]);
SELECT student, scores
FROM students
WHERE 100 = ANY(scores);Exclure des lignes avec NOT + ANY
Pour trouver les lignes où une valeur n'apparaît pas dans un tableau, combinez NOT avec ANY. Notez que value <> ANY(arr) a un sens différent — l'expression est vraie si un élément quelconque est différent, ce qui est presque toujours vrai.
Utilisez NOT (value = ANY(arr)) pour une vérification fiable de l'exclusion.
-- Find products that are NOT tagged as 'sale'
SELECT name, tags
FROM products
WHERE NOT ('sale' = ANY(tags));L'opérateur de contenance @>
L'opérateur @> vérifie si un tableau contient tous les éléments d'un autre tableau. Voyez-le ainsi : le tableau de gauche inclut-il chaque élément indiqué à droite ?
Cette requête trouve les produits qui possèdent à la fois l'étiquette électronique et l'étiquette promotion.
SELECT name, tags
FROM products
WHERE tags @> ARRAY['electronics', 'sale'];L'opérateur d'inclusion <@
L'opérateur <@ est l'inverse de @>. Il vérifie si le tableau de gauche est entièrement inclus dans celui de droite.
Cette requête trouve les produits dont la liste complète d'étiquettes est un sous-ensemble de l'ensemble électronique, informatique, promotion.
SELECT name, tags
FROM products
WHERE tags <@ ARRAY['electronics', 'computers', 'sale'];L'opérateur de recouvrement &&
L'opérateur && renvoie vrai lorsque deux tableaux partagent au moins un élément commun. Pour les tableaux, cela revient à demander : ces deux listes ont-elles un élément en commun ?
La requête ci-dessous trouve les produits qui partagent au moins une étiquette avec une liste de courses donnée.
SELECT name, tags
FROM products
WHERE tags && ARRAY['audio', 'summer', 'gifts'];Recouvrement ou contenance — différence essentielle
Il est facile de confondre @> et &&. Voici une comparaison claire :
tags @> ARRAY['a','b']— la ligne doit contenir à la fois 'a' et 'b'.tags && ARRAY['a','b']— la ligne doit contenir au moins un élément parmi 'a' et 'b'.
-- Contains: must have BOTH 'electronics' AND 'sale'
SELECT name FROM products WHERE tags @> ARRAY['electronics', 'sale'];
-- Overlap: must have AT LEAST ONE of 'electronics' or 'sale'
SELECT name FROM products WHERE tags && ARRAY['electronics', 'sale'];Utiliser array_length pour filtrer selon la taille
Vous souhaitez parfois trouver les lignes où le tableau contient un certain nombre d'éléments. array_length(arr, 1) renvoie le nombre d'éléments de la première dimension.
Cette requête trouve les produits possédant exactement trois étiquettes.
SELECT name, tags
FROM products
WHERE array_length(tags, 1) = 3;Combiner les recherches dans les tableaux avec d'autres conditions
Les opérateurs de tableaux fonctionnent avec les conditions SQL ordinaires. Vous pouvez les combiner avec AND, OR et tout autre prédicat de clause WHERE pour créer des filtres précis.
-- Products tagged 'sale' AND whose name starts with a letter before 'N'
SELECT name, tags
FROM products
WHERE 'sale' = ANY(tags)
AND name < 'N'
ORDER BY name;Indexer les tableaux pour accélérer les recherches
Pour les grandes tables, les recherches dans les tableaux peuvent être lentes sans index. L'index GIN (index inversé généralisé) de PostgreSQL est conçu pour les colonnes de tableaux et prend efficacement en charge les opérateurs @>, <@ et &&.
ANY n'utilise pas directement un index GIN, mais les opérateurs de recouvrement et de contenance l'utilisent.
-- Create a GIN index on the tags array column
CREATE INDEX idx_products_tags ON products USING GIN (tags);
-- This query can now use the index
SELECT name FROM products WHERE tags @> ARRAY['electronics'];Vérification rapide : opérateurs de tableaux
Vérifiez votre compréhension des opérateurs de recherche dans les tableaux PostgreSQL.
Récapitulatif de la leçon
Dans cette leçon, vous avez appris trois méthodes essentielles pour effectuer des recherches dans les tableaux PostgreSQL :
- = ANY(arr) — vérifie si une valeur unique existe quelque part dans le tableau.
- @> (contient) — vérifie que le tableau inclut tous les éléments indiqués.
- && (recouvrement) — vérifie que le tableau partage au moins un élément avec un autre tableau.
Vous avez également découvert <@ pour vérifier l'inclusion inverse, array_length pour filtrer selon la taille, et l'index GIN pour accélérer les recherches dans les tableaux sur de grands ensembles de données. La combinaison de ces opérateurs avec des conditions WHERE standard vous offre un contrôle précis et expressif sur les données à valeurs multiples.
Questions Fréquemment Posées
La leçon « Rechercher dans des tableaux » est-elle gratuite ?
Oui — le texte complet de « Rechercher dans des tableaux » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours SQL Academy, passe à CoddyKit PRO. Le cours SQL Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Rechercher dans des tableaux » ?
Opérateurs ANY, de contenance et de recouvrement. Tu pratiques SQL Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer SQL Academy ?
Aucune expérience préalable n'est requise. SQL Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 2 sur 4.
Combien de temps prend la leçon « Rechercher dans des tableaux » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon SQL Academy ?
Oui. Chaque leçon SQL Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Principes des colonnes de tableaux
- Rechercher dans des tableaux
- UNNEST et agrégation
- Tableaux ou tables normalisées