Page 1 sur 2

quelle formule SQL pour cette table ?

Posté : 08 mai 2008, 18:00
par letcheuv
Bonjour a tous!

Je sais pas si vous pourrez faire ce que je vous demende mais bon je le fait quand même.

Voila avec une requete SQL jaimerais avoir un tableau avec le nom du magasin, le numero du magasin, et le montant de ce qu'ils ont commandé.
Sur cette fenetre il ne s'affichera que les client qui ont commendé pour plus de 1500 €.

Voila mes tables:
http://www.hiboox.com/lang-fr/image....g=lb6esvhg.jpg


Quel doit etre ma requette?

Jespere avoir était clair...

Merci a ceux qui m'aideront!

Posté : 08 mai 2008, 18:47
par caroube
1) Ton image n'est pas visible. Merci de vérifier le lien.
2) Quel est le début de requête que tu as commencé à écrire ?

Posté : 08 mai 2008, 18:47
par Webmastore
Le lien redirige vers la page d'accueil du site hiboox... donc difficile de repondre a la question

Posté : 08 mai 2008, 18:51
par letcheuv
J'ai pour l'instant écris aucun début de requette....

Ce lien doit fonctionner:
http://images0.hiboox.com/images/1908/lb6esvhg.jpg

Posté : 08 mai 2008, 19:05
par letcheuv
SELECT nom_magasin, num-magasin, montant_facture
FROM Magasin, Factures
WHERE magasin.num_magasin=factures.num-magasin And montant_facture>=1500;

Sa marche pas...

Posté : 08 mai 2008, 19:30
par caroube
num-magasin
Et avec num_magasin au lieu de num-magasin ?

Posté : 08 mai 2008, 19:34
par animithra
Bonsoir.

Ce qui ne fonctionne pas c'est ça :
SELECT nom_magasin, num-magasin, montant_facture
FROM Magasin, Factures
WHERE magasin.num_magasin=factures.num-magasin And montant_facture>=1500;
SQL est sensible à la casse.

Le plus simple, dans la mesure où dans les deux tables le champs commun est num_magasin, est d'opter pour un NATURAL JOIN :

SELECT nom_magasin, num-magasin, montant_facture
FROM Magasin NATURAL JOIN Factures
WHERE montant_facture>=1500;

Sinon vous pouvez optez pour :

SELECT nom_magasin, num-magasin, montant_facture
FROM Magasin, Factures
WHERE Magasin.num_magasin=Factures.num_magasin and montant_facture>=1500;

En espérant vous avoir dépanné.

Julie.

Posté : 08 mai 2008, 19:34
par Invité
Le champs spécifié 'num_magasin" peut désigner plusieurs tables listé dans le clause FROM de votre instruction SQL....

Posté : 08 mai 2008, 19:38
par Invité
Désolé Animitha j'ai essayer avec votre requette et sa ne fonctionne toujours pas...

Sa me demende d'entré des valeurs alors que je voudrais un tableau qui affiche le num_magasin, nom_magasin, et le montant des achats des magasins ayant acheté pour plus de 1500 €

Posté : 08 mai 2008, 21:04
par animithra
Cela vous demande d'entrer des valeurs ? pourriez-vous être plus précis (imprim écran ou copier/coller de l'erreur obtenue)

Posté : 08 mai 2008, 23:36
par caroube
SQL est sensible à la casse.
Ce n'est pas vrai.
SELECT nom_magasin, num-magasin, montant_facture
FROM Magasin, Factures
WHERE Magasin.num_magasin=Factures.num_magasin and montant_facture>=1500;
1) Quoique tu fasses, quand tu écris num-magasin, ce n'est pas num_magasin.
2) Quand on fait une jointure, on préfixe les noms des champs par le nom de la table. Surtout quand il y a ambiguité pour un champ qui porte le même nom dans deux tables.

Code : Tout sélectionner

SELECT Magasin.nom_magasin, Magasin.num_magasin, Factures.montant_facture FROM Magasin, Factures WHERE Magasin.num_magasin=Factures.num_magasin and Factures.montant_facture>=1500;
Dernière remarque : cela ne change rien à la syntaxe, mais pourquoi la table magasin porte t'elle un nom au singulier et la table Factures un nom au pluriel ?

Posté : 09 mai 2008, 11:30
par letcheuv
Jsais pas parce que j'ai mis Factures au pluriel.

Voila l'imprim écran:

http://www.hiboox.com/lang-fr/image.php ... 5x8z2e.jpg

Posté : 09 mai 2008, 13:14
par animithra
Il demande la valeur du paramètre num, dans ce cas peut être comprend-il qu'il s'agit d'une opération (num - magasin et non pas 'num-magasin').
Dans ce cas je vous conseille d'utiliser l'écriture plus spécifique de SQL qui consiste à encadrer le nom des champs avec des ` (touches Alt Gr + 7).

Caroube => quand je disais sensible à la casse j'entendais qu'il ne comprendrait pas que "Magasin" et "magasin" sont une seule et même table (à moins que la dernière version de SQL le prenne en charge, ça je ne peux pas le dire je n'y suis pas encore passée).

Concernant le fait que num_magasin soit un champs ambigu, ici il n'y a pas d'ambiguité, c'est bien une valeur commune à deux tables, d'où la possibilité d'un NATURAL JOIN.
Maintenant il est effectivement plus logique d'écrire table1.champs = table2.champs pour éviter les pannes si on change le nom de la colonne dans la base de données, ça j'en conviens volontier.

Posté : 09 mai 2008, 14:35
par Thegritch
Je conseil cette piste avec des alias :

Code : Tout sélectionner

SELECT mag.nom_magasin, mag.num_magasin, fac.montant_facture FROM Magasin mag, Factures fac WHERE mag.num_magasin = fac.num_magasin AND fac.montant_facture>=1500;
Sinon mysql met normalement des messages d'erreur.
Cela évite de se tromper dans les noms de champs.

Cordialement,

Posté : 09 mai 2008, 18:34
par caroube
Caroube => quand je disais sensible à la casse j'entendais qu'il ne comprendrait pas que "Magasin" et "magasin" sont une seule et même table (à moins que la dernière version de SQL le prenne en charge, ça je ne peux pas le dire je n'y suis pas encore passée).
Je confirme : on ne peut pas dire que SQL est sensible à la casse ou pas.

Si tu prends des bases de données telle que Oracle, MySQL, SQLite, Access, SQLAnywhere, ... tu peux écrire "Magasin" ou "magasin". Par contre, les produits "Microsoft SQL Server" ou "Sybase SQL Server" sont sensibles à la casse (du moins dans le paramétrage par défaut).

Et je vais le dire une dernière fois avant de laisser tomber. Qu'est-ce que ça te dit si tu mets "num_magasin" au lieu de "num-magasin" dans ta requête ? Parce que là, on tourne en rond autour d'une erreur de frappe !!!
Dans ce cas je vous conseille d'utiliser l'écriture plus spécifique de SQL qui consiste à encadrer le nom des champs avec des ` (touches Alt Gr + 7).
Au risque de passer pour un emm..., je dis non, ce n'est pas une bonne idée. Cette apostrophe ` est un pis-aller dans les cas où l'on est obligé d'avoir des noms de champs qui comportent des espaces, des accents, des mots réservés, ...
1) On est quasiment jamais obligé.
2) Ce n'est pas une syntaxe SQL standard. De nombreuses bases de données ne supportent pas ce caractère.
3) Dans ce cas, le champ dans la base s'appelle num_magasin et pas num-magasin !
Concernant le fait que num_magasin soit un champs ambigu, ici il n'y a pas d'ambiguité, c'est bien une valeur commune à deux tables, d'où la possibilité d'un NATURAL JOIN.
je ne parle pas du natural join (syntaxe haïssable à mon avis), mais de l'ambiguité de ce qu'il y a entre le select et le from. Si vous avez deux tables avec un même nom de champ, vous ne pouvez pas faire la requête sans préfixer (imaginez que les identifiants de Produit et de magasin s'appellent id)