Requette et jointures

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 : Requette et jointures

par Ripat » 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/

par zeus » 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

par Polau » 15 nov. 2005, 14:06

:P nickel !

Merci beaucoup Daoud

par daoud » 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

Requette et jointures

par Polau » 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