Bien que les réponses expliquant les différences exactes soient correctes, je veux montrer comment l'algèbre relationnelle est transformée en SQL et quelle est la valeur réelle des 3 concepts.
Le concept clé de votre question est l'idée d'une jointure. Pour comprendre une jointure, vous devez comprendre un produit cartésien (l'exemple est basé sur SQL où l'équivalent est appelé une jointure croisée comme onedaywhen fait remarquer);
Ce n'est pas très utile en pratique. Prenons cet exemple.
Product(PName, Price)
====================
Laptop, 1500
Car, 20000
Airplane, 3000000
Component(PName, CName, Cost)
=============================
Laptop, CPU, 500
Laptop, hdd, 300
Laptop, case, 700
Car, wheels, 1000
Le produit cartésien Product x Component sera - ci-dessous ou sql violon . Vous pouvez voir qu'il y a 12 lignes = 3 x 4. Evidemment, les lignes comme "Laptop" avec "roues" n'ont aucun sens, c'est pourquoi en pratique le produit cartésien est rarement utilisé.
| PNAME | PRICE | CNAME | COST |
--------------------------------------
| Laptop | 1500 | CPU | 500 |
| Laptop | 1500 | hdd | 300 |
| Laptop | 1500 | case | 700 |
| Laptop | 1500 | wheels | 1000 |
| Car | 20000 | CPU | 500 |
| Car | 20000 | hdd | 300 |
| Car | 20000 | case | 700 |
| Car | 20000 | wheels | 1000 |
| Airplane | 3000000 | CPU | 500 |
| Airplane | 3000000 | hdd | 300 |
| Airplane | 3000000 | case | 700 |
| Airplane | 3000000 | wheels | 1000 |
Les JOIN sont là pour ajouter plus de valeur à ces produits. Ce que nous voulons vraiment, c'est «joindre» le produit avec ses composants associés, car chaque composant appartient à un produit. La façon de faire est avec une jointure:
Produit JOIN Component ON Pname
La requête SQL associée serait comme ceci (vous pouvez jouer avec tous les exemples ici )
SELECT *
FROM Product
JOIN Component
ON Product.Pname = Component.Pname
et le résultat:
| PNAME | PRICE | CNAME | COST |
----------------------------------
| Laptop | 1500 | CPU | 500 |
| Laptop | 1500 | hdd | 300 |
| Laptop | 1500 | case | 700 |
| Car | 20000 | wheels | 1000 |
Notez que le résultat n'a que 4 lignes, car l'ordinateur portable a 3 composants, la voiture en a 1 et l'avion aucun. C'est beaucoup plus utile.
Pour revenir à vos questions, toutes les jointures que vous demandez sont des variations du JOIN que je viens de montrer:
Jointure naturelle = la jointure (la clause ON) est faite sur toutes les colonnes avec le même nom; il supprime les colonnes dupliquées du résultat, contrairement à toutes les autres jointures; la plupart des SGBD (systèmes de bases de données créés par divers fournisseurs tels que SQL Server de Microsoft, MySQL d'Oracle, etc.) ne prennent même pas la peine de supporter cela, c'est juste une mauvaise pratique (ou ont délibérément choisi de ne pas l'implémenter). Imaginez qu'un développeur vienne et modifie le nom de la deuxième colonne dans Product de Price en Cost. Ensuite, toutes les jointures naturelles seraient effectuées sur PName ET sur Cost, ce qui donnerait 0 lignes car aucun nombre ne correspond.
Theta Join = c'est la jointure générale que tout le monde utilise car elle vous permet de spécifier la condition (la clause ON en SQL). Vous pouvez rejoindre à peu près toutes les conditions de votre choix, par exemple sur des produits dont les 2 premières lettres sont similaires ou qui ont un prix différent. En pratique, c'est rarement le cas - dans 95% des cas, vous rejoindrez une condition d'égalité, ce qui nous conduit à:
Equi Join = le plus couramment utilisé dans la pratique. L'exemple ci-dessus est une jointure équi. Les bases de données sont optimisées pour ce type de jointures! L'oposite d'une jointure équi est une jointure non équi, c'est-à-dire lorsque vous joignez une condition autre que "=". Les bases de données ne sont pas optimisées pour cela! Les deux sont des sous-ensembles de la jointure thêta générale. La jointure naturelle est également une jointure thêta mais la condition (la thêta) est implicite.
Source d'information: université + développeur certifié SQL Server + a récemment terminé le MOO "Introduction aux bases de données" de Stanford donc j'ose dire que j'ai une nouvelle algèbre relationnelle à l'esprit.