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 :

Aide pour un exercide SQL de BTS


Sujet :

Langage SQL

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

    Informations forums :
    Inscription : Janvier 2010
    Messages : 6
    Points : 4
    Points
    4
    Par défaut Aide pour un exercide SQL de BTS
    Bonjour,

    je bloque sur un petit exercice d'SQL avec MLD ^^'

    voici l'énoncé : "Grâce à ce MLD, écrivez les requêtes suivantes :

    Produit (NumProd, NomProd)
    Composant (NumComp, NomComp)
    Fournisseur (NumFour, NomFour, AdrFour, CodePostalFour, VilleFour)
    Constituer (NumProd#, NumComp#, Quantité)
    Achar (NumComp#, NumFour#, Date, QuantitéAchat, PrixAchatUnit)

    1. Donnez tous les fournisseurs ayant vendu en 2006 un des constituants du produit Curry vert.
    2. Donnez tous les fournisseurs ayant vendu le composant 34 au prix le plus élevé. Vous trierez la liste par ordre alphabétique. Il vous faudra sans doute 2 requêtes."



    pour l'instant j'ai fais ceci !


    1.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT NomFour, NumFour, Date, NomComp
    FROM Composant; Constituer
    WHERE (Constituer.NumProd=Produit.NumProd)
    AND(Constituer.NumComp=Composant.NumComp)
    AND(Achat.NumFour=Fournisseur.NumFour)
    AND Year(Date) = 2006
    AND(NomProd="curry vert")
    2.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT NomFour, PrixAchatUnit
    FROM Fournisseur; Achat
    WHERE (achat.NumComp=Composant.NumComp)
    AND (Achat.NumFour=Fournisseur.NumFour)
    AND (NumComp=37)
    ORDER BY PrixAchatUnit AND Nomfour
    mais pas sur de moi ^^'

    merci d'avance.

    Nicolas

  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
    Bonsoir,

    La meilleur façon d'apprendre, de comprendre et de réussir c'est forcément la pratique.
    Installez PostgreSQL ou SQL Server (par exemple), créez vos tables et essayez vos requêtes.
    Le SQL s'apprend vite si l'on est motivé. Ce n'est pas très difficile.


    Il y a quelques erreurs de syntaxe dans vos requêtes.

    - Dans la clause FROM, il ne faut pas utiliser de point-virgule.
    Le séparateur de table est la virgule.
    - Ce n'est pas une erreur, mais les parenthèses sont facultatives dans la clause WHERE.
    - Les chaînes de caractères sont encadrées d'apostrophes et pas de guillemets.
    - Pour effectuer un trie (ORDER BY) sur plusieurs colonnes on utilise la virgule et pas AND.

    Concernant les requêtes elle-mêmes :
    Citation Envoyé par niko999 Voir le message
    1. Donnez tous les fournisseurs ayant vendu en 2006 un des constituants du produit Curry vert.
    Dans la requête n°1 vous faites référence dans la clause WHERE à des tables qui ne sont pas mentionnées dans la clause FROM (Produit, Achat). Ce n'est pas possible.
    Dans l'idée je pense que la requête est bonne sauf la ligne suivante:
    "AND(Constituer.NumComp=Composant.NumComp)"
    Il aurait fallut remplacer "Composant.NumComp" par "Achat.NumComp".
    Il faut forcément passer par la table Achat pour répondre à la question.

    Voilà celle que j'ai écrite, en utilisant l'opérateur de jointure JOIN.
    La méthode de jointure interne avec la liste de table dans la clause FROM et les prédicats dans la clause WHERE est équivalente mais considérée comme obsolète.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT Fournisseur.NumFour, Fournisseur.NomFour
    FROM Fournisseur
      JOIN Achat
        ON Fournisseur.NumFour = Achat.NumFour
        JOIN Constituer
          ON Achat.NumComp = Constituer.NumComp
          JOIN Produit
            ON Constituer.NumProd = Produit.NumProd
    WHERE year(dateAchat) = 2006
    AND NomProd = 'Curry Vert'
    Ou mieux, plus simple avec des jointures naturelles:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT NumFour, NomFour
    FROM Fournisseur
      NATURAL JOIN Achat
        NATURAL JOIN Constituer
          NATURAL JOIN Produit
    WHERE year(dateAchat) = 2006
    AND NomProd = 'Curry Vert'
    Citation Envoyé par niko999 Voir le message
    2. Donnez tous les fournisseurs ayant vendu le composant 34 au prix le plus élevé. Vous trierez la liste par ordre alphabétique. Il vous faudra sans doute 2 requêtes."
    Il faut travailler en 3 étapes :
    1) Trouver les fournisseurs ayant vendu le composant 34 (avec le prix de vente)
    2) Trouver le prix de vente le plus élevé pour le produit 34.
    3) Comparé la colonne prix de l'étape 1) avec le prix de l'étape 2)
    J'ai utilisé une sous-requête:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT Fournisseur.NumFour, Fournisseur.NomFour
    FROM Fournisseur
      NATURAL JOIN Achat
    WHERE Achat.NumComp = 34
      AND prixAchatUnit = (
        SELECT MAX(prixAchatUnit)
        FROM Achat
        WHERE NumComp = 34
    )

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

    Informations forums :
    Inscription : Janvier 2010
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    merci beaucoup !

    votre aide m'a été précieuse, j'ai bien compris.

    Je vais m'entrainer avec les logiciels que vous m'avez conseillé !

    Bonne soirée !

Discussions similaires

  1. Besoin d'aide pour une requête SQL
    Par Borami dans le forum Langage SQL
    Réponses: 1
    Dernier message: 07/11/2005, 10h33
  2. Besoin d'aide pour optimiser requête SQL
    Par Keuf95 dans le forum Langage SQL
    Réponses: 10
    Dernier message: 06/09/2005, 16h02
  3. Aide pour une requete SQL
    Par hpghost dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 08/01/2005, 15h01
  4. Aide pour une requete SQL
    Par hpghost dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 08/01/2005, 10h15
  5. Besoin d'aide pour une Requête SQL ...
    Par Kokito dans le forum Requêtes
    Réponses: 2
    Dernier message: 07/07/2004, 11h56

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