Exercice 1 Soit la base de données d’un festival de musique : Dans une représentation peut participer un ou plusieurs musiciens. Un musici...
Exercice 1
Soit la base de données d’un festival de musique : Dans une représentation peut participer un ou plusieurs musiciens. Un musicien ne peut participer qu’à une seule représentation.
- Representation (Num_Rep , titre_Rep , lieu)
- Musicien (Num_mus , nom , #Num_Rep)
- Programmer (Date , #Num_Rep , tarif)
- La liste des titres des représentations.1
SELECTtitre_RepFROMRepresentation - La liste des titres des représentations ayant lieu au « théâtre allissa ».1
SELECTtitre_RepFROMRepresentationWHERElieu="theatre␣allissa" - La liste des noms des musiciens et des titres et les titres des représentations auxquelles ils participent.1
SELECTM.nom, R.titre_RepFROMMusicien MINNERJOINRepresentation RONR.Num_rep=M.Num_rep - La liste des titres des représentations, les lieux et les tarifs du 25/07/2008.12
SELECTR.titre_Rep, R.lieu,P.tarifFROMProgrammer PINNERJOINRepresentation RONP.Num_rep=R.Num_repWHEREP.date="25-07-2008" - Le nombre des musiciens qui participent à la représentations n°20.1
SELECTCOUNT(*)FROMMusicienWHERENum_rep =20 - Les représentations et leurs dates dont le tarif ne dépasse pas 20DH.12
SELECTR.Num_Rep , R.titre_Rep , P.DateFROMRepresentation RINNERJOINProgrammer PONR.Num_Rep=P.Num_RepWHEREP.tarif<=20
Exercice 2
Soit la base de données suivante :
- Départements :( DNO, DNOM, DIR, VILLE)
- Employés : ( ENO, ENOM, PROF, DATEEMB, SAL, COMM, #DNO)
Exprimez en SQL les requêtes suivantes :
- Donnez la liste des employés ayant une commission1
SELECT*FROMEmployesWHERECOMMNOTNULL - Donnez les noms, emplois et salaires des employés par emploi croissant, et pour chaque emploi, par salaire décroissant1
SELECTENOM,PROF, SALFROMEmployesORDERBYPROFASC, SALDESC - Donnez le salaire moyen des employés1
SELECTAVG(SAL)FROMEmployes - Donnez le salaire moyen du département Production12
SELECTAVG(E.SAL)FROMEmployes EINNERJOINDepartement DONE.DNO=D.DNOWHERED.DNOM="production" - Donnes les numéros de département et leur salaire maximum1
SELECTDNO,MAX(SAL)FROMEmployesGROUPBYDNO - Donnez les différentes professions et leur salaire moyen1
SELECTPROF,MAX(SAL)FROMEmployesGROUPBYPROF - Donnez le salaire moyen par profession le plus bas1234
SELECTPROF,AVG(SAL)asmoyFROMEmployesGROUPBYPROFORDERBYmoyASCLIMIT 1 - Donnez le ou les emplois ayant le salaire moyen le plus bas, ainsi que ce salaire moyen123
SELECTPROFFROMEmployesGROUPBYPROFHAVINGAVG(SAL)=(SELECTAVG(SAL)asmoyFROMEmployesGROUPBYPROFORDERBYmoyASCLIMIT 1)
Exercice 3
Soit le modèle relationnel suivant relatif à la gestion des notes annuelles d’une promotion d’étudiants :
- ETUDIANT(NEtudiant, Nom, Prénom)
- MATIERE(CodeMat, LibelléMat, CoeffMat)
- EVALUER(#NEtudiant, #CodeMat, Date, Note)
Exprimez en SQL les requêtes suivantes :
- Quel est le nombre total d’étudiants ?1
SELECTcount(*)FROMETUDIANT - Quelles sont, parmi l’ensemble des notes, la note la plus haute et la note la plus basse ?1
SELECTMIN(Note)as’plus basse note’,MAX(Note)as’plus haute note’FROMEVALUER - Quelles sont les moyennes de chaque étudiant dans chacune des matières ?123
SELECTE.NEtudiant, M.LibelléMat,AVG(EV.Note)ASMoyEtuMatFROMEVALUER EV, MATIERE M, ETUDIANT EWHEREEV.CodeMat = M.CodeMatANDEV.NEtudiant = E.NEtudiantGROUPBYE.NEtudiant, M.LibelléMat - Quelles sont les moyennes par matière ? Avec la vue MGETU de la question 3 ( MOYETUMAT)1
SELECTLibelleMat,AVG(MoyEtuMat)FROMMOYETUMATGROUPBYLibelleMat - Quelle est la moyenne générale de chaque étudiant ? Avec la vue MGETU de la question 3 ( MOYETUMAT)12
SELECTNEtudiant,SUM(MoyEtuMat*CoeffMat)/SUM(CoeffMat)ASMgEtuFROMMOYETUMATGROUPBYNEtudiant - Quelle est la moyenne générale de la promotion ? Avec la vue MGETU de la question 5 :1
SELECTAVG(MgEtu)FROMMGETU - Quels sont les étudiants qui ont une moyenne générale supérieure ou égale à la moyenne générale de la promotion? Avec la vue MGETU de la question 512
SELECTNEtudiant , Nom , Prenom , MgEtuFROMMGETUWHEREMgEtu >= (SELECTAVG(MgEtu)FROMMGETU)
Exercice 4
Soit la base de données intitulée "gestion_projet" permettant de gérer les projets relatifs au développement de logiciels. Elle est décrite par la représentation textuelle simplifiée suivante :
- Developpeur (NumDev, NomDev, AdrDev, EmailDev, TelDev)
- Projet (NumProj, TitreProj, DateDeb, DateFin)
- Logiciel (CodLog, NomLog, PrixLog, #NumProj)
- Realisation (#NumProj, #NumDev)
Ecrire les requêtes SQL permettant :
- D’afficher les noms et les prix des logiciels appartenant au projet ayant comme titre « gestion de stock », triés dans l’ordre décroissant des prix .123
SELECTL.NomLog, L.PrixLogFROMLogiciel LINNERJOINProjet PONL.NumProj=P.NumProjWHEREP.TitreProj="gestion␣de␣stock"ORDERBYL.PrixLogDESC - D’afficher le total des prix des logiciels du projet numéro 10. Lors de l’affichage, le titre de la colonne sera « cours total du projet ».1
SELECTSUM(PrixLog)as"cout␣total␣du␣projet"FROMLogicielWHERENumPRoj=10 - Afficher le nombre de développeurs qui ont participé au projet intitulé « gestion de stock »12
SELECTcount(*)FROMDeveloppeur DINNERJOINRealisation ROND.NumDev=R.NumDevINNERJOINProjet PONP.NumProj=R.NumProj - Afficher les projets qui ont plus que 5 logiciels123
SELECTNumProj, TitreProjFROMPRojet PINNERJOINLogiciel LONP.NumProj=L.NumProjGROUPBYNumProj, TitreProjHAVINGcount(*)>5 - Les numéros et noms des développeurs qui ont participés dans tout les projets.123
SELECTNumDev, NomDevFROMDeveloppeur DINNERJOINRealisation ROND.NumDev=R.NumDevGROUPBYNumDev, NomDevHAVINGcount(*)=(SELECTCOUNT(*)FROMProjet) - Les numéros de projets dans lesquelles tous les développeurs y participent dans sa réalisation.123
SELECTNumProj, TitreProjFROMProjet PINNERJOINRealisation RONP.NumProj=R.NumProjGROUPBYNumProj, TitreProjHAVINGcount(*)=(SELECTCOUNT(*)FROMDeveloppeur)
Exercice 5
Ci-après, on donne la représentation textuelle simplifiée d’une base de données concernant un cycle de formation destiné à des étudiants. Il regroupe un ensemble de matières. On considère que chaque enseignant n’enseigne qu’une seule matière et qu’à la fin du cycle de formation, une note par matière, est attribuée à chaque étudiant. D’autre par, les étudiants peuvent ne pas suivre les mêmes matières.
- ETUDIANT(CodeEt, NomEt, DatnEt)
- MATIERE(CodeMat, NomMat, CoefMat)
- ENSEIGNANT(CodeEns, NomEns, GradeEns, #CodeMat)
- NOTE(#CodeEt, #CodeMat, note)
Ecrire les requêtes SQL permettant d’afficher :
- Les informations relatives aux étudiants (Code, Nom et Date de naissance) selon l’ordre alphabétique croisant du nom1
SELECT*FROMETUDIANTORDERBYNomEtASC - Les noms et les grades des enseignants de la matière dont le nom est ‘BD’.12
SELECTE.NomEns, E.GradeEnsFROMENSEIGNANT EINNERJOINMATIERE MONM.CodeMat=E.CodeMatWHEREM.NomMat="BD" - La liste distincte formée des noms et les coefficients des différentes matières qui sont enseignées par des enseignants de grade ‘Grd3’.12
SELECTDISTINCT(M.NomMat), M.CoefMatFROMENSEIGNANT EINNERJOINMATIERE MONM.CodeMat=E.CodeMatWHEREE.GradeEns="Grd3" - La liste des matières (Nom et Coefficient) qui sont suivies par l’étudiant de code ‘Et321’.123
SELECTM.NomMat, M.CoefMatFROMMATIERE MINNERJOINNOTE NONM.CodeMat=N.CodeMatINNERJOINETUDIANT EONE.CodeEt=N.CodeEtWHEREE.CodeEt="Et321" - Le nombre d’enseignants de la matière dont le nom est ‘Informatique’12
SELECTCOUNT(*)FROMENSEIGNANT EINNERJOINMATIERE MONM.CodeMat=E.CodeMatWHEREM.NomMat="Informatique"
Exercice 6
On considère la base de données BD_AIR_MAROC suivante :
- PILOTE (NUMPIL, NOMPIL, VILLE, SALAIRE)
- AVION (NUMAV, NOMAV, CAPACITE, VILLE)
- VOL (NUMVOL, #NUMPIL, #NUMAV, VILLE_DEP, VILLE_ARR, H_DEP, H_ARR)
- Donnez la liste des avions dont la capacité est supérieure à 350 passagers.1
SELECT*FROMAVIONWHERECAPACITE>350 - Quels sont les numéros et noms des avions localisés à Marrakech ?1
SELECTNUMAV, NOMAVFROMAVIONWHEREVILLE=’Marrakech’ - Quels sont les numéros des pilotes en service et les villes de départ de leurs vols ?1
SELECTNUMPIL , VILLE_DEPFROMVOL - Donnez toutes les informations sur les pilotes de la compagnie.1
SELECT*FROMPILOTE - Quel est le nom des pilotes domiciliés à Meknès dont le salaire est supérieur à 20000 DH ?1
SELECTNOMPILFROMPILOTEWHEREVILLE=’Meknes’ANDSALAIRE>20000 - Quels sont les avions (numéro et nom) localisés à Marrakech ou dont la capacié est inférieure à 350 passagers ?1
SELECTNUMAV, NOMAVFROMAVIONWHEREVILLE=’Marrakech’ANDCAPACITE< 350 - Quels sont les numéros des pilotes qui ne sont pas en service ?1
SELECTNUMPILFROMPILOTEWHERENUMPILNOTIN(SELECTDISTINCTNUMPILFROMVOL) - Donnez le numéro des vols effectués au départ de Marrakech par des pilotes de Meknès ?Ou12
SELECTDISTINCTV.NUMVOLFROMVOLASV, PILOTEASPWHEREV.NUMPIL=P.NUMPILANDV.VILLE_DEP=’Marrakech’ANDP.VILLE=’Meknes’12SELECTDISTINCTNUMVOLFROMVOLWHEREV.VILLE_DEP=’Marrakech’ANDNUMPILNOTIN(SELECTNUMPILFROMPILOTEWHEREVILLE=’Meknes’) - Quels sont les vols effectu"s par un avion qui n’est pas localisé à Marrakech ?1
SELECTDISTINCTV.NUMVOLFROMVOL V, AVION AWHEREA.NUMAV=V.NUMAVANDA.VILLE !=’Marrakech’ - Quelles sont les villes desservies à partir de la ville d’arrivée d’un vol au départ de Guelmim ?1
SELECTDISTINCTVILLE_ARRFROMVOLWHEREVILLE_DEP=’Guelmim’ANDVILLE_DEP != VILLE_ARR
Exercice 7
Soit le schéma relationnel suivant :
- Departement (NomD, N_Dep, Directeur)
- Employe (Matricule, Nom, Prénom, DateNaissance, Adresse, Salaire, #N_dep, superieur)
- Projet (NomP, N_pro, Lieu, #N_Dep)
- Travaille (#Matricule, #N_Proj, Heures)
L’attribut supérieur dans la relation Employe contient le matricule du supérieur direct de l’employé. Chaque employé appartient à un département et travaille sur zéro, un ou plusieurs projets. Chaque projet est rattaché à un département qui peut être différent de celui des employés travaillant sur ce projet.
Exprimer en SQL les requêtes suivantes :
- Date de naissance et l’adresse de Taha Lamharchi.1
SELECTDateNaissance, AdresseFROMEmployeWHERENom=’Lamharchi’ANDPrenom =’Taha’ - Nom et adresse des employés qui travaillent au département de recherche.12
SELECTE.Nom, E.AdresseFROMEmployeasE, DepartementasDWHEREE.N_dep=D.N_depANDNomD=’recherche’ - Nom et Prénom des employés dont le supérieur est Taha Lamharchi.12
SELECTNom , PrenomFROMEmployeWHEREsuperieur=(SELECTMatriculeFROMEmployeWHERENom=’Lamharchi’ANDPrenom =’Taha’) - Nom des employés qui travaillent plus de 10heures sur un projet à Guelmim12
SELECTE.NomFROMEmployeasE, TravailleasT , Projet PWHEREE.Matricule=T.MatriculeANDT.N_proj=P.N_projANDT.heures >=10ANDP.Lieu=’Guelmim’ - Nom des projets sur lesquelles travaillent Taha Lamharchi et Dounia Mahmoud.123
SELECTT.N_projFROMTravailleasT,EmployeasEWHERET.Matricule=E.MatriculeANDE.Nom=’Lamharchi’ANDE.Prenom=’Taha’INTERSECTSELECTT.N_projFROMTravailleasT,EmployeasEWHERET.Matricule=E.MatriculeANDE.Nom=’Mahmoud’ANDE.Prenom=’Dounia’ - Nom et prénom des employés qui ne travaillent sur aucun projet.12
SELECTNom , PrenomFROMEmployeWHEREMatriculeNOTIN(SELECTMatriculeFROMTravaille) - Numéro des projets qui ont au moins un participant de chaque département.1234
SELECTT.N_projFROMTravailleasT,ProjetasP, EmployeasEWHERET.N_proj=P.N_projANDT.Matricule=E.MatriculeGROUPBYT.N_projHAVINGcount(DISTINCTE.N_dep)=(SELECTcount(*)FROMDepartement) - Nom des employés qui ne travaillent pas sur un projet à Guelmim.12
SELECTNomFROMEmployeWHEREMatriculeNOTIN(SELECTT.MatriculeFROMTravailleasT, ProjetasPWHERET.N_proj=P.N_projANDP.Lieu=’Guelmim’)
Exercice 8
Soit le schéma relationnel suivant qui représente la base de données d’une agence de voyage en ligne.
- CLIENT (NumCli, Nom, Prénom, e-mail, NumCB )
- VOYAGE (CodeVoyage, Destination, Durée, Prix )
- RESERVATION (#NumCli, #CodeVoyage, DateRes )
Formuler en SQL les requêtes suivantes :
- Nom, prénom et e-mail des clients ayant une réservation en cours12
SELECTNom, Prenom, e-mailFROMCLIENTWHERENumCliIN(SELECTDISTINCTNumCliFROMRESERVATION) - Nom, prénom et e-mail des clients n’ayant aucune réservation en cours12
SELECTNom, Prenom, e-mailFROMCLIENTWHERENumCliNOTIN(SELECTDISTINCTNumCliFROMRESERVATION) - Destination et liste des clients ayant réservés pour un voyage de plus de 10 jours et coûtant moins de 1000 DH.12
SELECTC.Nom, C.Prenom, V.DestinationFROMCLIENTasC, VOYAGEasV, RESERVATIONasRWHEREC.NumCli=R.NumCliandV.CodeVoyage = R.CodeVoyageANDDuree >=10ANDPrix < 1000 - Numéros de tous les clients ayant réservés sur tous les voyages proposés.123
SELECTNumCliFROMRESERVATIONGROUPBYNumCliHAVINGcount(*)=(SELECTcount(*)FROMVOYAGE)
Exercice 9
Soit la base de données « cinéma » dont le schéma relationnel est donné ci-dessous :
- VILLE (CodePostal, NomVille )
- CINEMA (NumCine, NomCine, Adresse, #CodePostal )
- SALLE (NumSalle, Capacité, #NumCine )
- FILM (NumExploit, Titre, Durée)
- PROJECTION (#NumExploit, #NumSalle, NumSemaine, Nbentrees)
Ecrivez les requêtes suivantes en algèbre relationnelle :
- Titre des films dont la durée est supérieure ou égale à deux heures1
SELECTNumExploit , TitreFROMFILMWHEREDuree >=2 - Nom des villes abritant un cinéma nommé « RIF »12
SELECTNomVilleFROMVILLEWHERECodePostalIN(SELECTCodePostalFROMCINEMAWHERENomCine=’RIF’) - Nom des cinémas situés à Meknès ou contenant au moins une salle de plus 100 places123
SELECTNomCineFROMCINEMAWHERECodePostal=(SELECTCodePostalFROMVILLEWHERENomVille=’Meknes’)ORNumCineIN(SELECTNumCineFROMSALLEWHERECapacite>=100) - Nom, adresse et ville des cinémas dans lesquels on joue le film « Hypnose » la semaine 18123
SELECTC.NomCine , C.Adresse , V.NomVilleFROMCINEMAasC, VILLEasVWHEREC.CodePostal=V.CodePostalANDC.NumCineIN(SELECTS.NumCineFROMSALLEasS, FILMasF, PROJECTIONasPWHEREP.NumExploit=F.NumExploitANDP.NumSalle=S.NumSalleANDF.Titre=’Hypnose’ANDP.NumSemaine=18) - Numéro d’exploitation des films projetés dans toutes les salles123
SELECTNumExploitFROMPROJECTIONGROUPBYNumExploitHAVINGcount(*)=(SELECTcount(*)FROMSALLE) - Titre des films qui n’ont pas été projetés1
SELECTTitreFROMFILMWHERENumExploitNOTIN(SELECTNumExploitFROMPROJECTION)
Exercice 10
Soit le modèle relationnel suivant relatif à la gestion simplifiée des étapes du Tour de France 97, dont une des étapes de type "contre la montre individuel" se déroula à Saint-Etienne :
- EQUIPE(CodeEquipe, NomEquipe, DirecteurSportif)
- COUREUR(NuméroCoureur, NomCoureur, #CodeEquipe, #CodePays)
- PAYS(CodePays, NomPays)
- TYPE_ETAPE(CodeType, LibelleType)
- ETAPE(NuméroEtap, DateEtape, VilleDép, VilleArr, NbKm, #CodeType
- PARTICIPER(#NuméroCoureur, #NuméroEtape, TempsRealisé)
- ATTRIBUER_BONIFICATION(#NuméroEtape, #NuméroCoureur, km, Rang, NbSecondes)
Exprimez en SQL les requetes suivantes
- Quelle est la composition de l’équipe Festina (Numéro, nom et pays des coureurs) ?12
SELECTNumeroCoureur , NomCoureur , NomPaysFROMEQUIPE A, COUREUR B, PAYS CWHEREA.CodeEquipe=B.CodeEquipeAndB.CodePays=C.CodePaysAndNomEquipe="FESTINA" - Quel est le nombre de kilomètres total du Tour de France 97 ?1
SELECTSUM(Nbkm)FROMETAPE - Quel est le nombre de kilomètres total des étapes de type "Haute Montagne" ?12
SELECTSUM(Nbkm)FROMETAPE A, TYPE_ETAPE BWHEREA.CodeType=B.CodeTypeAndLibelleType="HAUTE MONTAGNE" - Quels sont les noms des coureurs qui n’ont pas obtenu de bonifications ?12
SELECTNomCoureurFROMCOUREURWHERENumeroCoureurNOTIN(SELECTNumeroCoureurFROMATTRIBUER_BONIFICATION) - Quels sont les noms des coureurs qui ont participé à toutes les étapes ?123
SELECTNomCoureurFROMPARTICIPER A, COUREUR BWHEREA.NumeroCoureur=B.NumeroCoureurGROUPBYNomCoureurHAVINGCOUNT(*)=(SELECTCOUNT(*)FROMETAPE) - Quel est le classement général des coureurs (nom, code équipe, code pays et temps des coureurs) à l’issue des 13 premières étapes sachant que les bonifications ont été intégrées dans les temps réalisés à chaque étape ?1234
SELECTNomCoureur , CodeEquipe , CodePays ,SUM(TempsRealise)ASTotalFROMPARTICIPER A, COUREUR BWHEREA.NumeroCoureur=B.NumeroCoureurandNumeroEtape <=13GROUPBYNomCoureur , CodeEquipe , CodePaysORDERBYTotal - Quel est le classement par équipe à l’issue des 13 premières étapes (nom et temps des équipes) ?12345
SELECTNomEquipe ,SUM(TempsRealise)ASTotalFROMPARTICIPER A, COUREUR B, EQUIPE CWHEREA.NumeroCoureur=B.NumeroCoureurAndB.CodeEquipe=C.CodeEquipeAndNumeroEtape <=13GROUPBYNomEquipeORDERBYTotal
Exercice 11 : Extrait HEC 2014
A partir du système d’information de l’entreprise. le service des ressources humaines peut extraire et analyser les infor- mations relatives à tous les personnels. celui-ci lui permet en particulier d’exercer un suivi dans le domaine de la formation. un extrait de ce domaine est présenté sours forme d’un schéma relation :

Construire les requêtes en langage SQL permettant de répondre aux questions suivantes :
- Quel est le nombre de formations suivies par catégories de salariés ayant débuté au cours de la période du 01/06/2011 au 31/12/2011 ?1234
SELECTLibellecategorie ,count(distinctCodeform)FROMSUIVRE , SALARIE , CATEGORIEWHERESUIVRE.Matriculesal=SALARIE.MatriculesalANDSALARIE.codecategorie=CATEGORIE.codecategorieANDDatedebutBETWEEN"01/06/2011"AND"31/12/2011"GROUPBYLibellecategorie - Quelles sont les catégories pour lesquelles le nombre d’heures de formation est supérieur à la moyenne du nombre d’heures des formations suivies par l’ensemble des personnels ?12345
SELECTLibellecategorieFROMSUIVRE , SALARIE , CATEGORIE , FORMATIONWHERESUIVRE.Matriculesal=SALARIE.MatriculesalANDSALARIE.codecategorie=CATEGORIE.codecategorieANDFORMATION.Codeform=SUIVRE.CodeformGROUPBYLibellecategorieHAVINGSUM(Dureeform) > (SELECTAVG(Dureeform) SUIVRE, FORMATIONWHERESUIVRE.Codeform=FORMATION.Codeform) - le responsable des ressources humaines souhaite intégrer dans la base de données une nouvelle formation liée au sertissage des boîtes de conserve.
Les nouvelles données à insérer sont les suivantes : "FORM587, sertissage niveau 1, 25j, perfectionnement, 12, 525 " Ecrire la requête permettant de mettre à jour la base.1INSERTINTOFORMATIONVALUES("FORM587","sertissage␣niveau␣1",600,"perfectionnement",12,525)
Exercice 12
La société X utilise le logiciel de gestion de base de données Access pour gérer ses clients et ses représentants. Voici la liste des tables crées dans Access :


Ecrire les requêtes suivantes
- Afficher la liste des clients appartenant à la catégorie tarifaire n°1, classée par ordre alphabétique12
SELECTCODE_CLT , NOM_CLTFROMclientWHERENUM_CAT =1ORDERBYNOM_CLTASC - Afficher la liste des clients (code, nom de client) rattachés au représentant HINAUD12
SELECTCODE_CLT , NOM_CLTFROMclient , representantWHEREclient.NUM_REP=representant.NUM_REPANDNOM_REP="HINAUD" - Afficher la liste des clients bénéficiant d’une remise de 10%12
SELECTCODE_CLT, NOM_CLTFROMclient,categorie_tarifaireWHEREclient.NUM_CAT=categorie_tarifaire.NUM_CATANDREMISE="10%" - Afficher la liste des représentants (Numéro et nom) dépendant du chef de secteur PONS123
SELECTNUM_REP ,NOM_REPFROMrepresentant ,couvrir ,departementWHEREreprsentant.NUM_REP=couvrir.NUM_REPANDcouvrir.CODE_DEP=departement.CODE_DEPANDCHEF_SECTEUR="PONS" - Afficher la liste des départements (code, nom, chef de secteur)1
SELECT*FROMdepartement - Afficher la liste des chefs de secteur1
SELECTDISTINCTCHEF_SECTEURFROMdepartement
Exercice 13
Le responsable du SAV d’une entreprise d’électroménager a mis en place une petite base de données afin de gérer les interventions de ces techniciens. Le modèle relationnel à la source de cette base de données est le suivant :
- Client (Codecl, nomcl, prenomcl, adresse, cp, ville)
- Produit (Référence, désignation, prix)
- Techniciens (Codetec, nomtec, prenomtec, tauxhoraire)
- Intervention (Numéro, date, raison, #codecl, #référence, #codetec)
Le responsable vous demande d’écrire en langage SQL les requêtes suivantes :
- La liste des produits (référence et désignation) classées du moins cher au plus cher.1
SelectReference, designationfromproduitorderbyprixASC - Le nombre d’intervention du technicien n°2381.1
Selectcount(*)fromInterventionwherecodetec =2381 - La liste des clients ayant demandé une intervention pour des produits d’un prix supérieur à 300 dhs.12
SELECTnomclFROMClient clt, Produit prod, Intervention interWHEREclt.codecl=inter.codeclANDprod.Reference=inter.ReferenceANDprod.prix>300 - Les interventions effectuées par le technicien : ‘Mestiri Mohamed’ entre le 1er et le 31 août 2009.Ou123
SelectNumero ,date, raisonfromInterventionint, Techniciens tecwhereint.codetec=tec.codetecandtec.nomtec="Mestiri"andtec.prenomtec="Mohamed"andint.datebetween"2009-08-01"and"2009-08-31"1SelectNumero ,date, raisonfromInterventionint, Techniciens tecwhereint.codetec=tec.codetecandtec.nomtec="Mestiri"andtec.prenomtec="Mohamed"andMONTH(int.date)=8andYEAR(int.date)=2009 - Par ailleurs il vous informe que le produit référencé 548G a vu son prix augmenter (nouveau prix = 320 dhs).1
updateProduitsetprix=320whereReference="548G" - Vous apprenez également par le directeur des ressources humaines qu’un nouveau technicien a été recruté : son code est le 3294, il s’appelle ‘El Abed Ridha’ et est rémunéré à un taux horaire de 15 dhs.1
InsertintoTechnicienvalues(3294,"EL Abed","Ridha",15)
Exercice 14
La représentation textuelle suivante est une description simplifiée d’une base de données de gestion de facturation d’une entreprise commerciale.
- Client (Numcli, Nomcli, Prenomcli, adressecli, mailcli)
- Produit (Numprod, désignation, prix , qte_stock)
- Vendeur (Idvendeur, Nomvendeur, adresse_vend)
- Commande (Numcom, #Numcli, #Idvendeur, #Numprod, date_com, qte_com)
On suppose que Numcli, Numprod, Idvendeur et Numcom sont de type numérique.
Le nom, le prénom et l’adresse des clients ainsi que les vendeurs sont des informations obligatoires, le mail peut ne pas être indiqué.
La valeur par défaut de la quantité en stock des produits (qte_stock) est égale à 0
Exprimer en SQL les requêtes suivantes :
- Créer les tables : Client, Produit, Vendeur et Commande.1234567891011121314151617
CREATETABLEProduit(Numprodintprimarykey,designationvarchar(30),prixfloat,qte_stockintdefault0);CREATETABLEcommande(Numcomintprimarykey,Numcliint,idvendeurint,Numprodint,date_comdate,qte_comint,FOREIGNKEY(Numcli)REFERENCESClient(Numcli),FOREIGNKEY(idvendeur)REFERENCESVendeur(idvendeur),FOREIGNKEY(Numprod)REFERENCESProduit(Numprod)) - la liste des clients de marrakech.1
select*fromClientwhereadresseclilike"%marrakech%" - la liste des produits (Numprod, désignation, prix) classés de plus cher au moins cher.1
selectNumprod , designation , prixfromProduitorderbyprixASC - noms et adresses des vendeurs dont le nom commence par la lettre ‘M’.1
selectNomvendeur, adresse_vendfromVendeurwhereNomvendeurlike"M%" - la liste des commandes effectuées par le vendeur "Mohammed" entre le 1er et 30 janvier 2020.1234
SelectNymcom, Numcli, Idvendeur, Numprod, date_com, qte_comFROMCommande cmd, Vendeur vendWHEREcmd.Idvendeur=vend.IdvendeurANDvend.Nomvendeur="mohammed"ANDcmd.date_comBETWEEN"2020-01-01"AND"2020-01-30" - le nombre des commandes contenant le produit n° 365.1
selectcount(*)fromCommandewhereNumprod =365
Exercice 15
Soit la base de données suivante :

Ecrire les commandes SQL permettant de rechercher :
- La liste de tous les étudiants.1
select*fromEtudiant - Nom et coefficient des matières.1
selectnom_matiere , coefficientfromMatiere - Les numéros des cartes d’identité des étudiants dont la moyenne entre 7 et 12.1234
SELECTnumero_carte_etudiantFROMNote, Matiere matWHERENote.code_matiere=Mat.code_matiereGROUPBYnumero_carte_etudiantHAVING(sum(note_examen*coefficient)/sum(coefficient))between7and12 - La liste des étudiants dont le nom commence par ‘ben’.1
select*fromEtudiantwhereNomlike"Ben%" - Le nombre des étudiants qui ont comme matière ‘12518’.1
select*fromNotewherecode_matiere=12518 - La somme des coefficients des matières.1
selectsum(coefficient)fromMatiere - Les noms des étudiants qui une note_examen >10.12
SELECTdistinctNomFROMNote , EtudiantWHERENote.numero_carte_etudiant=Etudiant.numero_carte_etudiantANDnote_examen >10 - Afficher les noms et les coefficients des matières étudier par l’étudiant "01234568".12
SELECTnom_matiere , coefficientFROMNote , MatiereWHERENote.numero_carte_etudiant="01234568"
Exercice 16
Afin d’assurer la qualité des produits attendues par les Clients, l’entreprise cherche à optimiser la gestion des pannes pouvant survenir dans les infrastructures de production nécessaires à la fabrication du Ciment. voici un extrait de la base de données :
- TECHNICIEN (idTech, nom, prénom, spécialité)
- STATION (idstat, nom, Position, coordLat, coordLong,phase)
- MACHINE (idmach, état, dateMiseEnService, dateDernièreRévision, #idStat)
- TYPEINCIDENT (id, description, tempsRéparationPrévu)
- INCIDENT (idInd, remarques, dateHeure, dateHeureCloture,#idmach,#idType)
- INTERVENTION (idInterv, dateHeureDébut, dateHeureFin, #idInd, #idTech)
- Rédiger la requête SQL permettant d’obtenir la liste par ordre alphabétique des noms et prénoms des techniciens ayant réalisé une intervention sur la Machine identifiée par Ber001.123
SELECTnom , prenomFROMTECHNICIEN tec , INCIDENT inc , INTERVENTIONintWHEREtec.idTech=int.idTechandint.idInd=inc.idIndandidmach="Ber001"ORDERBYnomASC, prenomASC - Rédiger la requête SQL permettant d’obtenir la liste des phases ayant connue un incident de "sur-chauffage" pour le mois Mai 2019.123
SELECTdistinctphaseFROMSTATION st, MACHINE mch, INCIDENT inc, TYPEINCDENT typeWHEREinc.idmach=mch.idmachANDst.idstat=mch.idstatANDtype.id=inc.idTypeANDtype.description="sur-chauffage"ANDMONTH(dateHeure)=5ANDYEAR(dateHeure)=2019 - Rédiger la requête SQL permettant d’obtenir le nombre d’incidents non clôturés.1
SELECTcount(*)FROMINCIDENTWHEREdateHeureClotureisNULL - Rédiger la requête SQL permettant d’obtenir la liste des noms des stations ayant eu plus de dix incidents.1234
SELECTnomFROMSTATION st, MACHINE mch, INCIDENT incWHEREinc.idmach=mch.idmachandst.idstat=mch.idstatGROUPbynomhavingcount(*) >10
Exercice 17
Voici un extrait de la base de données gestion des ventes :
- Produit (Ref, Designation, PrixUnitaire, Dimension, #code_Machine)
- Vente (Ncom, #Ref, Qte , DateLiv)
- Commande (Ncom, DateCmd, #CodeClt,#Code_Salarie)
- Produit_concurrent(Ref,Designation,PrixUnitaire,PrixUnitaire,Dimension,#code_Machine,Nom_Concurrent)
- Donner la requête qui permet d’obtenir le chiffre d’affaire mensuel de l’année en cours123
SELECTsum(Qte*PrixUnitaire),MONTH(DateCmd)FROMProduit, Vente, CommandeWHEREProduit.Ref=Vente.RefANDVente.Ncom=Commande.NcomANDYEAR(DateCmd)=YEAR(NOW())GROUPBYMONTH(DateCmd) - Donner la requête qui calcule le taux de vente de chaque produit.12
SELECTRef,sum(Qte)/(selectsum(Qte)FROMVente)FROMVenteGROUPBYRef - Donner la requête qui affiche le produit le plus vendu du mois en cour.123
SELECTRef, Designation, totFROM(SELECTRef, Designation,SUM(Qte)astotFROMProduit, VenteWHEREProduit.Ref=Vente.RefGROUPBYRef)ORDERBYtotDESCLIMIT 1 - La table produit concurrent est composée des informations sur les produits vedettes des concurrents ; Donner la requête qui permet d’ajouter tous les produits du concurrent GleenAlu à la table Produits.12
INSERTINTOProduit (Ref,Designation,PrixUnitaire,Dimension,code_machine)(SELECTRef, Designation, PrixUnitaire, Dimension,code_machineFROMProduit_concurrentwhereNom_Concurent="GleenAlu")
