Soit un modèle de données composé de trois tables :
Une table PAYS. Celle-ci comporte 5 champs :
ID_PAYS(champ entier numérique)COD_PAYS(chaîne de caractère variable de 20 caractères maximum)LIB_PAYS(chaîne de caractère fixe de 50 caractères)RICH_PAR_HABITANT(champ numérique avec deux chiffres après la virgule en précision)
La clé primaire de la table est
ID_PAYS.Une table REGION. Celle-ci comporte 4 champs :
ID_REGION(champ numérique)COD_REGION(chaîne de caractère variable de 20 caractères maximum)LIB_REGION(chaîne de caractère fixe de 50 caractères)ID_PAYS(champ entier numérique)
La clé primaire de la table est
ID_REGION.Une table REGROUPEMENT_COMMERCIAL_PAYS permettant d’indiquer, pour un pays donné, à quel regroupement commercial il appartient. Un regroupement peut contenir plusieurs pays et un pays peut appartenir à plusieurs regroupements.
Champs :
ID_RGP_CCIALID_PAYSLIB_RGP
Questions#
Écrivez une requête SQL permettant de remonter pour chaque pays, les régions associées. (Ne pas prendre les pays qui n’ont pas de région.)
SELECT P.LIB_PAYS, R.LIB_REGION FROM PAYS P INNER JOIN REGION R ON P.ID_PAYS = R.ID_PAYS;Écrivez une requête SQL permettant de compter le nombre de région qu’il y a dans chaque pays. (Afficher aussi les pays qui n’ont aucune région.)
SELECT P.LIB_PAYS, COUNT(R.ID_REGION) AS NB_REGIONS FROM PAYS P LEFT JOIN REGION R ON P.ID_PAYS = R.ID_PAYS GROUP BY P.ID_PAYS, P.LIB_PAYS;Écrivez une requête permettant de sélectionner toutes les régions du pays France. (La valeur de
COD_PAYSestFR.)SELECT R.* FROM REGION R INNER JOIN PAYS P ON R.ID_PAYS = P.ID_PAYS WHERE P.COD_PAYS = 'FR';Écrivez une requête permettant de sélectionner les pays qui n’ont pas de regroupement commercial.
SELECT P.* FROM PAYS P WHERE NOT EXISTS ( SELECT 1 FROM REGROUPEMENT_COMMERCIAL_PAYS RCP WHERE RCP.ID_PAYS = P.ID_PAYS );Écrivez une requête permettant d’afficher le libellé de tous les pays composés d’au moins 2 régions.
SELECT P.LIB_PAYS FROM PAYS P INNER JOIN REGION R ON P.ID_PAYS = R.ID_PAYS GROUP BY P.ID_PAYS, P.LIB_PAYS HAVING COUNT(R.ID_REGION) >= 2;
