IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

Bloqué sur un exercice en SQL


Sujet :

Langage SQL

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 19
    Points : 7
    Points
    7
    Par défaut Bloqué sur un exercice en SQL
    Bonjour à tous,

    je bloque sur une partie d'un exercice

    voici le sujet:
    Pièce jointe 206699

    Ecrire les deux requêtes :

    1) une liste indiquant le nom et la ville de l'organisation, le nom et le prenom de l'etudiant ainsi que la dte du contrat. Elle sera triée par nom d'organisation et par date de contrat.

    2) une liste des organisations ayant signé plus de 5 contrats indiquant le nom de l'organisation et le nombre de contrats.

    Pour la 1) j'ai fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Select o.nom, o.ville, e.nom, e.prenom, c.dateContrat
    From contrat c
    Inner join organisation o
    On c.idContrat=o.idContrat
    Inner join etudiant e
    On c.idContrat = e.idContrat
    Order by o.nom, c.dateContrat
    Pour la 2) j'ai 2 solutions
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Select o.nom, count(*) as nbContrats
    From organisation o
    Inner join contrat c 
    On o.idOrg = c.idContrat
    Group by o.nom
    Having count(*) > 5
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Select o.nom, nbContratsOrg
    From organisation o
    Inner join contrat c 
    On o.idOrg = c.idContrat
    where nbContratsOrg > 5

    voilà une correction serai la bien venu

    Merci !

  2. #2
    Membre éprouvé Avatar de Oishiiii
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2009
    Messages
    508
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Août 2009
    Messages : 508
    Points : 1 104
    Points
    1 104
    Par défaut
    Bonjour,

    Vous nous présentez un MCD et des requêtes SQL.
    Mais en général avant de passer au SQL, on réalise un MLD à partir du MCD. Est-ce que vous avez vu ça en cours ?

    Parce que d'après le MCD, un étudiant peut souscrire plusieurs contrats.
    Dans ce cas pour la réponse 1), le critère de jointure est faux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Inner join etudiant e
    On c.idContrat = e.idContrat
    En SQL, et au niveau du MLD, il ne devrait pas y avoir de colonne idContrat dans la table Etudiant.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 19
    Points : 7
    Points
    7
    Par défaut Bloqué sur un exercice en SQL
    Bonjour,

    oui, désolé j'ai oublié de joindre le schéma relationnel

    à vrai dire je l'est fais sans

    le voici :

    Pièce jointe 206714


    je rectifie donc les codes :

    pour la 1) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Select o.nom, o.ville, e.nom, e.prenom, c.dateContrat
    From contrat c
    Inner join organisation o
    On c.id=o.id
    Inner join etudiant e
    On c.id = e.id
    Order by o.nom, c.dateContrat
    pour la 2) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Select o.nom, count(*) as nbContrats
    From organisation o
    Inner join contrat c 
    On o.idOrg = c.idOrg
    Group by o.nom
    Having count(*) > 5
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Select o.nom, nbContratsOrg
    From organisation o
    Inner join contrat c 
    On o.idOrg = c.idOrg
    where nbContratsOrg > 5

  4. #4
    Membre éprouvé Avatar de Oishiiii
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2009
    Messages
    508
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Août 2009
    Messages : 508
    Points : 1 104
    Points
    1 104
    Par défaut
    Mode Prof: Activé

    Relisez bien le schéma relationnel, et prenez votre temps.
    Tous les critères de jointures sont faux: attention au noms des colonnes.

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 19
    Points : 7
    Points
    7
    Par défaut Bloqué sur un exercice en SQL
    pas de souci pour l'activation

    le problème c'est que je ne vois pas comment faire une distinction entre "nom de l'étudiant" et "nom de l'organisation" sachant qu'ils se nomment tous les deux "nom" ??

  6. #6
    Membre éprouvé Avatar de Oishiiii
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2009
    Messages
    508
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Août 2009
    Messages : 508
    Points : 1 104
    Points
    1 104
    Par défaut
    Citation Envoyé par Kenoby Voir le message
    le problème c'est que je ne vois pas comment faire une distinction entre "nom de l'étudiant" et "nom de l'organisation" sachant qu'ils se nomment tous les deux "nom" ??
    Alors la vous parlez de la partie SELECT de la requête:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Select o.nom, o.ville, e.nom, e.prenom, c.dateContrat
    Vous avez préfixé les colonnes avec les alias qui correspondent aux tables.
    Donc syntaxiquement, cela respecte le SQL. Et même si dans le résultat il y a 2 colonnes "nom" (ce qui n'est pas terrible...), le langage SQL l'accepte....
    Les alias en préfixes permettent d'enlever l’ambiguïté, on sait à quelle table appartient la colonne.

    Cela dit, vous pouvez utiliser des Alias dans le SELECT comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Select o.nom AS NomOrganisation, o.ville, e.nom AS NomEtudiant, e.prenom, c.dateContrat
    Ce que vous devez revoir c'est vos jointures, qui sont fausses.

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 19
    Points : 7
    Points
    7
    Par défaut
    d'accord merci, c'est très bien aussi avec les alias

    je regarde les jointures...

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 19
    Points : 7
    Points
    7
    Par défaut
    voilà mais je ne sais pas si c'est bon...

    pour la 1)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Select o.nom, o.ville, e.nom, e.prenom, c.dateContrat
    From contrat c
    Inner join organisation o
    On c.id=o.id
    Inner join etudiant e
    On c.idEtudiant = e.idEtudiant
    Order by o.nom, c.dateContrat

  9. #9
    Membre éprouvé Avatar de Oishiiii
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2009
    Messages
    508
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Août 2009
    Messages : 508
    Points : 1 104
    Points
    1 104
    Par défaut
    Les critères de jointure sont faux.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    From contrat c
    Inner join organisation o
    On c.id=o.id
    Vous essayez de joindre (de rassembler) les lignes de Contrat et de Organisation.

    Mais le critère de jointure (ON ...) dit: "faire la jointure quand c.id est égal à o.id"
    c.id est l’identifiant de Contrat. o.id est l'identifiant de Organisation.
    ça n'a rien à voir, vous ne pouvez pas joindre ces 2 colonnes ensemble.

    Pareil pour Contrat et Etudiant.

    Relisez votre schéma relationnel, vous devez utiliser la notion de Clé étrangère pour réaliser les jointures.

  10. #10
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 19
    Points : 7
    Points
    7
    Par défaut
    est-ce bon ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Select o.nom, o.ville, e.nom, e.prenom, c.dateContrat
    From contrat c
    Inner join organisation o
    On c.id=o.idOrg
    Inner join etudiant e
    On c.id = e.idEtudiant
    Order by o.nom, c.dateContrat

  11. #11
    Membre éprouvé Avatar de Oishiiii
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2009
    Messages
    508
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Août 2009
    Messages : 508
    Points : 1 104
    Points
    1 104
    Par défaut
    Non toujours pas.
    o.idOrg et e.idEtudiant n'existent pas dans votre schéma relationnel.

  12. #12
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 19
    Points : 7
    Points
    7
    Par défaut
    ok

    est maintenant ??

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Select o.nom, o.ville, e.nom, e.prenom, c.dateContrat
    From contrat c
    Inner join organisation o
    On o.id = c.idOrg
    Inner join etudiant e
    On e.id = c.idEtudiant
    Order by o.nom, c.dateContrat

  13. #13
    Membre éprouvé Avatar de Oishiiii
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2009
    Messages
    508
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Août 2009
    Messages : 508
    Points : 1 104
    Points
    1 104
    Par défaut
    Oui, là c'est tout bon

  14. #14
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 19
    Points : 7
    Points
    7
    Par défaut
    ouf!

    donc en suivant le même principe, pour la 2) cela pourrait donner :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Select o.nom, count(*) as nbContrats
    From organisation o
    Inner join contrat c 
    On c.idOrg = o.id 
    Group by o.nom
    Having count(*) > 5

  15. #15
    Membre éprouvé Avatar de Oishiiii
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2009
    Messages
    508
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Août 2009
    Messages : 508
    Points : 1 104
    Points
    1 104
    Par défaut
    Oui, c'est juste

    PS:
    Si vous n'avez pas encore vu Count(*) en cours, il faudrait peut-être tout simplement utiliser la colonne nbContratsOrg de la table Organisation, qui a l'air d'être là, spécialement pour cette question

  16. #16
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 19
    Points : 7
    Points
    7
    Par défaut
    merci !

    pour finir cette méthode est-elle bonne aussi pour la 2) ??

    dans celle-ci je n'est pas utilisé la clause "group by" ni "having"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Select o.nom, nbContratsOrg
    From organisation o
    Inner join contrat c 
    On c.idOrg = o.id 
    where nbContratsOrg > 5

  17. #17
    Membre éprouvé Avatar de Oishiiii
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2009
    Messages
    508
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Août 2009
    Messages : 508
    Points : 1 104
    Points
    1 104
    Par défaut
    Yes c'est bon

  18. #18
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 19
    Points : 7
    Points
    7
    Par défaut
    ok beaucoup de l'aide

    sujet

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Bloqué sur deux requêtes SQL
    Par mouradj2006 dans le forum Langage SQL
    Réponses: 11
    Dernier message: 28/10/2015, 17h46
  2. Help please, je bloque sur un exercice
    Par YanisY dans le forum Unix
    Réponses: 4
    Dernier message: 29/01/2013, 16h00
  3. je bloque sur de simples requêtes SQL
    Par ikuzar dans le forum Débuter
    Réponses: 6
    Dernier message: 17/09/2012, 19h17
  4. Réponses: 4
    Dernier message: 25/10/2005, 23h40
  5. Au secours, sur les licences MS SQL Server
    Par papouAlain dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 31/10/2004, 11h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo