Joint ? [RESOLU] Mais.... - SQL/NoSQL - Programmation
Marsh Posté le 02-07-2004 à 18:49:18
La version moche:
SELECT machin, truc
FROM table1, table2
WHERE table1.cel1 = table2.cle
La version jolie:
SELECT machin, truc
FROM table1 INNER JOIN table2 ON (table1.cle1 = table2.cle)
Marsh Posté le 02-07-2004 à 19:21:04
Je pense qu'il veut dire entre ta bonne et ta mauvaise solution . Comparée à la mienne, la différence se voit de suite
Marsh Posté le 02-07-2004 à 19:37:36
(oui, la diff entre le join de base et le inner join)
Je suppose que le résultat est le même ...
Plus rapide ?
Marsh Posté le 02-07-2004 à 19:57:25
le inner join c'est la syntaxe stricte, le join tout court est une syntaxe laxiste.
Marsh Posté le 02-07-2004 à 21:15:04
Laxiste, laxiste ... Tout de suite les insultes ...
Quand on doit "vite" faire un query, on fait au plus pressé ... En plus quand t'as des gros query, assez longs, sur 6 ou 7 tables, c'est plus clair à mon sens ...
Marsh Posté le 02-07-2004 à 21:24:12
Question de portabilité et de clarté. Quand j'ai "inner" marqué, je sais d'office que c'est une jointure interne (et non externe) et je sais qu'elle sera plus facilement (rapidement) transposable dans un aute DBMS.
Marsh Posté le 02-07-2004 à 21:36:57
Pour le INNER JOIN, je suis pas super convaincu que ce soit mieu.
Niveau portabilité, je pense même que c'est plus restrictif. Je vérifie lundi, mais il me semble que l'instance Oracle sur laquelle je bosse ne supporte pas cette syntaxe (en tout cas, je suis quasi-certain que le outer ne passe pas)
Sinon, je suis de l'avis de Mosca, c'est plus clair d'avoir une clause FROM "propre", et les liens stipulés dans les clauses de filtre (puisque c'est un filtre de toute façon)
Marsh Posté le 02-07-2004 à 21:44:40
Arjuna a écrit : Pour le INNER JOIN, je suis pas super convaincu que ce soit mieu. |
Euh, ici son exemple est trivial, mais sinon, je préfère nettement laisser ces informations purement relatives aux jointures dans la clause from et ne mettre dans la clause where que les informations réellement basée sur les demandes de l'utilisateur (son véritable filtre).
Sinon, il est possible que ton ancienne version d'oracle ne le supporte pas (il me semble qu'ils ne l'ont introduit qu'avec 8i) et je sais qu'ils ont toujours du mal avec le outer (ils utilisent le (+)). Mais bon, Oracle est vraiment l'un des SGDB qui respecte le moins les standards que je connaisse, à part avec eux-même (et encore!) ils sont quasiment toujours incompatible au niveau des formulations.
Marsh Posté le 02-07-2004 à 21:48:28
gizmo a écrit : Euh, ici son exemple est trivial, mais sinon, je préfère nettement laisser ces informations purement relatives aux jointures dans la clause from et ne mettre dans la clause where que les informations réellement basée sur les demandes de l'utilisateur (son véritable filtre). |
OK, donc s'ils l'ont introduite avec la 8i, vu que ça doit être sur la 8.0.5 que j'ai eu le problème, ceci explique cela
Marsh Posté le 02-07-2004 à 21:49:29
Ce qui est le plus marrant dans l'histoire, c'est qu'Oracle a été pendant un long moment le "owner" de la norme SQL, et on activement participé à son évolution... Alors qu'ils la respectent très mal
Marsh Posté le 02-07-2004 à 21:53:09
MS a également été un des participant actifs à la rédaction des normes W3C, Sony a inventé le CD audio et essaye de faire des protections dessus, ...
On va finir par croire le vieille adage comme quoi les cordonniers sont les plus mal chaussés
Marsh Posté le 02-07-2004 à 22:15:28
C'est clair
PS: c'est pas Philips qui a inventé le CD ? Il me semblait...
En tout cas, le coup des 74 minutes et quelques, c'est à cause du PDg de la boîte qui a inventé le CD. Les specs c'était qu'on puisse stocker un certain concertau de Beetoven sur le nouveau support.
ce concertaux faisant 74 et quelques minutes, le CD a fait rigoureusement la même taille, pas une seconde de plus (quels fourbes ces ingénieurs )
Marsh Posté le 03-07-2004 à 01:06:08
Reply
Marsh Posté le 02-07-2004 à 18:33:34
Salut,
Jusqu'à présent, dans mes pages php je me limitais à ce genre de chose :
SELECT machin,cle1 FROM table1
puis pour chaque réponse
SELECT truc FROM table2 WHERE cle=cle1
C'est assez moche comme fonctionnement nan ?
Mes connaissances en (my)sql se limitant à très peu de choses, je me suis intéressé à la doc, et j'ai déduis qu'il me fallait utiliser un JOINT. Mais bon, j'en s uis pas sur, et surtout, je comprend absolument rien à la doc
Une ame charitable pour me guider ?
Merci
EDIT : Bon grace à gizmo j'ai réussi à faire ca qui marche parfaitement :
SELECT utilisateurs.num_U, nom, raison, banuser.date, duree FROM banuser INNER JOIN utilisateurs ON( utilisateurs.num_U=banuser.num_U)
Mon deuxième problème c'est que dans la table banuser, j'ai un autre champ (num_Ban) qui correspond à un autre utilisateur (celui qui a banni le vilain qui se trouve dans banuser : utilisateurs.num_U = banuser.num_Ban). Je fais comment la pour faire le lien avec l'enregistrement dans utilisateurs ?
Merci de votre patience
Message édité par gooopil le 03-07-2004 à 21:37:00