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 :

Exercice base de donnée automobile


Sujet :

Langage SQL

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 21
    Points : 4
    Points
    4
    Par défaut Exercice base de donnée automobile
    Bonjour, je sollicite votre aide pour cette exercice (j'espère que les screenshots seront lisibles), je poste le sujet :

    j'espère que les images seront lisibles sinon je posterai les requêtes unes par unes à votre demande ! Tout d'abord sachez que les requêtes 1 à 6 sont réalisées, j'aurai besoin de vos lumières sur le reste (sachez ausi que je suis débutant et que l'exercice est pour débutant), je poste donc les essaies que j'ai fais pour les requêtes de 7 à 11 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7) SELECT suiviimpact.km 
    FROM suiviimpact 
    WHERE suiviimpact.km DESC 
    AND idVRP IN (SELECT vrp.idVRP, vrp.dateEmbauche, nom, prenom 
    FROM vrp, suiviimpact 
    WHERE dateEmbauche = 1)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    8) SELECT suiviimpact.date, automobile.gCO2km AS "empreinte carbone en tonne" 
    FROM automobile, suiviimpact 
    WHERE gCO2km = SUM(gCO2km) 
    AND suiviimpact.date = '2015'
    9) Comprend pas la question...............


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    10) UPDATE pastille 
    SET idPastille = idPastille + 1 
    WHERE .................. 
     
    INSERT INTO pastille 
    FROM pastillesEco2015 
    VALUES (Couleur, Explications, Code)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    11) SELECT 
    FROM energie NATURAL JOIN automobile USING (idEnergie) 
    WHERE libelleEnergie = 'Essence' 
    AND automobile.dateAchat BETWEEN '01/01/2006' AND '31/12/2010' 
    AND idEnergie IN (SELECT automobile.dateAchat, automobile.idEnergie, energie.libelleEnergie 
    FROM energie NATURAL JOIN automobile USING (idEnergie) 
    WHERE libelleEnergie = 'diesel' 
    AND automobile.dateAchat >= '01/01/2011')
    Cependant si vous voulez voir les réponses que j'ai mis sur les questions précédentes, je suis tout a fait près à les donner
    Images attachées Images attachées     

  2. #2
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 21
    Points : 4
    Points
    4
    Par défaut
    Personne ?

  3. #3
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 133
    Points : 38 555
    Points
    38 555
    Billets dans le blog
    9
    Par défaut
    Bonsoir

    quelques indices rapidement avant l'extinction des feux, la journée fut longue


    cette requete :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7) SELECT suiviimpact.km 
    FROM suiviimpact 
    WHERE suiviimpact.km DESC 
    AND idVRP IN (SELECT vrp.idVRP, vrp.dateEmbauche, nom, prenom 
    FROM vrp, suiviimpact 
    WHERE dateEmbauche = 1)
    peut être améliorée de la façon suivante :
    - votre filtre where a une syntaxe invalide, il faut coder "where colonne operateur valeur/colonne" par exemple : where table1.colonne1 > 15
    - le mot clef DESC (descending) est une option du tri (order by) et non du filetre (where)
    - quand vous utilisez plusieurs tables dans une requete, soit via des jointures, soit dans votre cas via une requete imbriquée, il est recommandé d'utiliser des alias pour éviter les erreurs
    ==> from suiviimpact as Table1 .... and idVRT in (select......) as table2
    - pour vérifier l'existence d'une valeur, il est préférable d'utiliser "where exists" plutot que where ... in (select...)
    - votre filtre sur la date d'embauche est erroné : dateembauche est une colonne de type date, 1 n'est pas une valeur de date valide

    Et celle ci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ) SELECT suiviimpact.date, automobile.gCO2km AS "empreinte carbone en tonne" 
    FROM automobile, suiviimpact 
    WHERE gCO2km = SUM(gCO2km) 
    AND suiviimpact.date = '2015'
    Fait référence à deux tables, mais vous avez oublié de coder les critères de jointures : on table1.colonne1 = table2.colonne2
    Si suiviimpact.date est une colonne de format date (j'avoue avoir du mal à lire vos documents, ma vue n'est plus ce qu'elle était ) alors 2015 n'est pas une valeur de date valide

  4. #4
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 21
    Points : 4
    Points
    4
    Par défaut
    Bonjour, pour la requête 7 :

    -Pour le mot clé DESC, vous avez raison je viens de le voir, je vais donc réécrire d'une autre façon.
    -Pour les alias, il est vrai que j'en utilise pas beaucoup, voir peu, je ne suis pas trop fan alors pardon si j'oublie de mettre des alias.
    -Pour l'existence, désolé mais je ne maîtrise pas du tout le "WHERE EXISTS", car je ne l'ai que très peu utilisé, pour ne pas dire jamais, étant donné que l'occasion ne s'est pas présenté.
    -Pour la date d'embauche, oui effectivement je n'avais pas fait attention au départ ! Mais dans ce cas comment marquer pour cette requête le fais que les 2 ont été embauchés en même temps ? Puisuqe q'on ne dispose pas de la date d'embauche, ni de la date de création de la boîte...??


    Est ce que quelque chose de ce type serait mieux (sachant que pour la date je sèche du coup...):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT SUM (suiviimpact.km)
    FROM suiviimpact
    ORDER BY suiviimpact.km DESC
    AND idVRP IN (SELECT vrp.idVRP, vrp.dateEmbauche, nom, prenom
                  FROM vrp, suiviimpact
                  WHERE dateEmbauche = .......)

    Pour la requête 8 :

    -Pour la jointure : "ON*champClé1*=*champClé2*: effectue une jointure en prenant comme condition de jointure ce qui est placé après "ON"".
    seulement la table automobile ne peut pas être égale à la table suiviimpact, si ?? Si oui, alors on fait une jointure de type : "table1 JOIN table2 ON table1.commun = table2.commun", commun représente les champs qui sont en communs entre la table 1 et 2 !! Ici entre la table automobile et suiviimpact le seul champ qu'il y a en commun est numImma.

    On aurait alors cela ??? :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT suiviimpact.date, automobile.gCO2km AS "empreinte carbone en tonne"
    FROM  automobile JOIN suiviimpact ON automobile.numImma = suiviimpact.numImma
    WHERE gCO2km = SUM(gCO2km)
    AND suiviimpact.date between '01/01/2015' AND '31/12/2015'

  5. #5
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 133
    Points : 38 555
    Points
    38 555
    Billets dans le blog
    9
    Par défaut
    Bonjour,

    Vos requêtes présentent de nombreuses erreurs de syntaxe.
    Vous devriez consulter les sujets sur le langage SQL, qui vous permettront de corriger tout ça et de choisir les bonnes options (car il y a toujours plusieurs solutions à un même problème) qui répondent à vos besoins.
    Jetez un coup d'œil ici :
    http://www.developpez.net/forums/d68...q-langage-sql/

  6. #6
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 21
    Points : 4
    Points
    4
    Par défaut
    Ca ne sert pas à grand chose, j'ai déjà un cours sur le SQL, ceci est un exercice qui nous à été posé, c'est juste que j'ai un peu de mal ! Maintenant j'essaye de re-regarder mon cours pour apprendre et corriger les erreurs

  7. #7
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 133
    Points : 38 555
    Points
    38 555
    Billets dans le blog
    9
    Par défaut
    OK, mais alors soyez bien attentifs à la présence et à l'ordre des mots clefs

    Par exemple dans votre requete :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT SUM (suiviimpact.km)
    FROM suiviimpact
    ORDER BY suiviimpact.km DESC
    AND idVRP IN (SELECT vrp.idVRP, vrp.dateEmbauche, nom, prenom
                  FROM vrp, suiviimpact
                  WHERE dateEmbauche = .......)
    Il manque le WHERE de la requête principale
    l'order by devrait être mis à la fin, après la requête imbriquée
    il manque le critère de jointure de la requête imbriquée

    De plus, votre requête imbriquée ne doit sélectionner que la colonne utile à votre vérification, ici idVRP, les autres colonnes ne doivent pas être citées, elles ne servent à rien, elles provoquent donc des I/O supplémentaires chargent inutilement le réseau
    Enfin, comme mentionné plus haut, un test d'existence ne doit pas utiliser une requête imbriquée de type where ... in (subselect) mais un where exists

    Votre requete devrait ressembler à quelque chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT SUM (suiviimpact.km)
    FROM suiviimpact  as MAIN
    WHERE ........
    AND exists
         (SELECT 1
          FROM vrp as SUBQ
          where SUBQ.idVRP = main.idVRP
            and SUBQ.dateEmbauche = .......)
    ORDER BY suiviimpact.km DESC

  8. #8
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 21
    Points : 4
    Points
    4
    Par défaut
    D'accord dans le WHERE j'ai mis un suiviimpact.km mais dans dateEmbauche je ne vois toujours pas quoi mettre ?? J'ai compris pourquoi 1 n'est pas bon, mais comment dire à ce moment la que l'on doit avoir la date d'embauche du premier jour (enfin la date d'embauche des 2 premiers embauchés plutôt...........) ??

  9. #9
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 133
    Points : 38 555
    Points
    38 555
    Billets dans le blog
    9
    Par défaut
    Je n'avais répondu que sur le plan syntaxique de votre requete

    Pour la question 7, on vous a facilité la vie en précisant que les 2 plus gros rouleurs ont été embauchés le même jour
    En d'autres termes, vous pouvez tester "qu'il n'existe pas de vrp embauché avant eux", ce qui en SQL donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT T1.idVRP, T1.nom, t1.prenom, SUM(T2.km)
    FROM VRP as T1
    INNER JOIN suiviimpact as T2
       ON T2.idVRP = T1.idVRP
    WHERE NOT exists
         (SELECT 1
          FROM vrp as T3
          where T3.dateEmbauche < T1.dateEmbauche)
    GROUP BY T1.idVRP, T1.nom, t1.prenom
    ORDER BY SUM(T2.km)DESC

  10. #10
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 21
    Points : 4
    Points
    4
    Par défaut
    Aaahhhhhh d'accord, je n'avais pas vu la chose de la sorte mais d'accord !

  11. #11
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 21
    Points : 4
    Points
    4
    Par défaut
    Ahhhhh d'accord je n'avait pas vu la chose de la sorte mais ce n'est pas bête

Discussions similaires

  1. Exercice SQL avec la base de données déjà fournie
    Par tafpro dans le forum Langage SQL
    Réponses: 0
    Dernier message: 13/04/2014, 22h17
  2. [AC-2002] Création base de données gestion parc automobile
    Par Accessaa dans le forum Modélisation
    Réponses: 14
    Dernier message: 27/05/2013, 15h59
  3. [AC-2010] Base de données secteur automobile
    Par new-utlisateur dans le forum Access
    Réponses: 7
    Dernier message: 03/07/2012, 15h32

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