[SQL] Aide exos (simple)

Aide exos (simple) [SQL] - SQL/NoSQL - Programmation

Marsh Posté le 15-05-2016 à 18:58:54    

*******Un grand merci a zerist et antac pour leur patience et leur aide, le corrigé définitif est dans le sujet de ce premier commentaire******
 
Salut les amis,
 
Voila dans le cadre de mes études (M2 Marketing), on a une matière qui requiert des connaissances de base de données relationnelle .., j'ai donc un exercice à faire mais comme c'est pas mon domaine (du tout) je ne sais pas si j'ai bon...
Quelqu'un peut m'aider et m'orienter SVP ?
 
Je poste ce que j'ai fait jusque présent et alimenterai au fur et à mesure que j'avance.
 
Voici le sujet et mes réponses en gras. MERCI d'avance pour toute l'aide apportée
 
http://img15.hostingpics.net/pics/566851sql.jpg
 
 
Répondre aux questions suivantes :
 
 
1. La liste des comédiens, par ordre alphabétique, habitant le Gard (30) ?
 
select nomcomedien, pnomcomedien
from comedien  
where cpcomedien like "30%"  
order by nomcomedien;

 
2. Le nombre de comédiens ?
 
select count(*) as "nb de comédiens"
from comedien;

 
3. Le nombre de comédiens par ville ?
 
select villecomedien, count(*) as "nb de comédiens"
from comedien  
group by villecomedien;

 
4. Les comédiens appartenant à une catégorie avec un coût horaire supérieur à 100€ jouant dans la pièce « Le père Noël est … » ?
 
Select Co.NumComedien, NomComedien, PnomComedien
From Comedien Co, Categorie Ca, Piece P, Jouer J
Where Co.NumComedien=J.NumComedien  
and J.NumPiece=P.NumPiece
and Co.CodeCategorie=Ca.CodeCategorie  
and NomPiece like "Le père Noël est %"  
and CoutHoraireCategorie>100;

 
5. Les auteurs des pièces jouées pendant le mois de décembre 2002 ?
 
Select A.NumAuteur, NomAuteur
From Auteur A, Piece P, Calendrier C, Representation R
Where daterepresentation between "2002-12-01" and "2002-12-31"
and R.NumRepresentation=C.NumRepresentation  
and C.NumPiece=P.NumPiece  
and P.NumAuteur = A.NumAuteur;

 
6. Les villes dans lesquelles il y a des comédiens ?
 
Select distinct villecomedien from comedien;
 
7. La durée moyenne des pièces ?
 
select avg(DureePiece)
from piece

 
8. Les pièces jouées par « comédien2 » dans lesquelles il a tenu un rôle de type : « principal » ?
 
select p.numpiece, nompiece
from piece p, jouer j, comedien c
where nomcomedien="comedien2"
and TypeDeRole="principal"
and p.NumPiece=j.NumPiece
and j.NumComedien=c.NumComedien

 
9. Les pièces dont le prix d’entrée est compris entre 15€ et 50€ ?
 
select numpiece, nompiece
from piece
where TarifEntreePiece between 15 and 50

 
10. Le nombre de comédien par type de rôle dans la pièce « le père Noël est …. » ?
 
select typederole, count(*)
from jouer j, piece p
where j.numpiece=p.numpiece
and nompiece like "le père Noël est %"
group by typederole

 
11. Les catégories de comédien dont le coût horaire est supérieur à la moyenne ?
 
select CodeCategorie, CoutHoraireCategorie
from categorie
where CoutHoraireCategorie >
(select avg(CoutHoraireCategorie) from categorie)

 
12. Les comédiens qui appartiennent à une catégorie dont le coût horaire est supérieur à la moyenne ?
 
select NumComedien,NomComedien,PnomComedien, CoutHoraireCategorie
from comedien co, categorie ca
where co.codecategorie=ca.CodeCategorie
and CoutHoraireCategorie >
(select avg(CoutHoraireCategorie) from categorie)

 
13. La pièce la plus chère ?
 
select NumPiece, NomPiece, TarifEntreePiece
from piece
where TarifEntreePiece =
(select max(TarifEntreePiece) from piece)


Message édité par Rim3000 le 08-06-2016 à 19:14:34
Reply

Marsh Posté le 15-05-2016 à 18:58:54   

Reply

Marsh Posté le 17-05-2016 à 11:41:24    

personne ?

Reply

Marsh Posté le 17-05-2016 à 11:48:23    

On va commencer par le début ;)
 
Tes réponses aux questions 1 et 2 me semblent bien.
 
Question 3 : Tu peux reprendre ta requête de la question 2 en utilisant l'attribut "GROUP BY" (je te laisse chercher sur le net la syntaxe exacte histoire de pas tout te donner non plus :P)
 
Question 4 : une requête assez simple, la difficulté est qu'il y a deux conditions à remplir; tu peux utiliser le mot-clé "AND" pour ça.
 
Réfléchis déjà à ces deux-là, on verra après pour la suite ;)

Reply

Marsh Posté le 17-05-2016 à 12:39:05    

merci beaucoup Zerist de prendre le temps de me répondre
 
j'ai répondu à la question 3 et je réfléchis pour la 4 en espérant répondre cet après midi
 
Merci encore !  :bounce:  
 

Reply

Marsh Posté le 17-05-2016 à 13:25:27    

La 1 est fausse : pour avoir un ordre alphabétique, il faut aussi le faire sur le prénom : ORDER BY NomComedien, PnomComedien

Reply

Marsh Posté le 17-05-2016 à 13:29:45    

antac a écrit :

La 1 est fausse : pour avoir un ordre alphabétique, il faut aussi le faire sur le prénom : ORDER BY NomComedien, PnomComedien


 
Exact, bien vu


---------------
https://www.flickr.com/photos/182924845@N04/
Reply

Marsh Posté le 17-05-2016 à 13:31:47    

merci antac et zerist j'ai corrigé, effectivement si deux comédiens ont le même nom cela ne fonctionnait pas


Message édité par Rim3000 le 17-05-2016 à 13:32:33
Reply

Marsh Posté le 17-05-2016 à 14:10:18    

Allez, je donne la 4 parce-que je suis gentil :D  
 

Code :
  1. SELECT NomComedien, PnomComedien 
  2. FROM comedien INNER JOIN Categorie
  3. ON comedien.CodeCategorie=Categorie.CodeCategorie
  4. INNER JOIN Jouer ON
  5. Jouer.NumComedien=Comedien.NumComedien
  6. INNER JOIN Piece ON
  7. Piece.NumPiece=Jouer.NumPiece
  8. WHERE CoutHoraireCategorie>100 AND NomPiece LIKE "Le père Noël est%"


 
Ca devrait te donner des éléments de réponses pour les autres.
La 11 est fausse


Message édité par antac le 17-05-2016 à 14:11:29
Reply

Marsh Posté le 17-05-2016 à 15:41:34    

voila ma réponse pour la 5

Reply

Marsh Posté le 17-05-2016 à 15:50:12    

Tu ne fais pas les jointures entre les différentes tables dans la question 5... La réponse serait quelque chose comme :

Code :
  1. SELECT NomAuteur
  2. FROM auteur
  3. INNER JOIN piece ON piece.numAuteur = auteur.numAuteur
  4. INNER JOIN calendrier ON calendrier.numPiece = piece.numPiece
  5. INNER JOIN representation ON calendrier.numRepresentation = representation.numRepresentation
  6. WHERE  DateRepresentation between "2002-12-01" and "2002-12-31" ;


---------------
https://www.flickr.com/photos/182924845@N04/
Reply

Marsh Posté le 17-05-2016 à 15:50:12   

Reply

Marsh Posté le 17-05-2016 à 16:10:31    

zerist a écrit :

Tu ne fais pas les jointures entre les différentes tables dans la question 5... La réponse serait quelque chose comme :

Code :
  1. SELECT NomAuteur
  2. FROM auteur
  3. INNER JOIN piece ON piece.numAuteur = auteur.numAuteur
  4. INNER JOIN calendrier ON calendrier.numPiece = piece.numPiece
  5. INNER JOIN representation ON calendrier.numRepresentation = representation.numRepresentation
  6. WHERE  DateRepresentation between "2002-12-01" and "2002-12-31" ;



 
 
j'étais en train de reposter une autre réponse en ayant relu ta précédente réponse, je regarde merci
 
SELECT NomAuteur  
FROM auteur INNER JOIN Piece  
ON auteur.NumPiece=Piece.NumPiece  
INNER JOIN Ecrire ON  
Ecrire.NumPiece=Comedien.NumComedien  
INNER JOIN Calendrier ON  
Piece.NumPiece=Calendrier.DateRepresentation  
WHERE DateRepresentation between "2002-12-01" and "2002-12-31"

Reply

Marsh Posté le 17-05-2016 à 16:15:37    

Tu n'as pas besoin créer une table "ecrire" pour représenter le lien entre pièce et auteur. En effet, cette relation a une cardinalité 1:1 dans le sens pièce->auteur, elle peut donc simplement être représentée par une clé étrangère "numAuteur" dans la table piece.


Message édité par zerist le 17-05-2016 à 16:16:32

---------------
https://www.flickr.com/photos/182924845@N04/
Reply

Marsh Posté le 17-05-2016 à 16:26:50    

En essayant de lancer la requête que tu indique dans MySQL Workbench, j'ai l'erreur suivante Error Code: 1054. Unknown column 'piece.NumAuteur' in 'on clause'
, je précise que le schéma n'a pas été crée par un script mais j'ai due créer les tables une a une à la main. Je ne vois pas l'erreur
 
Sinon pour la question 6 et 7, cela te semble bon ?
 
merci encore pour le temps passé et ta réactivité


Message édité par Rim3000 le 17-05-2016 à 16:28:47
Reply

Marsh Posté le 17-05-2016 à 16:32:50    

Si c'est ça, c'est que tu as oublié de mettre la colonne NumAuteur dans la table piece.
 
Est-ce que tu connais la 3ème forme normale. Sais tu ce que c'est qu'un Modèle Relationnel des Données ?

Reply

Marsh Posté le 17-05-2016 à 16:34:38    

C'est que au moment ou tu as créé tes tables, tu n'as pas créé la clé étrangère représentant le lien "écrire".  
 
Cela se crée de cette façon :  

Code :
  1. alter table piece ADD NumAuteur INT NOT NULL;
  2. alter table piece ADD FOREIGN KEY(NumAuteur) REFERENCES AUTEUR(NumAuteur);


 
Tes réponses aux questions 6 et 7 me semblent correctes.

Message cité 1 fois
Message édité par zerist le 17-05-2016 à 16:35:11

---------------
https://www.flickr.com/photos/182924845@N04/
Reply

Marsh Posté le 17-05-2016 à 16:51:17    

antac a écrit :

Si c'est ça, c'est que tu as oublié de mettre la colonne NumAuteur dans la table piece.
 
Est-ce que tu connais la 3ème forme normale. Sais tu ce que c'est qu'un Modèle Relationnel des Données ?


 
 
Dans le sujet je ne vois pas de colonne NumAuteur dans la table piece, y a t'il une explication à cela ?
 
Sinon dans le cours que j'ai, on n'en parle pas des formes normales..
 
J'ai juste ceci sur les standard, intro est assez basique
 
Les grandes dates de la normalisation du SQL sont :
 1986 Normalisation ANSI
 1987 Normalisation ISO de SQL 1
 1992 Normalisation ISO de SQL 2
 1999 Normalisation ISO de SQL 3.
 2003 Normalisation ISO de SQL 2003
 2008 Normalisation ISO de SQL 2008
 
Le SQL est composé de 3 sous-ensembles :
 Le Langage de Description des Données LDD
 Le Langage de Manipulation des Données LMD
 Le Langage de Contrôle des Données LCD
 
Puis ca commence direct sur la création de table et les commandes SELECT etc...
 
j'ai trouvé des infos intéressantes sur wikipedia à propos de 3ème forme normale

Message cité 1 fois
Message édité par Rim3000 le 17-05-2016 à 16:54:29
Reply

Marsh Posté le 17-05-2016 à 17:09:03    

zerist a écrit :

C'est que au moment ou tu as créé tes tables, tu n'as pas créé la clé étrangère représentant le lien "écrire".  
 
Cela se crée de cette façon :  

Code :
  1. alter table piece ADD NumAuteur INT NOT NULL;
  2. alter table piece ADD FOREIGN KEY(NumAuteur) REFERENCES AUTEUR(NumAuteur);


 
Tes réponses aux questions 6 et 7 me semblent correctes.


 
J'obtiens une erreur, un truc doit clocher dans ma base... Error Code: 1215. Cannot add foreign key constraint
 

Reply

Marsh Posté le 17-05-2016 à 17:16:08    

Pour en revenir aux réponses 4 et 5, je viens de revoir dans mon cours cet extrait? Le prof attend donc une forme plus simple, je vais essayer de transformer les deux requêtes.
 
3. LES JOINTURES.
Lorsque les informations se trouvent dans plusieurs tables, il faut faire une « jointure » sur ces tables.
Il existe des clauses spécifiques pour faire les jointures « INNER JOIN, OUTER JOIN, etc… » qui seront traitées dans un autre cours. Dans cette initiation au SQL nous traiterons les jointures comme une condition particulière que nous placerons dans le WHERE.
SELECT <…>
FROM <nom table 1>, <nom table 2>
WHERE < nom table 1>.<nom champ> = < nom table 2>.<nom champ> ;
 


Message édité par Rim3000 le 22-05-2016 à 02:51:43
Reply

Marsh Posté le 17-05-2016 à 17:27:22    

Rim3000 a écrit :


 
 
Dans le sujet je ne vois pas de colonne NumAuteur dans la table piece, y a t'il une explication à cela ?
 
Sinon dans le cours que j'ai, on n'en parle pas des formes normales..
 
J'ai juste ceci sur les standard, intro est assez basique
 
Les grandes dates de la normalisation du SQL sont :
 1986 Normalisation ANSI
 1987 Normalisation ISO de SQL 1
 1992 Normalisation ISO de SQL 2
 1999 Normalisation ISO de SQL 3.
 2003 Normalisation ISO de SQL 2003
 2008 Normalisation ISO de SQL 2008
 
Le SQL est composé de 3 sous-ensembles :
 Le Langage de Description des Données LDD
 Le Langage de Manipulation des Données LMD
 Le Langage de Contrôle des Données LCD
 
Puis ca commence direct sur la création de table et les commandes SELECT etc...
 
j'ai trouvé des infos intéressantes sur wikipedia à propos de 3ème forme normale


 
C'est normal que tu ne l'as pas...
Tu as une relation 1,n <-> 1,1, la clé primaire de la table ayant 1,n va vers la table ayant la liaison 1,1
 
http://stephanie.laporte.pagespers [...] eMCDMR.pdf

Reply

Marsh Posté le 17-05-2016 à 17:46:19    

Citation :

 

C'est normal que tu ne l'as pas...
Tu as une relation 1,n <-> 1,1, la clé primaire de la table ayant 1,n va vers la table ayant la liaison 1,1

 

http://stephanie.laporte.pagespers [...] eMCDMR.pdf

 

Super explication, je pense avoir compris


Message édité par Rim3000 le 17-05-2016 à 17:56:16
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed