Cours 9
REQUÊTES COMBINÉES


Quelques exemples utiles


Référence: Exemples de SELECT



Pour trouver le plus gros salaire dans Authors:

SELECT max(salary) FROM authors;


Mais il n'y a pas de façon simple de trouver le nom de la personne qui a le plus gros salaire - les fonctions stats ne fonctionnent que sur des groupes.

Dans d'autres implantations de SQL, on utilise un "embedded SELECT", comme:

SELECT lname, fname
FROM authors
WHERE salary = (SELECT max(salary) FROM authors);




Pour les cours qui suivent, nous allons utiliser l'interface MS-ACCESS pour accéder à la base de données BookStore en MySQL.

Il faut d'abord créer un DSN approprié en Windows. Voir: Notes de cours 11.

Après avoir établi la connection, il suffit de lier les tables MySQL à l'application Access.




Le "embedded SELECT" n'existe pas en MySQL, ce qui rend le travail un peu plus compliqué.

D'abord, il faut créer une table temporaire en utilisant la commande SELECT ... INTO ... pour mettre des données dans cette table temporaire.

Puis on peut regarder le résultat et après, se débarasser de la table temporaire.

SELECT max(auSalary) AS MaxSalary INTO tmp FROM authors

SELECT auFname, auLname, auState
     FROM authors, tmp
     WHERE auSalary = MaxSalary

DROP TABLE tmp









On peut même le faire plus complexe.

Affichez le(s) auteur(s) avec le plus gros salaire dans chaque état.

     SELECT auState as MaxState, max(auSalary) as MaxSal INTO tmp FROM authors
     GROUP BY auState

SELECT aufname, aulname, maxstate, maxsal
     FROM authors, tmp
     WHERE auSalary = maxsal
     AND auState = maxstate

DROP TABLE tmp



Par exemple, trouver les auteurs qui ont un salaire plus grand que la moyenne:

SELECT avg(auSalary) as SalMoy INTO tmp FROM authors

SELECT aufname, aulname, austate, SalMoy, ausalary
     FROM authors, tmp
     WHERE ausalary > SalMoy

DROP TABLE tmp












La requête UNION


Pour pouvoir exécuter des requêtes UNION, vous devez télécharger la version 4 de MySQL. Cette version est maintenant disponible sur le site MySQL.com à MySQL 4.0.


La requête UNION est une technique qui permet d'afficher dans une même requête des tables qui n'ont pas de relations.

En fait, UNION est une concaténation de requêtes.

Par exemple, en supposant que nous avons une table etudiants et une autre table profs qui contiennent des champs similaires mais qui n'ont pas de lien direct entre elles, on pourrait afficher l'information des deux tables comme ceci:

SELECT enom, erue, eville, edatenaiss FROM etudiants
UNION
SELECT pnom, prue, pville, pdaten FROM profs


Une application intéressante de ceci consiste à afficher des totaux de colonnes dans une requête. Il n'y a pas d'autre façon de le faire.

Étudiez l'exemple qui suit:








Haut de la page