Explication requête

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Explication requête

par dunbar » 07 mars 2009, 13:50

Je te remercie pour le temps donner à cette exellente réponse.
Merci encore :wink:

par sadeq » 07 mars 2009, 13:19

La condition que tu as enlevée de la 2° requête, soit :

Code : Tout sélectionner

AND tc.ava_s_noeud = ta.s_noeud
correspond à la jointure ou relation entre les 2 tables utilisées dans la clause FROM de la requête. Ce qui veut dire que si tu ne la mets pas le résultat de la requête contiendra à la fois tous les enregistrements d'une table et ceux de l'autre table qui correspondent à la condition :

Code : Tout sélectionner

s_noe_tophfc = '145434'
Exemple:
La table "pays" contient :
id--- nom
-----------
1 --- France
2 --- USA

La table "ville" contient :
id_pays------ nom
1-------------- Laval
1-------------- Le mans
1-------------- Paris
2-------------- New York
2-------------- Washington

La relation entre la table "pays" et la table "ville" est que le champ "pays.id" soit égal au champ "ville.id_pays"

Soit la requête suivante, qui extrait la liste des villes de la France:

Code : Tout sélectionner

SELECT pays.nom, ville.nom FROM pays, ville WHERE pays.id = ville.id_pays AND pays.nom = "France"
Avec les 2 conditions du Where, la première (pays.id = ville.id_pays) permet de lier l'enregistrement correspondant à un pays avec les enregistrements dans "ville" correspondant à ce pays. On dit que cette condition est une jointure entre tables.
La seconde condition (pays.nom = "France") s'applique simplement à la table "pays" et permet de limiter la sélection au pays "France".
Du coup, en sortie, on aura sélectionné simplement les villes correspondant au pays "France"

Si l'on enlève la condition relative à la relation entre les 2 tables soit : pays.id = ville.id_pays,
la requête ne renvoi pas les bons résultats puisque le moteur de requêtes ne saura plus faire le lien entre l'enregistrement traité dans la table "pays" et un autre qui se trouve dans la table "ville"
Il sélectionnera donc tous les enregistrements correspondant à la France dans la table "pays" mais traitera tous les enregistrements de la table "ville" y compris les villes qui ne correspondent pas à la France.

La 1° requête normale retournera 3 enregistrements correspondant aux 3 villes de France existantes dans la table "ville"
La 2° requête erronée retournera tous les enregistrements de la table "ville" multipliés par le nombre d'enregistrements correspondant à la condition sur la table "pays".
Soit: 1 pays sélectionné x 5 villes existantes dans la table "ville" = 5 enregistrements en sortie.

Dans ton cas, le chiffre "650.000" correspond à la multiplication du nombre d'enregistrements sélectionné par la condition "s_noe_tophfc = '145434' " par le nombre total d'enregistrements dans l'autre table.

Explication requête

par dunbar » 05 mars 2009, 18:44

Bonjour,
JE crée un requête sur deux tables comme ceci
SELECT ta.r_ampli, ta.s_noeud, ta.c_reseau, tc.amo_s_noeud, tc.ava_s_noeud FROM tcable tc, tampli ta WHERE s_noe_tophfc = '145434'
AND tc.ava_s_noeud = ta.s_noeud 
Il me sort 26 résultat ok
Mais je ne comprend pas pourquoi quand je fais comme ceci
SELECT ta.r_ampli, ta.s_noeud, ta.c_reseau, tc.amo_s_noeud, tc.ava_s_noeud FROM tcable tc, tampli ta WHERE s_noe_tophfc = '145434'
Il m'en sort 650.000 soit toutes les données des deux tables :?:
Alors que je lui demande (sauf erreur de ma part) de me sortir les données dont
s_noe_tophfc = '145434'

D'avance merci