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 :

Correction d'exercice


Sujet :

Langage SQL

  1. #1
    Candidat au Club
    Homme Profil pro
    ouvrier
    Inscrit en
    Octobre 2019
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : ouvrier
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2019
    Messages : 8
    Points : 4
    Points
    4
    Par défaut Correction d'exercice
    Bonjour,

    je n'y connais rien en langage SQL je dois passer un concours pour devenir chargé de prévention , et me suis inscrit pour des devoirs de préparation. dans ce module, j'ai un exercice a rendre concernant le SQL. j'ai pas mal investigué pour y comprendre quelque chose, ça viens, mais le fait est que l'on n'apprend pas a parler une langue en quelques jours. à vrai dire je ne sais même pas pourquoi l'on me balance ce genre de sujet alors que je m'oriente vers le métier de chargé de prévention ?
    Mais bon...

    Donc voilà mon problème et ce que j'ai pu définir comme requête SQL pour mener à bien celui ci :

    Nom : 1572188942-capture-du-2019-10-27-16-08-34.png
Affichages : 417
Taille : 286,3 Ko


    voilà mon rendu :

    1-
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Select Num_Chambre, Nbr_Lit from Chambre ORDER BY,Num_chambre
    2-
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Select Sum(Nbr_Pers) from chambre
    3-
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Select prix/Nbr-Pers from chambre where Equ = "TV"
    4-
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Select Num_client, Num-chambre from table Réservation where Date_Arr = '09/02/2004'
    5-
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Select Num_chambre From Table-Chambre Where prix < 80 OR ( equ = Bain and prix < 120 )
    6-
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Select Num_Client, Num_chambre, Confort From Table réservation LEFT JOIN Table-chambre. Num_Chambre Where Date_Arr = 09/02/2004



    Dites moi si je dois corriger des ' ou des_ ou encore d'autres commandes. Merci

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 115
    Points : 28 493
    Points
    28 493
    Par défaut
    Pas trop mal pour un débutant...
    1. Une virgule qui traine
    2. OK
    3. Une chaine doit être encadrée d'apostrophes
    4. Si rien n'est précisé, utiliser des dates au format ANSI 'yyyy-mm-dd'
    5. OK
    6. Là il faut revoir le cours sur les jointures

    Je me pose aussi la question suivante : Les clients "ayant réservé des chambres pour le XXX" sont-ils seulement ceux qui arrivent le XXX ou dont le séjour comprend cette date ?

  3. #3
    Candidat au Club
    Homme Profil pro
    ouvrier
    Inscrit en
    Octobre 2019
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : ouvrier
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2019
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par al1_24 Voir le message
    Pas trop mal pour un débutant...
    1. Une virgule qui traine
    2. OK
    3. Une chaine doit être encadrée d'apostrophes
    4. Si rien n'est précisé, utiliser des dates au format ANSI 'yyyy-mm-dd'
    5. OK
    6. Là il faut revoir le cours sur les jointures

    Je me pose aussi la question suivante : Les clients "ayant réservé des chambres pour le XXX" sont-ils seulement ceux qui arrivent le XXX ou dont le séjour comprend cette date ?


    Bonjour,
    je suppose que c'est pour ceux qui arrivent à cette date

  4. #4
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 385
    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 385
    Points : 39 883
    Points
    39 883
    Billets dans le blog
    9
    Par défaut
    Bonjour,

    Effectivement, c'est curieux de vous demander des compétences SQL pour ce poste, mais bon.
    Pour commencer, félicitations, non seulement vous avez fait l'effort d'essayer, mais en plus le résultat est tout à fait honorable

    Quelques remarques d'ordre général

    Les littéraux doivent être encadrés de quotes simples et non pas doubles
    Les dates s'expriment sous la forme 'AAAA-MM-JJ'
    Enfin, dans les requête, il ne faut pas utiliser "table" devant les noms des tables
    Pour mettre en évidence vos requêtes, utilisez la balise QUOTE (symbole dièse # de la barre d'icones)

    ET quelques commentaires concernant vos réponses

    -1- n° de chambre et capacité :
    votre solution est peut-être la bonne, mais il me semble que la capacité c'est plus probablement le nombre de personne que le nombre de lits. Le principe de la requête reste le même. Pensez à supprimer le mot "table" devant le nom de la table

    -2- ok (même remarque concernant le mot "table")

    -3- prix par personne des chambres avec TV :
    votre solution est la bonne si on veut le prix par chambre, mais en ce cas, il serait utile d'ajouter le n° de chambre.
    si on veut le prix moyen, alors il faut faire la somme des prix divisée par la somme du nombre de personnes des chambres équipées
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select sum(prix)/sum(Nbr-Pers)
    from chambre
    where Equ = 'TV'
    -4- ok au format de la date près (à remplacer par 'AAAA-MM-JJ'

    -5- ok aussi, (vous ne vous êtes pas fait piéger par la combinaisons d'opérateur and/or et avez bien placé les parenthèses) mais attention il faut encadrer la constante 'bain' de simple quotes et comme on dit maximum 80€ ou 120€, il faut comprendre bornes incluses

    -6- ici il faut faire une jointure.
    Vous avez utilisé une jointure LEFT (OUTER) JOIN, pourquoi pas, mais ce n'était pas nécessaire car on ne demande de résultat que pour les chambres ayant fait l'objet d'une réservation.
    une jointure LEFT ou RIGHT OUTERn'est nécessaire que si on demande le confort de toutes les chambres, et, pour celles qui ont fait l'objet de réservation, d'ajouter les infos de ces réservations
    Mais encore une fois, ça n'est pas gênant.
    Par contre, vous n'avez pas codé le critère de jointure opérateur ONVoici la syntaxe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Select RS.Num_Client
         , RS.Num_chambre
         , CH.Confort 
    From réservation   as RS
    inner JOIN chambre as CH
       on CH.Num_Chambre=RS.num_chambre
    Where RS.Date_Arr = '2014-09-02'
    ;
    Notez :
    - l'utilisation d'alias (AS RS et AS CH) qui permettent de manipuler des noms courts pour les tables. Ca facilite la vie et c'est nécessaire quand une même colonne est présente dans plusieurs tables d'une même requête.
    - la mise en forme de la requête avec des retours à la ligne, ça facilite la lecture et donc la maintenance
    - l'ajout de l'opérateur ON pour préciser les critères de jointure
    - la suppression du mot "table"
    - le format de la date entre simple quotes : 'AAAA-MM-JJ'

    Bonne chance pour vos examens

  5. #5
    Candidat au Club
    Homme Profil pro
    ouvrier
    Inscrit en
    Octobre 2019
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : ouvrier
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2019
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    [QUOTE=al1_24;11198429]Pas trop mal pour un débutant...
    [LIST=1][*]Une virgule qui traine


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Select Num_Chambre, Nbr_Lit from Chambre ORDER BY Num_chambre
    c'est mieux comme cela ?

  6. #6
    Candidat au Club
    Homme Profil pro
    ouvrier
    Inscrit en
    Octobre 2019
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : ouvrier
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2019
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par escartefigue Voir le message
    Bonjour,

    Effectivement, c'est curieux de vous demander des compétences SQL pour ce poste, mais bon.
    Pour commencer, félicitations, non seulement vous avez fait l'effort d'essayer, mais en plus le résultat est tout à fait honorable

    Quelques remarques d'ordre général

    Les littéraux doivent être encadrés de quotes simples et non pas doubles
    Les dates s'expriment sous la forme 'AAAA-MM-JJ'
    Enfin, dans les requête, il ne faut pas utiliser "table" devant les noms des tables
    Pour mettre en évidence vos requêtes, utilisez la balise QUOTE (symbole dièse # de la barre d'icones)

    ET quelques commentaires concernant vos réponses

    -1- n° de chambre et capacité :
    votre solution est peut-être la bonne, mais il me semble que la capacité c'est plus probablement le nombre de personne que le nombre de lits. Le principe de la requête reste le même. Pensez à supprimer le mot "table" devant le nom de la table

    -2- ok (même remarque concernant le mot "table")

    -3- prix par personne des chambres avec TV :
    votre solution est la bonne si on veut le prix par chambre, mais en ce cas, il serait utile d'ajouter le n° de chambre.
    si on veut le prix moyen, alors il faut faire la somme des prix divisée par la somme du nombre de personnes des chambres équipées
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select sum(prix)/sum(Nbr-Pers)
    from chambre
    where Equ = 'TV'
    -4- ok au format de la date près (à remplacer par 'AAAA-MM-JJ'

    -5- ok aussi, (vous ne vous êtes pas fait piéger par la combinaisons d'opérateur and/or et avez bien placé les parenthèses) mais attention il faut encadrer la constante 'bain' de simple quotes et comme on dit maximum 80€ ou 120€, il faut comprendre bornes incluses

    -6- ici il faut faire une jointure.
    Vous avez utilisé une jointure LEFT (OUTER) JOIN, pourquoi pas, mais ce n'était pas nécessaire car on ne demande de résultat que pour les chambres ayant fait l'objet d'une réservation.
    une jointure LEFT ou RIGHT OUTERn'est nécessaire que si on demande le confort de toutes les chambres, et, pour celles qui ont fait l'objet de réservation, d'ajouter les infos de ces réservations
    Mais encore une fois, ça n'est pas gênant.
    Par contre, vous n'avez pas codé le critère de jointure opérateur ONVoici la syntaxe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Select RS.Num_Client
         , RS.Num_chambre
         , CH.Confort 
    From réservation   as RS
    inner JOIN chambre as CH
       on CH.Num_Chambre=RS.num_chambre
    Where RS.Date_Arr = '2014-09-02'
    ;
    Notez :
    - l'utilisation d'alias (AS RS et AS CH) qui permettent de manipuler des noms courts pour les tables. Ca facilite la vie et c'est nécessaire quand une même colonne est présente dans plusieurs tables d'une même requête.
    - la mise en forme de la requête avec des retours à la ligne, ça facilite la lecture et donc la maintenance
    - l'ajout de l'opérateur ON pour préciser les critères de jointure
    - la suppression du mot "table"
    - le format de la date entre simple quotes : 'AAAA-MM-JJ'

    Bonne chance pour vos examens


    Bonjur,

    l’information fuse avec vous.

    Merci

    je dois avouer que toutes ces informations à assimiler, c'est très complexe pour moi, mais pas inintéressant. j'ai de toute manière, bien que très récent dans sa pratique, un attrait particulier à tout ce qui touche aux ordinateurs ce n'est que le temps qui manque pour pouvoir apprendre à utiliser la multitude de ses fonctions

  7. #7
    Candidat au Club
    Homme Profil pro
    ouvrier
    Inscrit en
    Octobre 2019
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : ouvrier
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2019
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    donc, voici mes corrections apportées :

    1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Select Num_Chambre, Nbr_Lit from Chambre ORDER BY Num_chambre
    3
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Select ( prix/Nbr-Pers) from chambre where Equ = "TV"
    4
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Select Num_client, Num-chambre from table Réservation where Date_Arr = '2004-09-02'
    6
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Select RS.Num_Client  , RS.Num_chambre, CH.Confort From réservation   as RS inner JOIN chambre as CH on CH.Num_Chambre=RS.num_chambre Where RS.Date_Arr = '2014-09-02'

    ah, une autre question, je vois que vous formulez vos commandes SQL en colonnes, ne peut on le faire en ligne comme je le fais, ou dois ce être fait en colonne superposée ?

  8. #8
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 115
    Points : 28 493
    Points
    28 493
    Par défaut
    Escartefigue a identifié des anomalies que j'avais laissé passer

    Pour la présentation du code il n'y a aucune obligation. C'est juste que la présentation "en colonnes" est plus lisible parce qu'elle met en évidence les différentes parties de la requête.

  9. #9
    Candidat au Club
    Homme Profil pro
    ouvrier
    Inscrit en
    Octobre 2019
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : ouvrier
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2019
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par al1_24 Voir le message
    Escartefigue a identifié des anomalies que j'avais laissé passer

    Pour la présentation du code il n'y a aucune obligation. C'est juste que la présentation "en colonnes" est plus lisible parce qu'elle met en évidence les différentes parties de la requête.

    c'est normale qu''Escartefigue ai levé des anomalies que vous n'aviez pas soulevées car comme son pseudo l'indique, il est du sud, et par conséquent "plus pointilleux"


    oui, il est vrai que cela est plus lisible en colonne superposée, mais peut on lancer les requête dans l'outil comme cela ?

  10. #10
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 385
    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 385
    Points : 39 883
    Points
    39 883
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par pourpalier1 Voir le message
    donc, voici mes corrections apportées :
    1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Select Num_Chambre, Nbr_Lit from Chambre ORDER BY Num_chambre
    Même remarque que précédemment : est-ce que la capacité est le nombre de lits (votre requête) ou le nombre de places (plus probable)...



    Citation Envoyé par pourpalier1 Voir le message
    3
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Select ( prix/Nbr-Pers) from chambre where Equ = "TV"
    Vous avez oublié de remplacer les quotes doubles par des simples



    Citation Envoyé par pourpalier1 Voir le message
    4
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Select Num_client, Num-chambre from table Réservation where Date_Arr = '2004-09-02'
    OK


    Citation Envoyé par pourpalier1 Voir le message
    6
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Select RS.Num_Client  , RS.Num_chambre, CH.Confort From réservation   as RS inner JOIN chambre as CH on CH.Num_Chambre=RS.num_chambre Where RS.Date_Arr = '2014-09-02'
    OK



    Citation Envoyé par pourpalier1 Voir le message
    ah, une autre question, je vois que vous formulez vos commandes SQL en colonnes, ne peut on le faire en ligne comme je le fais, ou dois ce être fait en colonne superposée ?
    La présentation n'est la que pour le confort de lecture, plus la requête est complexe, plus une présentation soignée facilite la maintenance.
    Tous les outils que je connais acceptent d'exécuter les requêtes indépendamment de la qualité ou non de leur présentation, seule la validité syntaxique compte

  11. #11
    Candidat au Club
    Homme Profil pro
    ouvrier
    Inscrit en
    Octobre 2019
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : ouvrier
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2019
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    Merci beaucoup de votre aide et vos leçons, dès que j'en aurais le temps, je me plongerais plus profondément dans le SQL

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

Discussions similaires

  1. Correction d'exercice UML
    Par Daneel78 dans le forum UML
    Réponses: 18
    Dernier message: 19/06/2011, 01h32
  2. "Le langage C++" : corrections aux exercices ...
    Par Marco85 dans le forum C++
    Réponses: 2
    Dernier message: 03/02/2006, 15h45
  3. Réponses: 4
    Dernier message: 27/02/2005, 22h43
  4. Demande de corrections d'exercices Turbo Pascal
    Par Helpine dans le forum Turbo Pascal
    Réponses: 2
    Dernier message: 16/01/2005, 11h38

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