Requette et jointures

Polau
Invité n'ayant pas de compte PHPfrance

15 nov. 2005, 13:51

Bonjours tout le monde.
Voila j'ai un petit problème, je n'arrive pas trouver la sintaxe d'une de mes requetes, peux être avez vous une solution.

J'ai deux Tables :

Table>annuaire
ID_Annuaire (auto)
Annu_Nom
Annu_Poste
ID_Service

Table>service

ID_Service (auto)
Serv_Nom

Je veux afficher la liste des enregistrements de la table annuaire. Mais dans cette table, j'ai un champs ID_service, je voudrais qu'au lieu de m'affichier dans mon tableau, le numéro de l'ID, il aille automatiquement chercher le nom de ce service dans la table service, le tout en UNE seule requete.

:roll: Merci d'avance

Eléphant du PHP | 219 Messages

15 nov. 2005, 13:58

Code : Tout sélectionner

SELECT Annu_Nom, Annu_Poste, Serv_Nom FROM annuaire a, service s WHERE a.ID_Service = s.ID_Service

Polau
Invité n'ayant pas de compte PHPfrance

15 nov. 2005, 14:06

:P nickel !

Merci beaucoup Daoud

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

15 nov. 2005, 14:23

Tu peux aussi faire :

Code : Tout sélectionner

SELECT Annu_Nom, Annu_Poste, Serv_Nom FROM annuaire a LEFT JOIN service s ON a.ID_Service = s.ID_Service
La jointure gauche va sélectionner toutes les lignes de la table de gauche (Annu_Nom chez toi) et les associer avec la ligne de services qui correspond
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

ViPHP
ViPHP | 1380 Messages

15 nov. 2005, 14:48

Même si la syntaxe de daoud fonctionne, je suis assez d'accord avec zeus sur la manière d'établir une jointure.

Un WHERE sert à définir une condition, un JOIN, une jointure.

C'est plus lisible et "sémantiquement" (un mot à la mode) plus correct.
Dans la mesure du possible, utilisez toujours un opérateur de jointure normalisé Sql2 (mot clef JOIN).

En effet :

* Les jointures faites dans la clause WHERE (ancienne syntaxe de 1986 !) ne permettent pas de faire la distinction de prime abord entre ce qui relève du filtrage et ce qui relève de la jointure.
* Il est à priori absurde de vouloir filtrer dans le WHERE (ce qui restreint les données du résultat) et de voiloir "élargir" ce résultat par une jointure dans la même clause WHERE de filtrage.
* La lisibilité des requêtes est plus grande en utilisant la syntaxe à base de JOIN, en isolant ce qui est du filtrage et de la jointure, mais aussi en isolant avec clarté chaque condition de jointures entre chaque couples de table.
* L'optimisation d'exécution de la requête est souvent plus pointue du fait de l'utilisation du JOIN.
* Lorsque l'on utilise l'ancienne syntaxe et que l'on supprime la clause WHERE a des fins de tests, le moteur SQL réalise le produit cartésiens des tables ce qui revient la plupart du temps à mettre à genoux le serveur !

http://sql.developpez.com/sqlaz/jointures/
ripat