Chaque résultat d'une opération SQL est fonctionnellement une nouvelle table, qu'elle soit ou non stockée sur disque ou en mémoire
La fonction d'une jointure est de «joindre» deux tables ensemble dans une troisième table synthétique qui (généralement) n'existe que dans la mémoire pendant la durée de sa sortie vers l'application.
La raison d'utiliser une jointure est de réduire les anomalies de données , en s'assurant que les données apparaissent à un et un seul endroit dans la base de données.
Considérer ce qui suit:
Person ( ID Integer Primary Key, FName String, LName String, Address String, City String, ZipCode String)
Ici, chaque fois que le gouvernement change de code postal (ce qui arrive trop souvent aux goûts des développeurs de bases de données *, la table des personnes devra être mise à jour de sorte que tous les anciens codes postaux appartiennent correctement à la bonne ville et au nouveau code postal.
Dans ce cas, le même code postal se trouve dans plusieurs tuples de la table, et si la table est modifiable manuellement, elle sera sujette à de graves anomalies de mise à jour car de nouvelles combinaisons ville / code postal sont entrées sans que la base de données dans son ensemble soit mise à jour.
En ayant trois tables à la place, nous obtenons les mêmes données, mais avec une flexibilité et une fiabilité accrues (au détriment de certaines performances, bien que les questions de «dénormalisation appropriée» soient un sujet pour une autre série de réponses.)
Person ( PersonID Integer Primary Key, FName String, LName String)
City ( CityID Integer Primary Key, City String, State String, ZipCode String )
Address ( AddressID Integer Primary Key, AddressLine1 String, CityID Integer References City, PersonID Integer References Person)`
Et nous pouvons obtenir une seule "table" de ce qui précède grâce à la requête suivante:
SELECT Fname, Lname, AddressLine1, City, State, ZipCode
FROM Person
INNER JOIN Address USING (PersonID)
INNER JOIN City USING (CityID)
Cela nous permet de mettre à jour les tables individuelles chaque fois que quelque chose de spécifique les modifie, sans corrompre le reste des données associées.
An INNER JOIN
est le type de jointure par défaut. En gros, il note: "combinez les tuples où cet enregistrement de la table a correspond à cet enregistrement de la table b" Les autres types de jointures sont OUTER JOINS
et ce qu'on appelle a CARTESIAN PRODUCT
. Une jointure externe est "Prenez tout dans la table de gauche ou de droite (comme spécifié) et où l'autre table correspond, joignez-la. Où elle ne correspond pas, remplissez-la avec des valeurs nulles" Et un produit cartésien (sans entrer dans l'algèbre relationnelle est: Prendre toutes les combinaisons possibles de tuples dans les deux tables et les sortir dans une table, sans rien faire correspondre.
* Plus que jamais, en particulier dans le cas de déplacer les limites des codes postaux en raison de gerrymandering