Requétes imbriquées

Résolu/Fermé
most27 Messages postés 74 Date d'inscription mardi 29 octobre 2013 Statut Membre Dernière intervention 9 juillet 2016 - Modifié par jee pee le 21/10/2014 à 09:59
most27 Messages postés 74 Date d'inscription mardi 29 octobre 2013 Statut Membre Dernière intervention 9 juillet 2016 - 21 oct. 2014 à 20:56
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

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
jee pee Messages postés 39661 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 28 avril 2024 9 242
Modifié par jee pee le 21/10/2014 à 09:57
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
most27 Messages postés 74 Date d'inscription mardi 29 octobre 2013 Statut Membre Dernière intervention 9 juillet 2016 1
Modifié par most27 le 21/10/2014 à 20:57
Merci pour votre aide ca marche trés bien :) c'est résolu
0