Vous êtes sur la page 1sur 26

Afficher le nom et le prnom de tous les animateurs. 2. Afficher toutes les coordonnes des diffrents participants. 3.

Afficher les diffrents droits dinscription suivant lordre dcroissant. 4. Afficher les dates auxquelles il y a des cours tris chronologiquement. 5. Afficher le code entreprise, les noms et prnoms des participants venant de lentreprise dont le code est 33336. 6. Afficher le code du cours, la date et le code du thme de tous les cours qui ont eu lieu le 22 janvier 1998. 7. Afficher les matricules des animateurs responsables et la date des cours qui ont eu lieu entre le 1er janvier et 31 janvier 1998. 8. Afficher les codes des cours et les dates des cours qui ont eu lieu 8 mars 1998 et 10 septembre 1998.

9. Afficher les codes cours, le droit dinscription et la prime de responsabilit des cours dont le droit dinscription est en dessous de 6000 F et la prime de responsabilit est suprieure 1000 F 10. Afficher tous les renseignements sur les diffrents thmes. 11. Afficher les codes des cours dont le droit dinscription est compris entre 2.500 et 6.000 F. 12. Afficher tous les noms et prnoms des participants dont le nom commence avec la lettre N. 13. Afficher tous les noms et prnoms des participants dont le nom se termine avec la lettre N tri suivant lordre alphabtique des noms et prnoms. 14. Afficher tous les noms et prnoms des participants dont les 2e et l3e lettres du nom sont respectivement C et H. 15. Afficher les noms et prnoms de tous les participants qui sont ns en 68. 16. Compter le nombre de participants ns en 68. 17. Quel est le nombre de cours organiss ? 18. Combien de participants a-t-on eu dans tous les cours ? 19. Combien de participants a-t-on eu pour le cours no 026 ? 20. Calculer la moyenne des droits dinscription, des primes de responsabilit et des tarifs heure. 21. Combien de cours organise-t-on pour chaque niveau ? 22. Quel est le code du cours dont le droit dinscription est le plus lev ? 23. Quel est le code du cours dont le droit dinscription est le plus bas ? 24. Calculer le total des heures prestes par les animateurs pour tous les cours. 25. Calculer le total des heures prestes par les animateurs pour le cours no 005. 26. Calculer le total des heures prestes par lanimateur ayant le numro matricule 19800202222.

27. Afficher le numro matricule et le nombre total dheures prestes par chaque animateur tirs suivant lordre croissant des numros matricule. 28. Afficher le code entreprise et le nombre total de participants par entreprise. 29. Afficher le numro matricule et le nombre total dheures prestes pour les animateurs ayant prests plus de 10 heures. 30. Afficher le numro matricule et le nombre total dheures prestes pour les animateurs ayant prests plus de 10 heures et qui sont ns en 68. 31. Afficher pour chaque cours le code cours, le nom et le prnom de lanimateur responsable. 32. Afficher pour chaque cours son code, le thme et le nom et le prnom de lanimateur responsable. 33. Pour chaque participant afficher le numro matricule, le nom, le prnom ainsi que le nombre de cours auxquels il a particips. 34. Afficher le numro matricule, le nom et le prnom ainsi que le nombre total dheures prestes par chaque animateur. 35. Afficher pour chaque entreprise (code et nom de lentreprise) le nombre de participants tri suivant lordre croissant des noms dentreprise. 36. Afficher pour chaque participant son nom et son prnom, le nom de son entreprise ainsi que les thmes (en toutes lettres) des cours auxquels il a particips (tris suivant les numros matricules des participants et des thmes). 37. Saisir le nom dun animateur et compter le nombre de cours quil a anim. 38. Afficher le nom des catgories pour lesquelles il y a eu plus de 3 cours. 39. Afficher les noms des animateurs qui ont anim plus de cours que lanimateur dont vous devez saisir le nom.

Solutions
1. SELECT FROM 2. SELECT FROM 3. SELECT FROM nom, prnom animateurs * participants DISTNCT droit_inscrip cours

ORDER BY droit_inscrip DESC 4. SELECT FROM DISTINCT date cours

ORDER BY date 5. SELECT FROM WHERE 6. SELECT FROM WHERE 7. SELECT FROM WHERE 8. SELECT FROM WHERE ou bien 9. SELECT FROM WHERE 10. SELECT FROM 11. SELECT FROM WHERE 12. SELECT FROM code_entreprise, nom, prnom participants code_entreprise = 33336 code_cours, date, code_thme cours date = #22/01/98# matricule_animateur, date cours date BETWEEN #01/01/98# AND #31/01/98# code_cours, date cours date = #08/03/98# OR date = #10/09/98# date IN (#08/03/98#, #10/09/98#) code_cours, droit_inscrip, prime_resp cours droit_inscrip < 6000 AND prime_resp >1000 * thmes code_cours cours droit_inscrip BETWEEN 2500 AND 6000 nom, prenom participants

WHERE 13. SELECT FROM WHERE

nom LIKE N* nom, prenom participants nom LIKE *N

ORDER BY nom, prnom

14. SELECT FROM WHERE 15. SELECT FROM WHERE 16. SELECT FROM WHERE 17. SELECT FROM 18. SELECT FROM 19. SELECT FROM WHERE 20. SELECT

nom, prnom participants nom LIKE ?CH* nom, prnom participants matricule LIKE 1968* ou bien matricule LIKE 1968???????

COUNT(*) AS [nombre de participants ns en 98] participants matricule LIKE 1968* ou bien COUNT(*) AS [nombre total de cours] cours COUNT(*) AS [nombre total de participants] participer COUNT(*) AS [nombre participants au cours 026] participer code_cours = 026 AVG(droit_inscip) AS [droit dinscription moyen], AVG(prime_resp) AS [prime de responsabilit moyenne], AVG(tarif_hr) AS [tarif heur moyen] matricule LIKE 1968???????

FROM 21. SELECT FROM

cours niveau, COUNT(*) AS [nombre de cours] cours

GROUP BY niveau 22. SELECT FROM code_cours cours

WHERE

droit_inscrip = (SELECT MAX(droit_inscrip) FROM cours)

23. SELECT FROM WHERE

code_cours cours droit_inscrip = (SELECT MIN(droit_inscrip) FROM cours)

24. SELECT FROM 25. SELECT FROM WHERE

SUM(nbre_heures) AS [total des heures prestes] animer SUM(nbre_heures) AS [total des heures prestes pour le cours 005] animer code_cours = 005

26. SELECT

SUM(nbre_heures) AS [total des heures prestes par lanimateur 19800202222]

FROM WHERE 27. SELECT

animer matriucle_animateur = 19800202222 matricule_animateur, SUM(nbre_heures) AS [nombre total d'heures prestes]

FROM

animer

GROUP BY matricule_animateur ORDER BY matricule_animateur 28. SELECT FROM code_entreprise, COUNT(*) AS [nombre de participants] participants

GROUP BY code_entreprise 29. SELECT FROM matricule_animateur, SUM(nbre_heures) AS [nombre d'heures prestes] animer

GROUP BY matricule_animateur HAVING 30. SELECT FROM WHERE SUM(nbre_heures) >10 matricule_animateur, SUM(nbre_heures) AS [nombre d'heures prestes] animer matricule_animateur like 1968*

GROUP BY matricule_animateur HAVING 31. SELECT FROM WHERE 32. SELECT SUM(nbre_heures) >10; code_cours, nom, prnom animateurs, cours animateurs.matricule_animateur = cours.matricule_animateur code_cours, dsignation, nom, prnom

FROM WHERE

animateurs , thmes, cours thmes.code_thme = cours.code_thme AND animateurs.matricule_animateur = cours.matricule_animateur

33. SELECT FROM WHERE

matricule, nom, prnom, COUNT(*) AS [nombre de cours] participants , participer participants.matricule = participer.matriucle

GROUP BY matricule, nom, prnom 34. SELECT animateurs.matricule_animateur, nom, prnom, SUM(nbre_heures) AS [nombre total d'heures prestes] FROM WHERE animateurs, animer animateurs.matricule_animateur = animer.matricule_animateur

GROUP BY animateurs.matricule_animateur, nom, prnom 35. SELECT entreprises.code_entreprise, entreprises.nom, COUNT(*) AS [nombre de participants] FROM WHERE entreprises, participants entreprises.code_entreprise = participants.code_entreprise

GROUP BY entreprises.code_entreprise, entreprises.nom ORDER BY entreprises.nom 36. SELECT FROM WHERE participants.nom, prnom, entreprises.nom, thmes.dsignation thmes, cours, participants, participer, entreprises participants.matricule = participer.matriucle AND entreprises.code_entreprise = participants.code_entreprise AND cours.code_cours = participer.code_cours AND thmes.code_thme = cours.code_thme ORDER BY participants.matricule, thmes.code_thme

37. SELECT FROM WHERE

nom, COUNT(*) AS [nombre de cours anim] animateurs, animer animateurs.matricule_animateur = animer.matricule_animateur AND nom = [Saisir le nom de l'animateur]

GROUP BY nom 38. SELECT FROM WHERE libell catgories, thmes, cours catgories.code_catgorie = thmes.code_catgorie AND thmes.code_thme = cours.code_thme GROUP BY libell HAVING 39. SELECT FROM WHERE COUNT(*) >3 nom animer, animateurs animateurs.matricule_animateur = animer.matricule_animateur

GROUP BY nom HAVING COUNT(*) > (SELECT COUNT(*) FROM WHERE animer, animateurs animateurs.matricule_animateur = animer.matricule_animateur
AND nom = [Saisir le nom de l'animateur]

la correction du Tp de SQLSERVER ------------------------------------------------creation de la base de donne "testdb"--------------------------------------------------create database testdb; ------------------------------------------------creation de la base de donne "testdb"--------------------------------------------------use testdb; ------------------------------------------------creation de la table "produit"---------------------------------------------------------create table produit( codart char(4) primary key, libart char(30), stkale numeric(4,0), stkphy numeric(4,0), qteann numeric(5,0), unimes char(5)); ------------------------------------------------creation de la table "fournis"---------------------------------------------------------create table fournis( numfou numeric(5,0) primary key, nomfou char(30), ruefou char(35), posfou numeric(5,0), vilfou char(25), confou char(15), satisf numeric(1,0)); ------------------------------------------------creation de la table "vente"-----------------remarques: ---la cle primaire est une combinaison de deux colonnes ---la declaration des cles primaires se fait a la fin ---les deux colonnes doivent etre declarer comme des cles etrangeres ---chaque collonne referencie la colonne de la table correspondante (fournis & produit) ---les tables (fournis & produit) doivent etre cree avant la creation de la table vente ---si la creation de la table vente precede les 2 tables les cles etrangeres ---devrait etre cree par la commande alter. ---ALTER TABLE vente add foreign key(numfou) references fournis(numfou); ---------------------------------------------create table vente( codart char(4), numfou numeric(5,0), delliv numeric(2,0), 22222222222222222222222222222222222222222

---creation de la base de donne "testdb"--------------------------------------------------create database testdb; ------------------------------------------------creation de la base de donne "testdb"--------------------------------------------------use testdb; ------------------------------------------------creation de la table "produit"---------------------------------------------------------create table produit( codart char(4) primary key, libart char(30), stkale numeric(4,0), stkphy numeric(4,0), qteann numeric(5,0), unimes char(5)); ------------------------------------------------creation de la table "fournis"---------------------------------------------------------create table fournis( numfou numeric(5,0) primary key, nomfou char(30), ruefou char(35), posfou numeric(5,0), vilfou char(25), confou char(15), satisf numeric(1,0)); ------------------------------------------------creation de la table "vente"-----------------remarques: ---la cle primaire est une combinaison de deux colonnes ---la declaration des cles primaires se fait a la fin ---les deux colonnes doivent etre declarer comme des cles etrangeres ---chaque collonne referencie la colonne de la table correspondante (fournis & produit) ---les tables (fournis & produit) doivent etre cree avant la creation de la table vente ---si la creation de la table vente precede les 2 tables les cles etrangeres ---devrait etre cree par la commande alter. ---ALTER TABLE vente add foreign key(numfou) references fournis(numfou); ---------------------------------------------create table vente( codart char(4), numfou numeric(5,0), delliv numeric(2,0), qte1 numeric(3,0), prix1 numeric(4,0),

qte2 numeric(3,0), prix2 numeric(4,0), qte3 numeric(3,0), prix3 numeric(4,0), primary key(codart,numfou), foreign key(numfou) references fournis(numfou), foreign key(codart) references produit(codart)); ------------------------------------------------creation de la table "entcom"----------------------------------------------------------create table entcom( numcom char(6), obscom char(25), datcom date, numfou numeric(5,0), primary key(numcom), foreign key(numfou) references fournis(numfou) on delete cascade on update cascade); ------------------------------------------------creation de la table "com"-------------------------------------------------------------create table ligncom( numcom char(6), numlig numeric(2,0), codart char(4), qtecde numeric(5,0), priuni numeric(4,0), qteliv numeric(5,0), derliv date, primary key(numcom,codart), foreign key(codart) references produit(codart) on delete cascade on update cascade, foreign key(numcom) references entcom(numcom) on delete cascade on update cascade); -------------------3333333333333333333333333333---creation de la base de donne "testdb"--------------------------------------------------create database testdb; ------------------------------------------------creation de la base de donne "testdb"--------------------------------------------------use testdb; ------------------------------------------------creation de la table "produit"---------------------------------------------------------create table produit( codart char(4) primary key, libart char(30), stkale numeric(4,0),

stkphy numeric(4,0), qteann numeric(5,0), unimes char(5)); ------------------------------------------------creation de la table "fournis"---------------------------------------------------------create table fournis( numfou numeric(5,0) primary key, nomfou char(30), ruefou char(35), posfou numeric(5,0), vilfou char(25), confou char(15), satisf numeric(1,0)); ------------------------------------------------creation de la table "vente"-----------------remarques: ---la cle primaire est une combinaison de deux colonnes ---la declaration des cles primaires se fait a la fin ---les deux colonnes doivent etre declarer comme des cles etrangeres ---chaque collonne referencie la colonne de la table correspondante (fournis & produit) ---les tables (fournis & produit) doivent etre cree avant la creation de la table vente ---si la creation de la table vente precede les 2 tables les cles etrangeres ---devrait etre cree par la commande alter. ---ALTER TABLE vente add foreign key(numfou) references fournis(numfou); ---------------------------------------------create table vente( codart char(4), numfou numeric(5,0), delliv numeric(2,0), qte1 numeric(3,0), prix1 numeric(4,0), qte2 numeric(3,0), prix2 numeric(4,0), qte3 numeric(3,0), prix3 numeric(4,0), primary key(codart,numfou), foreign key(numfou) references fournis(numfou), foreign key(codart) references produit(codart)); ------------------------------------------------creation de la table "entcom"----------------------------------------------------------create table entcom( numcom char(6), obscom char(25), datcom date, numfou numeric(5,0),

primary key(numcom), foreign key(numfou) references fournis(numfou) on delete cascade on update cascade); ------------------------------------------------creation de la table "com"-------------------------------------------------------------create table ligncom( numcom char(6), numlig numeric(2,0), codart char(4), qtecde numeric(5,0), priuni numeric(4,0), qteliv numeric(5,0), derliv date, primary key(numcom,codart), foreign key(codart) references produit(codart) on delete cascade on update cascade, foreign key(numcom) references entcom(numcom) on delete cascade on update cascade); ------------------------------------------------la base de donne en cours select DB_NAME() as USED_DBNAME --Pour changer le type de donnes d'une colonne Alter table vente alter column prix1 numeric(5,0); 444444444444444444444444444444444444444444444444444444 ---creation de la base de donne "testdb"--------------------------------------------------create database testdb; ------------------------------------------------creation de la base de donne "testdb"--------------------------------------------------use testdb; ------------------------------------------------creation de la table "produit"---------------------------------------------------------create table produit( codart char(4) primary key, libart char(30), stkale numeric(4,0), stkphy numeric(4,0), qteann numeric(5,0), unimes char(5)); ------------------------------------------------creation de la table "fournis"---------------------------------------------------------create table fournis( numfou numeric(5,0) primary key, nomfou char(30), ruefou char(35),

posfou numeric(5,0), vilfou char(25), confou char(15), satisf numeric(1,0)); ------------------------------------------------creation de la table "vente"-----------------remarques: ---la cle primaire est une combinaison de deux colonnes ---la declaration des cles primaires se fait a la fin ---les deux colonnes doivent etre declarer comme des cles etrangeres ---chaque collonne referencie la colonne de la table correspondante (fournis & produit) ---les tables (fournis & produit) doivent etre cree avant la creation de la table vente ---si la creation de la table vente precede les 2 tables les cles etrangeres ---devrait etre cree par la commande alter. ---ALTER TABLE vente add foreign key(numfou) references fournis(numfou); ---------------------------------------------create table vente( codart char(4), numfou numeric(5,0), delliv numeric(2,0), qte1 numeric(3,0), prix1 numeric(4,0), qte2 numeric(3,0), prix2 numeric(4,0), qte3 numeric(3,0), prix3 numeric(4,0), primary key(codart,numfou), foreign key(numfou) references fournis(numfou), foreign key(codart) references produit(codart)); ------------------------------------------------creation de la table "entcom"----------------------------------------------------------create table entcom( numcom char(6), obscom char(25), datcom date, numfou numeric(5,0), primary key(numcom), foreign key(numfou) references fournis(numfou) on delete cascade on update cascade); ------------------------------------------------creation de la table "com"-------------------------------------------------------------create table ligncom( numcom char(6), numlig numeric(2,0), codart char(4), qtecde numeric(5,0),

priuni numeric(4,0), qteliv numeric(5,0), derliv date, primary key(numcom,codart), foreign key(codart) references produit(codart) on delete cascade on update cascade, foreign key(numcom) references entcom(numcom) on delete cascade on update cascade); ------------------------------------------------la base de donne en cours select DB_NAME() as USED_DBNAME --Pour changer le type de donnes d'une colonne Alter table vente alter column prix1 numeric(5,0); 5555555555555555555555555555555 ---creation de la base de donne "testdb"--------------------------------------------------create database testdb; ------------------------------------------------creation de la base de donne "testdb"--------------------------------------------------use testdb; ------------------------------------------------creation de la table "produit"---------------------------------------------------------create table produit( codart char(4) primary key, libart char(30), stkale numeric(4,0), stkphy numeric(4,0), qteann numeric(5,0), unimes char(5)); ------------------------------------------------creation de la table "fournis"---------------------------------------------------------create table fournis( numfou numeric(5,0) primary key, nomfou char(30), ruefou char(35), posfou numeric(5,0), vilfou char(25), confou char(15), satisf numeric(1,0)); ------------------------------------------------creation de la table "vente"-----------------remarques: ---la cle primaire est une combinaison de deux colonnes ---la declaration des cles primaires se fait a la fin ---les deux colonnes doivent etre declarer comme des cles etrangeres

---chaque collonne referencie la colonne de la table correspondante (fournis & produit) ---les tables (fournis & produit) doivent etre cree avant la creation de la table vente ---si la creation de la table vente precede les 2 tables les cles etrangeres ---devrait etre cree par la commande alter. ---ALTER TABLE vente add foreign key(numfou) references fournis(numfou); ---------------------------------------------create table vente( codart char(4), numfou numeric(5,0), delliv numeric(2,0), qte1 numeric(3,0), prix1 numeric(4,0), qte2 numeric(3,0), prix2 numeric(4,0), qte3 numeric(3,0), prix3 numeric(4,0), primary key(codart,numfou), foreign key(numfou) references fournis(numfou), foreign key(codart) references produit(codart)); ------------------------------------------------creation de la table "entcom"----------------------------------------------------------create table entcom( numcom char(6), obscom char(25), datcom date, numfou numeric(5,0), primary key(numcom), foreign key(numfou) references fournis(numfou) on delete cascade on update cascade); ------------------------------------------------creation de la table "com"-------------------------------------------------------------create table ligncom( numcom char(6), numlig numeric(2,0), codart char(4), qtecde numeric(5,0) 6666666666666666666666666666666666666666666666666666666666 ----------------------------------------creation de la base de donne "testdb"--------------------------------------------------create database testdb; ------------------------------------------------creation de la base de donne "testdb"--------------------------------------------------use testdb; ----------------------------------------------

---creation de la table "produit"---------------------------------------------------------create table produit( codart char(4) primary key, libart char(30), stkale numeric(4,0), stkphy numeric(4,0), qteann numeric(5,0), unimes char(5)); ------------------------------------------------creation de la table "fournis"---------------------------------------------------------create table fournis( numfou numeric(5,0) primary key, nomfou char(30), ruefou char(35), posfou numeric(5,0), vilfou char(25), confou char(15), satisf numeric(1,0)); ------------------------------------------------creation de la table "vente"-----------------remarques: ---la cle primaire est une combinaison de deux colonnes ---la declaration des cles primaires se fait a la fin ---les deux colonnes doivent etre declarer comme des cles etrangeres ---chaque collonne referencie la colonne de la table correspondante (fournis & produit) ---les tables (fournis & produit) doivent etre cree avant la creation de la table vente ---si la creation de la table vente precede les 2 tables les cles etrangeres ---devrait etre cree par la commande alter. ---ALTER TABLE vente add foreign key(numfou) references fournis(numfou); ---------------------------------------------create table vente( codart char(4), numfou numeric(5,0), delliv numeric(2,0), qte1 numeric(3,0), prix1 numeric(4,0), qte2 numeric(3,0), prix2 numeric(4,0), qte3 numeric(3,0), prix3 numeric(4,0), primary key(codart,numfou), foreign key(numfou) references fournis(numfou), foreign key(codart) references produit(codart)); ------------------------------------------------creation de la table "entcom"--------------

---------------------------------------------create table entcom( numcom char(6), obscom char(25), datcom date, numfou numeric(5,0), primary key(numcom), foreign key(numfou) references fournis(numfou) on delete cascade on update cascade); ------------------------------------------------creation de la table "com"-------------------------------------------------------------create table ligncom( numcom char(6), numlig numeric(2,0), codart char(4), qtecde numeric(5,0), priuni numeric(4,0), qteliv numeric(5,0), derliv date, primary key(numcom,codart), foreign key(codart) references produit(codart) on delete cascade on update cascade, foreign key(numcom) references entcom(numcom) on delete cascade on update cascade); ------------------------------------------------la base de donne en cours select DB_NAME() as USED_DBNAME --Pour changer le type de donnes d'une colonne Alter table vente alter column prix1 numeric(5,0); 7777777777777777777777777777777777777777777777777777 ----------------------------------------creation de la base de donne "testdb"--------------------------------------------------create database testdb; ------------------------------------------------creation de la base de donne "testdb"--------------------------------------------------use testdb; ------------------------------------------------creation de la table "produit"---------------------------------------------------------create table produit( codart char(4) primary key, libart char(30), stkale numeric(4,0), stkphy numeric(4,0), qteann numeric(5,0), unimes char(5)); ----------------------------------------------

---creation de la table "fournis"---------------------------------------------------------create table fournis( numfou numeric(5,0) primary key, nomfou char(30), ruefou char(35), posfou numeric(5,0), vilfou char(25), confou char(15), satisf numeric(1,0)); ------------------------------------------------creation de la table "vente"-----------------remarques: ---la cle primaire est une combinaison de deux colonnes ---la declaration des cles primaires se fait a la fin ---les deux colonnes doivent etre declarer comme des cles etrangeres ---chaque collonne referencie la colonne de la table correspondante (fournis & produit) ---les tables (fournis & produit) doivent etre cree avant la creation de la table vente ---si la creation de la table vente precede les 2 tables les cles etrangeres ---devrait etre cree par la commande alter. ---ALTER TABLE vente add foreign key(numfou) references fournis(numfou); ---------------------------------------------create table vente( codart char(4), numfou numeric(5,0), delliv numeric(2,0), qte1 numeric(3,0), prix1 numeric(4,0), qte2 numeric(3,0), prix2 numeric(4,0), qte3 numeric(3,0), prix3 numeric(4,0), primary key(codart,numfou), foreign key(numfou) references fournis(numfou), foreign key(codart) references produit(codart)); ------------------------------------------------creation de la table "entcom"----------------------------------------------------------create table entcom( numcom char(6), obscom char(25), datcom date, numfou numeric(5,0), primary key(numcom), foreign key(numfou) references fournis(numfou) on delete cascade on update cascade); ------------------------------------------------creation de la table "com"-----------------

---------------------------------------------create table ligncom( numcom char(6), numlig numeric(2,0), codart char(4), qtecde numeric(5,0), priuni numeric(4,0), qteliv numeric(5,0), derliv date, primary key(numcom,codart), foreign key(codart) references produit(codart) on delete cascade on update cascade, foreign key(numcom) references entcom(numcom) on delete cascade on update cascade); ------------------------------------------------la base de donne en cours select DB_NAME() as USED_DBNAME --Pour changer le type de donnes d'une colonne Alter table vente alter column prix1 numeric(5,0); 888888888888888888888888888888888888888888888888 ------------------------------------------------creation de la table "produit"---------------------------------------------------------create table produit( codart char(4) primary key, libart char(30), stkale numeric(4,0), stkphy numeric(4,0), qteann numeric(5,0), unimes char(5)); ------------------------------------------------creation de la table "fournis"---------------------------------------------------------create table fournis( numfou numeric(5,0) primary key, nomfou char(30), ruefou char(35), posfou numeric(5,0), vilfou char(25), confou char(15), satisf numeric(1,0)); ------------------------------------------------creation de la table "vente"-----------------remarques: ---la cle primaire est une combinaison de deux colonnes ---la declaration des cles primaires se fait a la fin ---les deux colonnes doivent etre declarer comme des cles etrangeres ---chaque collonne referencie la colonne de la table correspondante (fournis & produit) ---les tables (fournis & produit) doivent etre cree avant la creation de la table vente

---si la creation de la table vente precede les 2 tables les cles etrangeres ---devrait etre cree par la commande alter. ---ALTER TABLE vente add foreign key(numfou) references fournis(numfou); ---------------------------------------------create table vente( codart char(4), numfou numeric(5,0), delliv numeric(2,0), qte1 numeric(3,0), prix1 numeric(4,0), qte2 numeric(3,0), prix2 numeric(4,0), 999999999999999999999999999999999999999999999999999 ------------------------------------------------creation de la base de donne "testdb"--------------------------------------------------create database testdb; ------------------------------------------------creation de la base de donne "testdb"--------------------------------------------------use testdb; ------------------------------------------------creation de la table "produit"---------------------------------------------------------create table produit( codart char(4) primary key, libart char(30), stkale numeric(4,0), stkphy numeric(4,0), qteann numeric(5,0), unimes char(5)); ------------------------------------------------creation de la table "fournis"---------------------------------------------------------create table fournis( numfou numeric(5,0) primary key, nomfou char(30), ruefou char(35), posfou numeric(5,0), vilfou char(25), confou char(15), satisf numeric(1,0)); ------------------------------------------------creation de la table "vente"-----------------remarques: ---la cle primaire est une combinaison de deux colonnes ---la declaration des cles primaires se fait a la fin

---les deux colonnes doivent etre declarer comme des cles etrangeres ---chaque collonne referencie la colonne de la table correspondante (fournis & produit) ---les tables (fournis & produit) doivent etre cree avant la creation de la table vente ---si la creation de la table vente precede les 2 tables les cles etrangeres ---devrait etre cree par la commande alter. ---ALTER TABLE vente add foreign key(numfou) references fournis(numfou); ---------------------------------------------create table vente( codart char(4), numfou numeric(5,0), delliv numeric(2,0), qte1 numeric(3,0), prix1 numeric(4,0)

Facult des Sciences & Techniques Settat Exercice SQL Page 1/3 On se propose d'implanter le schma entit-association suivant pour grer la relation Emprunter/bibliothque. Personne Livre Ecrire (1, n) (1, n) Emprunter (0,5) (0, 1) Auteur Traiter Thme (1, n) (1, n) Le schma ci-dessus montre que des personnes s'adressent la bibliothque pour emprunter des livres. Une personne peut emprunter au plus cinq livres pour une dure de 15 jours. Chaque livre traite de un ou plusieurs thmes, a t crit par un ou plusieurs auteurs et possde un identifiant unique l'ISBN 1 . Pour les thmes des livres, on mmorisera un numro d'ordre qui permet de classer les thmes abords par le livre par ordre d'importance dcroissante. L'historique des emprunts n'est pas conserv dans la base de donnes. La bibliothque ne possde qu'un seul exemplaire de chaque livre. Le modle physique correspondant au schma ci-dessus est le suivant : Personne (IDP, NomPrenom, DateNaissance, adresse) Livre (ISBN, Titre, DateEmprunt, IDP) Auteur (IDA, NomPrenom, bibliographie) Theme (IDT, Libelle) Traiter (ISBN, IDT, NumeroOrdre 2 ) Ecrire (ISBN, IDA) Remarques : pour chaque rponse, vous veillerez fournir une solution optimale. Toutes les relations ont une clef primaire . 1. Implanter les contraintes de cls primaires et de cls trangres, on considrera que les diffrentes tables ont dj t cres 2. Donner le titre de tous les livres non emprunts 3. Donner l'identifiant des personnes qui n'ont pas emprunt de livre. Vous utiliserez l'oprateur ensembliste "minus", puis l'oprateur "not in", puis l'oprateur "not exists". 4. Donner le nombre de livres non emprunts

5. Donner le code de l'auteur et le nombre de livres non emprunts qu'il a crit 6. Donner le libell du ou des thmes les plus emprunts de la bibliothque 7. Donner le libell des thmes qui n'apparaissent jamais avec le numro d'ordre un 8. Donner pour chaque livre son titre et le nom de ses auteurs 9. Donner le nom et la bibliographie des auteurs dont la bibliothque possde plus de dix ouvrages 1 L'ISBN dfinit le titre, les auteurs, la collection, l'diteur et le lieu d'dition d'un livre. Cet identifiant est compos de dix caractres. 2 Les numros d'ordre sont, pour chaque livre, squentiels, uniques et continus. Page 2/3 Correction 1. Implanter les contraintes de cls primaires et de cls trangres, on considrera que les diffrentes tables ont dj t cres alter table PERSONNE add constraint CP_PERSONNE primary key(IDP); alter table LIVRE add constraint CP_LIVRE primary key(ISBN); alter table AUTEUR add constraint CP_AUTEUR primary key(IDA); alter table THEME add constraint CP_THEME primary key(IDT); alter table TRAITER add constraint CP_TRAITER primary key(IDT, ISBN, NUMEROORDRE); alter table ECRIRE add constraint CP_ECRIRE primary key(IDA, ISBN); alter table LIVRE add constraint CE_LIVRE_IDP foreign key (IDP) references PERSONNE ; alter table TRAITER add ( constraint CE_LIVRE_ISBN foreign key (ISBN) references LIVRE, constraint CE_THEME_IDT foreign key (IDT) references THEME); alter table ECRIRE add ( constraint CE_LIVRE_ISBN foreign key (ISBN) references LIVRE, constraint CE_AUTEUR_IDA foreign key (IDA) references AUTEUR); 2. Donner le titre de tous les livres non emprunts select TITRE from LIVRE where IDP is null; 3. Donner l'identifiant des personnes qui n'ont pas emprunt de livre. Vous utiliserez l'oprateur ensembliste "minus", puis l'oprateur "not in", puis l'oprateur "not exists" select IDP from PERSONNE minus select IDP from LIVRE; select IDP from PERSONNE where IDP not in (select IDP from LIVRE where IDP is not null); select IDP from PERSONNE

where not exists (select * from LIVRE where IDP = PERSONNE.IDP); Page 3/3 4. Donner le nombre de livres non emprunts select count(*) from LIVRE where IDP is null; 5. Donner le code de l'auteur et le nombre de livres non emprunts qu'il a crit select IDA, count(*) from ECRIRE, LIVRE where IDP is null and ECRIRE.ISBN=LIVRE.ISBN group by IDA; 6. Donner le libell du ou des thmes les plus emprunts de la bibliothque select LIBELLE from THEME where IDT in ( select IDT from TRAITER, LIVRE where IDP is not null and TRAITER.ISBN=LIVRE.ISBN group by IDT having count(*) = ( select max(count(*)) from TRAITER, LIVRE where IDP is not null and TRAITER.ISBN=LIVRE.ISBN group by IDT)); 7. Donner le libell des thmes qui n'apparaissent jamais avec le numro d'ordre un select LIBELLE from THEME where IDT not in (select IDT from TRAITER where NUMEROORDRE=1) ; 8. Donner pour chaque livre son titre et le nom de ses auteurs select NOMPRENOM, TITRE from AUTEUR, ECRIRE, LIVRE where AUTEUR.IDA= ECRIRE.IDA and ECRIRE.ISBN=LIVRE.ISBN ; 9. Donner le nom et la bibliographie des auteurs dont la bibliothque possde plus de dix ouvrages select NOMPRENOM, BIBLIOGRAPHIE from AUTEUR where IDA in ( select IDA from ECRIRE group by IDA having count(*)>=10);

Vous aimerez peut-être aussi