PostgreSQL - Sous-requêtes

Salut à toi, aspirant passionné de bases de données ! Aujourd'hui, nous plongeons dans le monde fascinant des sous-requêtes PostgreSQL. Pense aux sous-requêtes comme à de petits assistants qui aident ta requête principale à récupérer ou à manipuler des données. Ils sont comme les fidèles sidekicks dans tes films de super-héros préférés - pas toujours sous les projecteurs, mais essentiels pour accomplir la tâche !

PostgreSQL - Sub Queries

Sous-requêtes avec l'instruction SELECT

Commençons par l'utilisation la plus courante des sous-requêtes - à l'intérieur d'une instruction SELECT. Imaginons que tu gères une librairie et que tu veux découvrir quels livres sont au-dessus du prix moyen. Voici comment tu ferais :

SELECT title, price
FROM books
WHERE price > (SELECT AVG(price) FROM books);

Dans cette requête, la partie (SELECT AVG(price) FROM books) est notre sous-requête. Elle calcule le prix moyen de tous les livres, et puis notre requête principale utilise cette valeur pour filtrer les résultats.

Reprenons :

  1. La sous-requête calcule le prix moyen.
  2. La requête principale compare le prix de chaque livre à ce moyenne.
  3. Seuls les livres avec un prix supérieur à la moyenne sont retournés.

Voici un autre exemple. Imaginons que tu veux trouver tous les clients qui ont passé des commandes :

SELECT customer_name
FROM customers
WHERE customer_id IN (SELECT DISTINCT customer_id FROM orders);

Dans ce cas, notre sous-requête (SELECT DISTINCT customer_id FROM orders) retourne une liste d'ID de clients qui ont passé des commandes. La requête principale utilise alors cette liste pour filtrer la table des clients.

Sous-requêtes avec l'instruction INSERT

Maintenant, regardons comment les sous-requêtes peuvent être utilisées avec des instructions INSERT. Imaginons que tu crées une table 'livres vedettes' et que tu veux la remplir avec tous les livres qui ont vendu plus de 1000 exemplaires :

INSERT INTO featured_books (book_id, title, author)
SELECT book_id, title, author
FROM books
WHERE book_id IN (SELECT book_id FROM sales WHERE copies_sold > 1000);

Ici, notre sous-requête (SELECT book_id FROM sales WHERE copies_sold > 1000) trouve tous les livres qui ont vendu plus de 1000 exemplaires. La requête principale insère alors les détails de ces livres dans la table featured_books.

Sous-requêtes avec l'instruction UPDATE

Les sous-requêtes peuvent également être extrêmement utiles dans les instructions UPDATE. Imaginons que tu veux donner une réduction de 10 % à tous les livres des auteurs qui ont écrit plus de 5 livres :

UPDATE books
SET price = price * 0.9
WHERE author_id IN (
SELECT author_id
FROM books
GROUP BY author_id
HAVING COUNT(*) > 5
);

Dans cet exemple, notre sous-requête identifie les auteurs qui ont écrit plus de 5 livres. La requête principale met alors à jour les prix de tous les livres de ces auteurs.

Sous-requêtes avec l'instruction DELETE

Enfin, regardons comment les sous-requêtes peuvent être utilisées avec des instructions DELETE. Imaginons que tu veux supprimer toutes les commandes des clients qui n'ont pas fait d'achat au cours de l'année dernière :

DELETE FROM orders
WHERE customer_id IN (
SELECT customer_id
FROM customers
WHERE last_purchase_date < CURRENT_DATE - INTERVAL '1 year'
);

Ici, notre sous-requête trouve tous les clients qui n'ont pas fait d'achat au cours de l'année dernière. La requête principale supprime alors toutes les commandes de ces clients.

Méthodes courantes de sous-requêtes

Voici un tableau des méthodes courantes de sous-requêtes dans PostgreSQL :

Méthode Description Exemple
IN Vérifie si une valeur est dans l'ensemble de résultats de la sous-requête WHERE id IN (SELECT id FROM table)
EXISTS Vérifie si la sous-requête retourne des lignes WHERE EXISTS (SELECT 1 FROM table WHERE condition)
ANY Retourne vrai si l'une des valeurs de la sous-requête satisfait la condition WHERE column > ANY (SELECT column FROM table)
ALL Retourne vrai si toutes les valeurs de la sous-requête satisfy la condition WHERE column > ALL (SELECT column FROM table)

souviens-toi, la pratique rend parfait ! Essaie d'écrire tes propres requêtes, expérimente avec différents scénarios, et n'aie pas peur de faire des erreurs. C'est ainsi que nous apprenons et grandissons dans le merveilleux monde des bases de données !

Avant de conclure, voici une petite histoire de mon expérience d'enseignement. J'ai eu un étudiant qui avait du mal avec les sous-requêtes. Il mélangeait constamment la requête principale et la sous-requête. Alors, je lui ai dit de penser aux sous-requêtes comme à une poupée russe - la plus petite poupée (sous-requête) s'insère dans la plus grande (requête principale). Cette image lui a aidé à saisir le concept, et bientôt il écrivait des requêtes complexes comme un pro !

J'espère que ce tutoriel vous a été utile pour démystifier les sous-requêtes PostgreSQL. Continuez à interroger, continuez à apprendre, et surtout, amusez-vous avec les bases de données !

Credits: Image by storyset