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 :

[Exercices SQL] requêtes


Sujet :

Langage SQL

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

    Informations forums :
    Inscription : Février 2006
    Messages : 6
    Points : 2
    Points
    2
    Par défaut [Exercices SQL] requêtes
    Voici les requêtes en SQL que je dois réaliser :
    -Liste des matériels (numéro de série, date d’apport, désignation du type) de la catégorie matériel « nettoyage » et dont la date d’apport est postérieure au 31 mars 1999.
    -Nombre de contrats passés par chaque client de type « Collectivité » et facturés depuis le 1 janvier 1999 (liste comprenant : code du client, nom du client, nombre de contrat)
    -Nombre de jours de location du marteau piqueur ayant pour numéro de série : 781965 au cours du mois d’avril 1999.

    Pour ce faire, voici le modèle relationnel correspondant au schéma conceptuel de données :
    TYPE (Codetype ; DésignationType , Montantcaution , PrixJournéeLocation , CategorieMateriel)
    MATERIEL (NuméroSerie , Dateapport , ValeurOrigine # Codetype)
    CONTRAT (NumeroContrat , Datefacturation , ModalitéCaution # Codeclient)
    CLIENT (Codeclient , Nomclient , AdresseRueClient , VilleClient , TypeClient)
    CALENDRIER (Jour , FeriéO/N)
    MOUVEMENT (NuméroMouvement , LibelléMouvement , Observation #NuméroSérie)

    J'ai réussi à réaliser les 2 premières (et encore je ne suis pas sur à 100% ) mais la 3°...
    Merci de votre aide
    Bonne Journée....

    1)
    SELECT NuméroSerie, Dateapport, DésignationType
    FROM MATERIEL, TYPE
    WHERE TYPE.CodeType = MATERIEL.CodeType
    AND Dateapport > 31/12/1999
    AND DésignationType = "nettoyage";

    2)
    SELECT Codeclient, Nomclient, COUNT(NumeroContrat) AS NbContrat
    FROM CONTRAT, CLIENT
    WHERE CLIENT.Codeclient = CONTRAT.#Codeclient
    AND TypeClient = "collectivité"
    AND Datefacturation >= 01/01/1999
    ORDER BY Codeclient;

  2. #2
    Xo
    Xo est déconnecté
    Expert confirmé
    Avatar de Xo
    Inscrit en
    Janvier 2005
    Messages
    2 701
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 701
    Points : 4 238
    Points
    4 238
    Par défaut
    Merci de jeter un oeil sur les Conseils à lire avant de poster et de préciser le SGBD ... à moins qu'il n'y en ai pas ?

    En particulier, quel que soit le SGBD, une instruction du type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AND Dateapport > 31/12/1999
    ne fonctionnera pas, 31/12/1999 est une chaîne de caractère qu'il faut convertir au format date pour SQL (avec CAST par exemple ...)

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    C'est un exercice que l'on ma demandé de faire et il n'y a pas le nom du SGBR. Ce sont juste des requêtes à faire sur feuille.
    En ce qui concerne la note our la date, je n'ai pas compris, mon professeur met la même chose que j'ai mise moi.
    Pourrais-je avoir de plus emples informations?
    Merci d'avence...

  4. #4
    Membre expérimenté Avatar de Yanika_bzh
    Homme Profil pro
    Responsable Applicatif et R&D
    Inscrit en
    Février 2006
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Responsable Applicatif et R&D
    Secteur : Finance

    Informations forums :
    Inscription : Février 2006
    Messages : 1 144
    Points : 1 738
    Points
    1 738
    Par défaut
    Il veut dire qu'une date est geree par un champ de type date et non par un champ de type chaine de caracteres. En effet, une date contient aussi generalement d'autres informations que le jour, mois et année (heures, minutes, secondes voir millisecondes). De ce fait, tu ne peux pas utiliser la date telle quel dans ta clause where (date>31/12/06 par ex), mais tu dois la transformer de facon a ce qu'elle devienne compatible avec le type date (on appelle cela un cast), par exemple to_date(madate,'YYMMDD').

    J'espere ne pas m'etre trompé dans mon explication et j'espere que tu as compris ce que j'ai voulu dire


    de plus, en jetant un oeil sur ta requete :

    SELECT Codeclient, Nomclient, COUNT(NumeroContrat) AS NbContrat
    FROM CONTRAT, CLIENT
    WHERE CLIENT.Codeclient = CONTRAT.#Codeclient
    AND TypeClient = "collectivité"
    AND Datefacturation >= 01/01/1999
    ORDER BY Codeclient;

    je pense qu'elle ne fonctionnera pas.
    En effet, tu utilises count qui est une fonction de groupe.
    Il te faut donc definir un groupe dans ta requete (group by)

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

    Informations forums :
    Inscription : Février 2006
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    ok merci pour votre aide
    bonne journée

  6. #6
    Xo
    Xo est déconnecté
    Expert confirmé
    Avatar de Xo
    Inscrit en
    Janvier 2005
    Messages
    2 701
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 701
    Points : 4 238
    Points
    4 238
    Par défaut
    Citation Envoyé par Yanika_bzh
    tu dois la transformer de facon a ce qu'elle devienne compatible avec le type date (on appelle cela un cast), par exemple to_date(madate,'YYMMDD').

    J'espere ne pas m'etre trompé dans mon explication et j'espere que tu as compris ce que j'ai voulu dire
    C'est tout à fait ça. Petite remarque, TO_DATE est spécifique à Oracle, on utilise en SQL la fonction CAST.

    Mais ça n'apporte pas grand chose à la résolution d'exercices en SQL ... juste des bonnes habitudes

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Merci pour votre aide, mais est ce que vous pourriez m'aider pour la réalisation de la 3 requête:
    "Nombre de jours de location du marteau piqueur ayant pour numéro de série : 781965 au cours du mois d’avril 1999."
    Merci d'avence et bonne journée à tous !!!

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

    Informations forums :
    Inscription : Février 2006
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    ps: j'ai oublié, dans le schéma relationnel, il y a aussi:durer (#Jour,#NuméroMouvement)

  9. #9
    Membre expérimenté Avatar de Yanika_bzh
    Homme Profil pro
    Responsable Applicatif et R&D
    Inscrit en
    Février 2006
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Responsable Applicatif et R&D
    Secteur : Finance

    Informations forums :
    Inscription : Février 2006
    Messages : 1 144
    Points : 1 738
    Points
    1 738
    Par défaut
    Un oubli qui avait son importance !!!!

    d'ailleurs Marteau piqueur doit sans doute etre le type de materiel non ?


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    select sum(nvl(jour,0)) from duree,mouvement,materiel,type where 
    	duree.numeroMouvement = mouvement.numeroMouvement and
    	mouvement.numeroSerie = materiel.numeroSerie and		
    	materiel.numeroSerie = '781965' and
    	materiel.codeType = Type.codeType and
    	type.CategorieMateriel='Marteau Piqueur'
    Ta requete doit ressemnler a un truc dans ce genre non ?

  10. #10
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Je vous remercie pour toute cette aide !!!
    Bonne journée

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

Discussions similaires

  1. Exercice SQL, requête
    Par machua dans le forum Langage SQL
    Réponses: 12
    Dernier message: 04/06/2010, 11h56
  2. Réponses: 2
    Dernier message: 06/06/2005, 15h13
  3. [SQL] Requête complexe avec appel multiple à la même table
    Par Julien Dufour dans le forum Langage SQL
    Réponses: 9
    Dernier message: 14/04/2005, 14h12
  4. [PL/SQL]requête imbriquée
    Par Nadine dans le forum Oracle
    Réponses: 6
    Dernier message: 01/02/2005, 16h21
  5. [SQL] Requête à jointure qui ne fonctionne pas
    Par Bensor dans le forum Langage SQL
    Réponses: 2
    Dernier message: 09/12/2004, 16h10

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