importantly, keep learning!# SQL - Sous-requêtes

SQL - Sub Queries

Bonjour, aspirants passionnés de SQL ! Je suis ravi de vous guider sur ce voyage passionnant à la découverte du monde des sous-requêtes SQL. En tant que quelqu'un qui enseigne l'informatique depuis de nombreuses années, je peux vous dire que les sous-requêtes sont comme la sauce secrète qui peut transformer vos compétences en SQL du bon au grandiose. Alors, plongeons ensemble et dévoilons les mystères des sous-requêtes !

Sous-requêtes SQL

Qu'est-ce que les sous-requêtes ?

Imaginez que vous faites un sandwich. Le pain est votre requête principale, mais ce qui le rend vraiment délicieux, ce sont les garnitures à l'intérieur - c'est votre sous-requête ! En termes SQL, une sous-requête est une requête imbriquée à l'intérieur d'une autre requête. C'est comme poser une question à l'intérieur d'une autre question, ce qui vous permet de réaliser des opérations complexes qui ne seraient pas possibles avec une seule requête.

Regardons un exemple simple :

SELECT employee_name
FROM employees
WHERE department_id = (SELECT department_id FROM departments WHERE department_name = 'Marketing');

Dans cette requête, la partie à l'intérieur des parenthèses est notre sous-requête. Elle trouve le department_id du département Marketing, который est ensuite utilisé par la requête externe pour trouver tous les employés de ce département.

Règles à suivre

Avant de plonger plus profondément, examinons quelques règles importantes à suivre lors de l'utilisation des sous-requêtes :

  1. Les sous-requêtes doivent être entourées de parenthèses.
  2. Une sous-requête peut avoir seulement une colonne dans la clause SELECT, sauf si plusieurs colonnes sont dans la requête principale pour comparaison.
  3. Une commande ORDER BY ne peut pas être utilisée dans une sous-requête, bien que la requête principale puisse utiliser un ORDER BY.
  4. Les sous-requêtes qui retournent plus d'une ligne ne peuvent être utilisées qu'avec des opérateurs de plusieurs valeurs tels que l'opérateur IN.

Voici un tableau pratique résumant ces règles :

Règle Description
Parenthèses Les sous-requêtes doivent être entourées de parenthèses
Colonnes La sous-requête SELECT retourne généralement une seule colonne
Pas d'ORDER BY ORDER BY ne peut pas être utilisé dans une sous-requête
Lignes multiples Utilisez des opérateurs de plusieurs valeurs pour les sous-requêtes retournant plusieurs lignes

Sous-requêtes avec la déclaration SELECT

Les sous-requêtes sont le plus souvent utilisées avec la déclaration SELECT. Elles peuvent être extrêmement puissantes pour récupérer des données basées sur des conditions dynamiques. Jetons un œil à un exemple plus complexe :

SELECT product_name, price
FROM products
WHERE price > (SELECT AVG(price) FROM products);

Cette requête sélectionne tous les produits dont le prix est supérieur à la moyenne des prix de tous les produits. La sous-requête calcule la moyenne des prix, et la requête principale utilise ce résultat pour filtrer les produits.

Voici un autre exemple qui utilise une sous-requête dans la clause SELECT :

SELECT 
    employee_name,
    salary,
    (SELECT AVG(salary) FROM employees) as avg_salary
FROM employees;

Cette requête non seulement récupère le nom et le salaire de chaque employé, mais inclut également le salaire moyen de tous les employés dans chaque ligne. C'est comme avoir un mini-rapport pour chaque employé !

Sous-requêtes avec la déclaration INSERT

Les sous-requêtes peuvent également être utilisées avec des déclarations INSERT pour remplir une table avec des données d'une autre table. Voici un exemple :

INSERT INTO high_salary_employees (employee_id, employee_name, salary)
SELECT employee_id, employee_name, salary
FROM employees
WHERE salary > (SELECT AVG(salary) * 1.5 FROM employees);

Cette requête insère dans la table high_salary_employees tous les employés dont le salaire est supérieur de 1,5 fois à la moyenne des salaires. C'est comme créer une liste VIP de vos meilleurs earners !

Sous-requêtes avec la déclaration UPDATE

Les sous-requêtes peuvent rendre vos déclarations UPDATE beaucoup plus puissantes. Jetons un œil à un exemple :

UPDATE products
SET price = price * 1.1
WHERE category_id = (SELECT category_id FROM categories WHERE category_name = 'Electronics');

Cette requête augmente le prix de tous les produits de la catégorie 'Electronics' de 10 %. La sous-requête trouve le category_id pour 'Electronics', который est ensuite utilisé par la requête principale pour mettre à jour les produits corrects.

Sous-requêtes avec la déclaration DELETE

Enfin, voyons comment les sous-requêtes peuvent être utilisées avec des déclarations DELETE :

DELETE FROM orders
WHERE customer_id IN (
    SELECT customer_id
    FROM customers
    WHERE last_order_date < DATE_SUB(CURDATE(), INTERVAL 1 YEAR)
);

Cette requête supprime toutes les commandes des clients qui n'ont pas passé de commande au cours de l'année dernière. La sous-requête trouve tous ces clients, et la requête principale supprime leurs commandes.

Et voilà, amis ! Nous avons traversé le pays des sous-requêtes SQL, des concepts de base aux applications plus avancées. Souvenez-vous, la pratique rend parfait, donc n'ayez pas peur d'expérimenter avec ces requêtes sur vos propres bases de données.

Comme je le dis toujours à mes élèves, SQL est comme un couteau suisse - et les sous-requêtes sont cette lame cachée qui peut vous sortir de situations délicates. Alors, continuez à explorer, continuez à interroger, et surtout, continuez à apprendre !

Credits: Image by storyset