MySQL requêtes imbriquées

Publié le 6 Mai 2011

Voilà quelques jours que je bosse sur des rapports générés avec pas mal de procédures SQL. Même si j'adhère pas vraiment au SQL j'ai appris 2 ou 3 trucs sympas qui peuvent être assez sympa.

 

Voici donc l'un d'entre eux: Comment combiner 2 requètes (en l'occurence 2 SELECT) en une seule requête, ou encore comment utiliser les sous-requêtes.

 

Le but du jeu est de faire un premier SELECT qu'on pourrait stocker dans une table temporaire par exemple. Puis ensuite faire une deuxième requête sur cette table de résultat.

 

Et bien bonne nouvelle! On peut combiner les 2 SELECT en une seule requête et se passer de la table temporaire.

 

Voilà pour le principe ... peut-être un peu abstrait mais avec un exemple tout devient plus clair d'autant que la syntaxe est assez simple.

 

SELECT code_postal, SUM(prix_total) AS chiffre_affaire
FROM (
   SELECT nom_client, code_postal, SUM(total) AS prix_total
   FROM achats
   INNER JOIN clients ON (achats.client_id = client.id)
) AS achats_clients
GROUP BY code_postal
ORDER BY chiffre_affaire DESC;

 

Voilà 2 SELECT imbriqué qui permettent de savoir quelle zone géographique est la plus rentable pour votre commerce. Mais là n'est pas l'intérêt il y avait moyen de faire autrement (et surement mieux) mais je voulais illustrer la syntaxe des SELECT imbriqués.

 

Il est indispensable de nommer la sous-requête avec une instruction AS sinon on obtient l'erreur suivante:

 

ERROR 1248 (42000): Every derived table must have its own alias

Rédigé par Bliz

Publié dans #MySQL

Commenter cet article

Bliz 06/05/2011



Plus d'info ici: http://dev.mysql.com/tech-resources/articles/subqueries_part_1.html