Lol^^
Le but d'une jointure s'est de lier 2 ou plusieurs tables.
Et ce, en UNE SEULE requete.
Reprenons cette exemple :
Personne
-id_personne
-prenom
-nom
-age
-id_metier
Metier
-id_metier
-nom
En gros plusieurs personnes peuvent avoir le même métier, (relation de 0 à N) donc on met un id_métier dans la table personne. Bon la, je sais pas si je suis clair, mais c'est vraiment la base t'façon...
Tu veux récuperer les personnes ainsi que leur métier
Si tu connais pas les jointures, tu le fais a la barbare :
requete1=SELECT * FROM presonne
requete2=select * FROM metier
//On exécute les deux requetes
//Tu stockes le resultat de requete1 dans un ResultSet //résultat1
//Le resultat de requete2 dans resultat2
tantque pas fin de résultat1
tantque pas fin de resultat2
if resultat1.id_métier=resultat2.id_metier
//C'est le métier qui correspond à cette personne
end
end
end
Ca fonctionne, mais c'est nul^^ Ton SGBD à moyen de le faire tout seul.
Comment ça? Grace aux jointures^^
En gros y'a 2 types de jointures, les jointures externes et les jointures internes.
Les jointures internes sont simples, suffit juste de mettre en relation les deux tables, sans se prendre la tête.
On veux en UNE FOIS recuperer les personnes ET son métier.
Il suffit de mettre en relation les rubriques identiques.
SELECT * FROM personnes,metier WHERE personne.id_metier=metier.id_metier;
Et voila.
dans le FROM, on met le nom des deux tables sur lesquelles ont travaille. le "." permet d'identifier les rubriques. (Deux tables différentes peuvent avoir des noms de rubriques identique. Et ca peux poser problème. (ca marche aussi dans le select)
On aura donc en réponse, pour chaque personne :
id_personne,nom,prenom,age,id_metier,metier
Voila, j'espère que la tu as compris le "principe". Ce que j'ai écris en haut marche très bien, et permets de comprendre le principe. Dans les faits il existe une ecriture "normalisé". Le mot-clé "JOIN"
La requete précédente, est identique à celle-ci :
SELECT * FROM personne NATURAL JOIN metier;
Très simple, le "NATURAL JOIN" recherche automatiquement dans les deux tables les rubriques qui ont le même noms, et fais le lien tout seul.
Cependant, tu peux faire des jointures sur des rubriques qui n'ont pas le même noms.
Dans ce cas, on le spécifie, avec la synthaxe suivante :
SELECT * FROM personne INNER JOIN metier ON personne.id_client=metier.id_client;
Tu auras exactement le même résultat qu'avec les deux requetes précédentes.
Et deuxième cas de jointure, les jointures externes.
Même principe, faire des "lien" entre les tables.
Avec la nuance suivante.
La jointure interne, va prendre tous les "couples" personne-métier.
Si une personne à un métier "vide" ou si un métier n'est exercé par personne, on ne les récupérera pas dans la requete.
Tu peux donc faire le choix de select tous les couples personne-métier PLUS toutes les personnes qui n'ont pas de métier ou bien tous les couples personne-metier PLUS tous les métier qui servent à rien.
Avec "LEFT OUTER JOIN" et "RIGHT OUTER JOIN"
SELECT * FROM personne LEFT OUTER JOIN metier ON personne.id_client=metier.id_client
Il va donc prendre la table qui est a gauche, ici personne et toutes les énumérer. Qu'ils aient un métier ou pas.
si tu remplaces LEFT par RIGHT, il fait la même chose mais avec les métiers.
Voila, j'espère que j'ai été assez clair. C'est compliquer sans exemples! Au pire, reposez des questions^^