Während die Antworten, die die genauen Unterschiede erklären, in Ordnung sind, möchte ich zeigen, wie die relationale Algebra in SQL umgewandelt wird und wie der tatsächliche Wert der drei Konzepte ist.
Das Schlüsselkonzept in Ihrer Frage ist die Idee eines Joins. Um einen Join zu verstehen, müssen Sie ein kartesisches Produkt verstehen (das Beispiel basiert auf SQL, wobei das Äquivalent als Cross-Join bezeichnet wird, wie an einem Tag, wenn darauf hingewiesen wird).
Dies ist in der Praxis nicht sehr nützlich. Betrachten Sie dieses Beispiel.
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
Das kartesische Produkt Product x Component ist unten oder SQL Geige . Sie können sehen, dass es 12 Zeilen = 3 x 4 gibt. Offensichtlich haben Zeilen wie "Laptop" mit "Rädern" keine Bedeutung, weshalb das kartesische Produkt in der Praxis selten verwendet wird.
| 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 |
JOINs sind hier, um diesen Produkten mehr Wert zu verleihen. Was wir wirklich wollen, ist, das Produkt mit den zugehörigen Komponenten zu "verbinden", da jede Komponente zu einem Produkt gehört. Der Weg, dies zu tun, ist mit einem Join:
Produkt JOIN-Komponente EIN Pname
Die zugehörige SQL - Abfrage wäre wie folgt aus (Sie mit allen Beispielen spielen hier )
SELECT *
FROM Product
JOIN Component
ON Product.Pname = Component.Pname
und das Ergebnis:
| PNAME | PRICE | CNAME | COST |
----------------------------------
| Laptop | 1500 | CPU | 500 |
| Laptop | 1500 | hdd | 300 |
| Laptop | 1500 | case | 700 |
| Car | 20000 | wheels | 1000 |
Beachten Sie, dass das Ergebnis nur 4 Zeilen enthält, da der Laptop 3 Komponenten hat, das Auto 1 und das Flugzeug keine. Das ist viel nützlicher.
Zurück zu Ihren Fragen: Alle Joins, nach denen Sie fragen, sind Variationen des JOIN, den ich gerade gezeigt habe:
Natural Join = Der Join (die ON-Klausel) wird für alle Spalten mit demselben Namen ausgeführt. Im Gegensatz zu allen anderen Verknüpfungen werden doppelte Spalten aus dem Ergebnis entfernt. Die meisten DBMS (Datenbanksysteme, die von verschiedenen Anbietern wie Microsoft SQL Server, Oracle MySQL usw. erstellt wurden) unterstützen dies nicht einmal, es ist nur eine schlechte Praxis (oder sie haben sich absichtlich entschieden, sie nicht zu implementieren). Stellen Sie sich vor, ein Entwickler kommt und ändert den Namen der zweiten Spalte im Produkt von Preis zu Kosten. Dann würden alle natürlichen Verknüpfungen auf PName UND auf Kosten durchgeführt, was zu 0 Zeilen führt, da keine Zahlen übereinstimmen.
Theta Join = Dies ist der allgemeine Join, den jeder verwendet, da Sie damit die Bedingung angeben können (die ON-Klausel in SQL). Sie können unter so ziemlich jeder Bedingung beitreten, die Sie möchten, zum Beispiel bei Produkten, bei denen die ersten beiden Buchstaben ähnlich sind oder die einen anderen Preis haben. In der Praxis ist dies selten der Fall - in 95% der Fälle treten Sie unter der Bedingung der Gleichstellung bei, was uns zu folgenden Ergebnissen führt:
Equi Join = die in der Praxis am häufigsten verwendete. Das obige Beispiel ist ein Equi-Join. Datenbanken sind für diese Art von Joins optimiert! Das Gegenteil eines Equi-Joins ist ein Nicht-Equi-Join, dh wenn Sie unter einer anderen Bedingung als "=" beitreten. Datenbanken sind dafür nicht optimiert! Beide sind Teilmengen des allgemeinen Theta-Joins. Die natürliche Verbindung ist auch eine Theta-Verbindung, aber die Bedingung (die Theta) ist implizit.
Informationsquelle: Universität + zertifizierter SQL Server-Entwickler + hat kürzlich die MOO "Einführung in Datenbanken" von Stanford abgeschlossen, also wage ich zu sagen, dass ich die relationale Algebra im Auge habe.