Joint ? [RESOLU] Mais....

Joint ? [RESOLU] Mais.... - SQL/NoSQL - Programmation

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  :hello:
 
 
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
Reply

Marsh Posté le 02-07-2004 à 18:33:34   

Reply

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)

Reply

Marsh Posté le 02-07-2004 à 18:56:24    

Merci :)

Reply

Marsh Posté le 02-07-2004 à 19:00:48    

Concrètement, ça change quoi ?

Reply

Marsh Posté le 02-07-2004 à 19:03:54    

Entre quoi et quoi?

Reply

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

Reply

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 ?


Message édité par Mosca le 02-07-2004 à 19:38:12
Reply

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.

Reply

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 ...

Reply

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.

Reply

Marsh Posté le 02-07-2004 à 21:24:12   

Reply

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)

Reply

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.
 
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)


 
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.

Reply

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).
 
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.


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 ;)

Reply

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 :lol:

Reply

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 :/

Reply

Marsh Posté le 02-07-2004 à 22:15:28    

C'est clair :lol:
 
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 :D)


Message édité par Arjuna le 02-07-2004 à 22:17:07
Reply

Marsh Posté le 02-07-2004 à 23:54:14    

Pour le CD, c'est Sony, et philipps a racheté le brevet

Reply

Marsh Posté le 03-07-2004 à 01:04:43    

les joints c'est illégal :o

Reply

Marsh Posté le 03-07-2004 à 01:06:08    

HappyHarry a écrit :

les joints c'est illégal :o


ca dépend où :o

Reply

Marsh Posté le 03-07-2004 à 01:06:52    

hardware.fr :o
 
 
:whistle:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed