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] Besoin d'aide au niveau des requetes (gestion des campings)


Sujet :

Langage SQL

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 4
    Points : 2
    Points
    2
    Par défaut [exercice] Besoin d'aide au niveau des requetes (gestion des campings)
    Bonjour,
    alors je passe pour un débile a venir poster un truc si simple sur un tel forum mais j'ai vraiment besoin d'aide!
    Je vais passer un exam dans pas longtemps en base de donnée et en fait, etant donné que j'ai rien pour tester mes requete SQL je ne sais pas du tout si c'est bon ou pas...
    Je n'ai pas suffisemment de temps pour recherché des exemple qui correspondent a mes besoins (du moins suffisemment pour que je face le rapprochement) donc je viens poster ici en dernier recours.

    Alors voila j'ai le schema de la base suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    (C'est pas vraiment du code mais bon)
    
    EMPLACEMENT(NOEMP,TYPE,SUPERF,PRIX)
    RESERVATION(NORESERV,DATEDEB,DATEFIN,NOEMP,CODCLI)
    CLIENT(CODCLI,NOMCLI,PRENOMCLI,ADRESSE,VILLE)
    Remarque: il s'agit donc d'une base de "gestion" d'un camping...
    Le TYPE d'emplacement peut prendre par exemple la valeur "caravane", "tentes", etc...

    Le script SQL de création de la base ne pose pas de problème, par contre pour les requetes j'avoue etre un peu perdu...
    Donc les requetes demandées sont les suivantes:

    1) Quels sont les emplacements (numéro,superficie, prix) de type "caravane" occupés le 10/08/2005.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT E.NOEMP,E.SUPERF,E.PRIX
    FROM EMPLACEMENT E, RESERVATION R
    WHERE R.TYPE='caravane'
       AND R.DATADEB<11/08/2005
       AND R.DATAFIN>09/08/2005
       AND E.NOEMP=R.NOEMP
    2)Quels sont les emplacements (numéro, type, prix) pour lesquels il n'y a aucune réservation.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT E.NOEMP, E.TYPE, E.PRIX
    FROM EMPLACEMENT E
    WHERE E.NOEMP=((SELECT R.NOEMP
                     FROM RESERVATION R)
                     MINUS
                     (SELECT EM.NOEMP
                     FROM EMPLACEMENT EM))
    3)Donnez la liste des emplacements pour lesquels on a enregistré plus de 50 jours de réservation.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT E.NOEMP, E.TYPE, E.SUPERF, E.PRIX
    FROM EMPLACEMENT E, RESERVATION R
    WHERE R.DATEDEB-R.DATEFIN>50
       AND E.NOEMP=R.NOEMP
    4)Quel(s) est (sont) l'(es) emplacement(s) le(s) plus cher(s)?
    5)Pour chaque ville de provenance des clients, affichez le nombre de réservations pour le 15/08/2005
    Voila je suis encore en train de bosser la dessus donc je vais editer, encore une fois je me rend bien compte que c'est sans interet pour vous mais j'espere que qqun pourra m'aider (me dire si ca a l'air juste ou si je suis completement a coté de mes pompes... - ce qui est fort possible)
    Ca avait l'air tellement simple mais la je suis perdu et j'ai du mal a faire surface! (surtout sans pouvoir faire de test réel sous oracle)

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    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 080
    Points : 30 804
    Points
    30 804
    Par défaut
    Citation Envoyé par Darkenaxe
    1) Quels sont les emplacements (numéro,superficie, prix) de type "caravane" occupés le 10/08/2005.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT E.NOEMP,E.SUPERF,E.PRIX
    FROM EMPLACEMENT E, RESERVATION R
    WHERE R.TYPE='caravane'
       AND R.DATADEB<11/08/2005
       AND R.DATAFIN>09/08/2005
       AND E.NOEMP=R.NOEMP
    Déjà on commence par utiliser la syntaxe normalisée pour les jointures !
    Ensuite, pour le test, il y a plus simple...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT  E.NOEMP
        ,   E.SUPERF
        ,   E.PRIX
    FROM    EMPLACEMENT AS E
        INNER JOIN
            RESERVATION AS R
            ON  E.NOEMP = R.NOEMP
    WHERE R.TYPE='caravane'
       AND CAST('10/08/2005' AS DATE) BETWEEN R.DATADEB AND R.DATAFIN
    ;
    Citation Envoyé par Darkenaxe
    2)Quels sont les emplacements (numéro, type, prix) pour lesquels il n'y a aucune réservation.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT E.NOEMP, E.TYPE, E.PRIX
    FROM EMPLACEMENT E
    WHERE E.NOEMP=((SELECT R.NOEMP
                     FROM RESERVATION R)
                     MINUS
                     (SELECT EM.NOEMP
                     FROM EMPLACEMENT EM))
    Il faut utiliser une jointure externe ou NOT IN ou NOT EXISTS
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    SELECT  E.NOEMP
        ,   E.SUPERF
        ,   E.PRIX
    FROM    EMPLACEMENT AS E
        LEFT JOIN
            RESERVATION AS R
            ON  E.NOEMP = R.NOEMP
    WHERE R.NORESERV IS NULL
    ;
    SELECT  E.NOEMP
        ,   E.SUPERF
        ,   E.PRIX
    FROM    EMPLACEMENT AS E
    WHERE   E.NOEMP NOT IN  (   SELECT  R.NOEMP
                                FROM    RESERVATION AS R
                            )
    ;
    SELECT  E.NOEMP
        ,   E.SUPERF
        ,   E.PRIX
    FROM    EMPLACEMENT AS E
    WHERE   NOT EXISTS  (   SELECT  1
                            FROM    RESERVATION AS R
                            WHERE   E.NOEMP = R.NOEMP
                        )
    ;
    Citation Envoyé par Darkenaxe
    3)Donnez la liste des emplacements pour lesquels on a enregistré plus de 50 jours de réservation.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT E.NOEMP, E.TYPE, E.SUPERF, E.PRIX
    FROM EMPLACEMENT E, RESERVATION R
    WHERE R.DATEDEB-R.DATEFIN>50
       AND E.NOEMP=R.NOEMP
    Ta requête listait seulement les réservations de plus de 50 jours
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    SELECT  E.NOEMP
        ,   E.SUPERF
        ,   E.PRIX
    FROM    EMPLACEMENT AS E
        INNER JOIN
            RESERVATION AS R
            ON  E.NOEMP = R.NOEMP
    GROUP BY
            E.NOEMP
        ,   E.SUPERF
        ,   E.PRIX
    HAVING  SUM(R.DATFIN - R.DATDEB) > 50
    ;
    PS. Tu as de la chance, j'ai insisté sur une connexion réclacitrante, sinon il fallait attendre 90 minnutes que je rentre chez moi
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Membre éprouvé Avatar de Yurck
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 15
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2005
    Messages : 682
    Points : 912
    Points
    912
    Par défaut
    4)Quel(s) est (sont) l'(es) emplacement(s) le(s) plus cher(s)?

    Les plus Grands !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT E.NOEMP, E.TYPE, E.SUPERF, E.PRIX
      FROM EMPLACEMENT E, RESERVATION R
     WHERE E.NOEMP=R.NOEMP 
         and E.PRIX=(select max(E2.PRIX) 
                             from EMPLACEMENT E2)
    5)Pour chaque ville de provenance des clients, affichez le nombre de réservations pour le 15/08/2005

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT C.VILLE, COUNT(*) 
      FROM RESERVATION R, CLIENT C
     WHERE R.CODECLI = C.CODECLI
         AND R.DATADEB<16/08/2005
         AND R.DATAFIN>14/08/2005
    group by C.VILLE
    Bon je ne l'aurai sans doute pas écrit comme ça, mais il ne faut pas faire trop pro alors garde tes jointures dans le where et je te suggère maintenant de faire des fotes d'orthographe.

    a+
    Dans le vocabulaire des couturiers seulement, patron est synonyme de modèle.
    Aymond d'Alost

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Merci d'avoir pris le temps de me répondre! C'est vraiment simpa.
    Je vais regarder ca tout a l'heure la faut que je face une pause... (ca fait 5h que j'ingurgite des cours de sql, et en plus je commence a avoir faim)

    Allé merci encore et bonne soirée! =)

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Voila je suis en train de regarder vos proposition (encore merci hein, ca fait vraiment plaisir parce que je commencais a desesperer...)

    Je voudrais savoir si ce que j'avais ecris etait juste ou pas? Car concernant la forme normalisé des jointure on ne l'a pas dans le cours alors je prefere m'en tenir a ma forme qui sert a rien, tant pis... (c'est pas comme si j'avais le choix)
    Je suppose que de toute facon c'etait faux...
    Si je prend la résolution de la requete 2) que tu m'a proposé Al1_24, en utilisant le NOT IN (celui la il est dans mes cordes...):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT  E.NOEMP
        ,   E.SUPERF
        ,   E.PRIX
    FROM    EMPLACEMENT AS E
    WHERE   E.NOEMP NOT IN  (   SELECT  R.NOEMP
                                FROM    RESERVATION AS R
                            )
    Personnellement je l'aurais écris de cette facon (en suivant le meme schéma que pour celles que j'ai tenter de faire tout seul):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT  E.NOEMP
        ,   E.SUPERF
        ,   E.PRIX
    FROM    EMPLACEMENT AS E
        ,      RESERVATION AS R
    WHERE   E.NOEMP NOT IN R.NOEMP
    Donc je ne doute pas une seconde que tu ais raison, mais je ne comprend pas quand est-ce que je dois reécrire un SELECT ou non...
    Si c'est pas trop lourd a expliquer ca serait super de m'éclairer la dessus (je pense pas que ce soit trop compliqué mais j'arrive a rien aujourd'hui c'est grave...)
    En fait une fois que j'aurais enregistrer ca le reste devrait passer tout seul.

    Bon voila, je tire mon chapeau a Yurck quand meme, tout ce que tu m'as donné est dans le cours, mission régression accomplie :p

  6. #6
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    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 080
    Points : 30 804
    Points
    30 804
    Par défaut
    Citation Envoyé par Darkenaxe
    Voila je suis en train de regarder vos proposition (encore merci hein, ca fait vraiment plaisir parce que je commencais a desesperer...)

    Je voudrais savoir si ce que j'avais ecris etait juste ou pas? Car concernant la forme normalisé des jointure on ne l'a pas dans le cours alors je prefere m'en tenir a ma forme qui sert a rien, tant pis... (c'est pas comme si j'avais le choix)
    Je suppose que de toute facon c'etait faux...
    Si je prend la résolution de la requete 2) que tu m'a proposé Al1_24, en utilisant le NOT IN (celui la il est dans mes cordes...):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT  E.NOEMP
        ,   E.SUPERF
        ,   E.PRIX
    FROM    EMPLACEMENT AS E
    WHERE   E.NOEMP NOT IN  (   SELECT  R.NOEMP
                                FROM    RESERVATION AS R
                            )
    Personnellement je l'aurais écris de cette facon (en suivant le meme schéma que pour celles que j'ai tenter de faire tout seul):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT  E.NOEMP
        ,   E.SUPERF
        ,   E.PRIX
    FROM    EMPLACEMENT AS E
        ,      RESERVATION AS R
    WHERE   E.NOEMP NOT IN R.NOEMP
    Donc je ne doute pas une seconde que tu ais raison, mais je ne comprend pas quand est-ce que je dois reécrire un SELECT ou non...
    Si c'est pas trop lourd a expliquer ca serait super de m'éclairer la dessus (je pense pas que ce soit trop compliqué mais j'arrive a rien aujourd'hui c'est grave...)
    En fait une fois que j'aurais enregistrer ca le reste devrait passer tout seul.

    Bon voila, je tire mon chapeau a Yurck quand meme, tout ce que tu m'as donné est dans le cours, mission régression accomplie :p
    La manière dont ut as réécrit le NOT IN ne fonctionnera surement pas. L'opérateur IN attend une série de valeurs.

    Force toi à utiliser des jointures normalisées. La norme date de 92... autant dire des siècles en informatique.
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  7. #7
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    L'opérateur IN attend une série de valeurs.
    Eux je crois pas

  8. #8
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Bon ca va j'ai bien avancé depuis hier, je pense avoir bien saisie le truc, en partie grace a vous, merci encore pour votre aide

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

Discussions similaires

  1. Besoin d'aide pour MCD de la gestion des SAV
    Par balolo dans le forum Schéma
    Réponses: 6
    Dernier message: 07/12/2007, 16h06
  2. Besoin d'aide au niveau de Shell
    Par Argael dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 01/08/2006, 11h04
  3. Besoin d'aide pour joindre deux requetes
    Par ganga dans le forum Langage SQL
    Réponses: 5
    Dernier message: 05/06/2006, 15h35
  4. Besoin d'aide pour une sous requete
    Par Celia1303 dans le forum Langage SQL
    Réponses: 6
    Dernier message: 12/10/2005, 14h09
  5. Gestion des transactions - Gestion des erreurs
    Par devdev dans le forum MS SQL Server
    Réponses: 14
    Dernier message: 23/03/2005, 20h17

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