Requétes imbriquées

Résolu
most27 Messages postés 90 Statut Membre -  
most27 Messages postés 90 Statut Membre -
Bonsoir,
Je débute avec oracle (10g version 10.2.0) et les requétes SQL.
J'ai 3 tables Client,Livre,Vente.
La table Client contient 4 champs id_du_client ,nom_du_client, prénom_du_client, date_de_naissence_du_client tel que id_du_client est la clé primaire de cette table.
La table Livre contient 4 champs reference_du_livre, titre_du_livre, auteur_du_livre, prix_du_livre
tel que reference_du_livre est la clé primaire de cette table.
La table Vente contient 4 champs
id_du_client ,reference_du_livre ,quantitées_de_livres_vendue ,date_de_vente_des_livres tel que id_du_client et reference_du_livre son des clées étrangére de cette table.
La question est:
Donner la liste des livres achetés par chaque client avec le prix d'achat(prix*quantité).
Voila se que j'ai fait:
SQL>  SELECT reference_du_livre AS refl FROM Vente WHERE
   (SELECT reference_du_livre,prix_du_livre FROM Livre WHERE reference_du_livre=refl);         

Mais ca ne marche pas ): et ca m'affiche cette erreur
ERREUR à la ligne 1 :
ORA-00936: expression absente

Donc comme c'est mes débuts j'ai vraiment pas comprie,s'il vous play aider moi c'est vraiment important merci d'avance pour votre aide :).

1 réponse

  1. Delphine
     
    Bonjour,

    Je ne sais pas comment on peut faire les multiplications.
    Sinon, la requête elle ressemblerai à ceci:

    SELECT  Livre.reference_du_livre AS refl,
      Client.prenom_du_client
      Vente.quantitées_de_livres_vendue
    FROM  Livre, Client, Vente 
    WHERE Vente.reference_du_livre = Livre.reference_du_livre
    AND          Vente.id_du_client = Client.id_du_client;


    Je chercher pour faire la multiplication. Si je trouve je vous enverrai la solution.

    Quand on fait des requête avec plusieurs tables, il faut indiquer comment elle sont reliées. Il faut utilisées les clés primaires.

    Dans votre table Livre, je rajouterai la colonne id_livre car un livre peut avoir des références selon l'imprimeur
    ou plusieurs livres peuvent porter le même nom.

    Je pense aussi que je mettrai dans la table vente un id_vente car un client pourrai acheter plusieurs fois un même livre.

    Dans votre table, il n'y a pas la possibilité de noter une remise (par exemple)
    Sinon, il faudrait ajouter une colonne remise et une autre somme (prix normal - remise).

    En SQL, il est préférable d'utiliser des noms de table simples.
    titre_du_livre, auteur_du_livre serai plutôt titre_livre, ..

    Il ne faut pas mettre d'accent car çà pourrait poser des problèmes lors des exécutions des requêtes.

    Bonne continuation.
    2
    1. jee pee Messages postés 31892 Date d'inscription   Statut Modérateur Dernière intervention   9 984
       
      Bonjour,

      Il suffit de faire la multiplication :

      SELECT nom_du_client, titre_du_livre , 
      (prix_du_livre * quantites_de_livre_vendue) montant
      FROM Livre, Client, Vente
      WHERE Vente.reference_du_livre = Livre.reference_du_livre
      AND Vente.id_du_client = Client.id_du_client
      ORDER BY nom_du_client


      Excellentes remarques que ne pas utiliser les caractères accents, cédilles, et des noms de champs plus courts.
      0
    2. most27 Messages postés 90 Statut Membre 1
       
      Merci pour votre aide ca marche trés bien :) c'est résolu
      0