PostgreSQL - VERBINDET
Das PostgreSQL JoinsKlausel wird verwendet, um Datensätze aus zwei oder mehr Tabellen in einer Datenbank zu kombinieren. Ein JOIN ist ein Mittel zum Kombinieren von Feldern aus zwei Tabellen unter Verwendung gemeinsamer Werte.
Join-Typen in PostgreSQL sind -
- Das CROSS JOIN
- Der INNERE JOIN
- Die linke linke Verbindung
- Der rechte äußere Beitritt
- Der VOLLSTÄNDIGE OUTER JOIN
Bevor wir fortfahren, betrachten wir zwei Tabellen, UNTERNEHMEN und ABTEILUNG. Wir haben bereits INSERT-Anweisungen zum Auffüllen der COMPANY-Tabelle gesehen. Nehmen wir also einfach die Liste der in der COMPANY-Tabelle verfügbaren Datensätze an -
id | name | age | address | salary | join_date
----+-------+-----+-----------+--------+-----------
1 | Paul | 32 | California| 20000 | 2001-07-13
3 | Teddy | 23 | Norway | 20000 |
4 | Mark | 25 | Rich-Mond | 65000 | 2007-12-13
5 | David | 27 | Texas | 85000 | 2007-12-13
2 | Allen | 25 | Texas | | 2007-12-13
8 | Paul | 24 | Houston | 20000 | 2005-07-13
9 | James | 44 | Norway | 5000 | 2005-07-13
10 | James | 45 | Texas | 5000 | 2005-07-13
Eine andere Tabelle ist DEPARTMENT, hat die folgende Definition -
CREATE TABLE DEPARTMENT(
ID INT PRIMARY KEY NOT NULL,
DEPT CHAR(50) NOT NULL,
EMP_ID INT NOT NULL
);
Hier ist die Liste der INSERT-Anweisungen zum Auffüllen der DEPARTMENT-Tabelle:
INSERT INTO DEPARTMENT (ID, DEPT, EMP_ID)
VALUES (1, 'IT Billing', 1 );
INSERT INTO DEPARTMENT (ID, DEPT, EMP_ID)
VALUES (2, 'Engineering', 2 );
INSERT INTO DEPARTMENT (ID, DEPT, EMP_ID)
VALUES (3, 'Finance', 7 );
Schließlich haben wir die folgende Liste von Datensätzen in der Tabelle DEPARTMENT -
id | dept | emp_id
----+-------------+--------
1 | IT Billing | 1
2 | Engineering | 2
3 | Finance | 7
Das CROSS JOIN
Ein CROSS JOIN vergleicht jede Zeile der ersten Tabelle mit jeder Zeile der zweiten Tabelle. Wenn die Eingabetabellen x- bzw. y-Spalten enthalten, enthält die resultierende Tabelle x + y-Spalten. Da CROSS JOINs das Potenzial haben, extrem große Tabellen zu generieren, muss darauf geachtet werden, diese nur bei Bedarf zu verwenden.
Das Folgende ist die Syntax von CROSS JOIN -
SELECT ... FROM table1 CROSS JOIN table2 ...
Basierend auf den obigen Tabellen können wir einen CROSS JOIN wie folgt schreiben:
testdb=# SELECT EMP_ID, NAME, DEPT FROM COMPANY CROSS JOIN DEPARTMENT;
Die oben angegebene Abfrage führt zu folgendem Ergebnis:
emp_id| name | dept
------|-------|--------------
1 | Paul | IT Billing
1 | Teddy | IT Billing
1 | Mark | IT Billing
1 | David | IT Billing
1 | Allen | IT Billing
1 | Paul | IT Billing
1 | James | IT Billing
1 | James | IT Billing
2 | Paul | Engineering
2 | Teddy | Engineering
2 | Mark | Engineering
2 | David | Engineering
2 | Allen | Engineering
2 | Paul | Engineering
2 | James | Engineering
2 | James | Engineering
7 | Paul | Finance
7 | Teddy | Finance
7 | Mark | Finance
7 | David | Finance
7 | Allen | Finance
7 | Paul | Finance
7 | James | Finance
7 | James | Finance
Der INNERE JOIN
Ein INNER JOIN erstellt eine neue Ergebnistabelle, indem die Spaltenwerte zweier Tabellen (Tabelle1 und Tabelle2) basierend auf dem Join-Prädikat kombiniert werden. Die Abfrage vergleicht jede Zeile von Tabelle1 mit jeder Zeile von Tabelle2, um alle Zeilenpaare zu finden, die das Join-Prädikat erfüllen. Wenn das Join-Prädikat erfüllt ist, werden die Spaltenwerte für jedes übereinstimmende Zeilenpaar von Tabelle1 und Tabelle2 zu einer Ergebniszeile kombiniert.
Ein INNER JOIN ist der häufigste Join-Typ und der Standard-Join-Typ. Sie können das Schlüsselwort INNER optional verwenden.
Das Folgende ist die Syntax von INNER JOIN -
SELECT table1.column1, table2.column2...
FROM table1
INNER JOIN table2
ON table1.common_filed = table2.common_field;
Basierend auf den obigen Tabellen können wir einen INNER JOIN wie folgt schreiben:
testdb=# SELECT EMP_ID, NAME, DEPT FROM COMPANY INNER JOIN DEPARTMENT
ON COMPANY.ID = DEPARTMENT.EMP_ID;
Die oben angegebene Abfrage führt zu folgendem Ergebnis:
emp_id | name | dept
--------+-------+------------
1 | Paul | IT Billing
2 | Allen | Engineering
Die linke linke Verbindung
Der OUTER JOIN ist eine Erweiterung des INNER JOIN. Der SQL-Standard definiert drei Arten von OUTER JOINs: LEFT, RIGHT und FULL, und PostgreSQL unterstützt all diese.
Bei LEFT OUTER JOIN wird zuerst eine innere Verknüpfung durchgeführt. Dann wird für jede Zeile in Tabelle T1, die die Verknüpfungsbedingung mit keiner Zeile in Tabelle T2 erfüllt, eine verknüpfte Zeile mit Nullwerten in Spalten von T2 hinzugefügt. Somit hat die verknüpfte Tabelle immer mindestens eine Zeile für jede Zeile in T1.
Das Folgende ist die Syntax von LEFT OUTER JOIN -
SELECT ... FROM table1 LEFT OUTER JOIN table2 ON conditional_expression ...
Basierend auf den obigen Tabellen können wir einen inneren Join wie folgt schreiben:
testdb=# SELECT EMP_ID, NAME, DEPT FROM COMPANY LEFT OUTER JOIN DEPARTMENT
ON COMPANY.ID = DEPARTMENT.EMP_ID;
Die oben angegebene Abfrage führt zu folgendem Ergebnis:
emp_id | name | dept
--------+-------+------------
1 | Paul | IT Billing
2 | Allen | Engineering
| James |
| David |
| Paul |
| Mark |
| Teddy |
| James |
Der rechte äußere Beitritt
Zunächst wird eine innere Verknüpfung durchgeführt. Dann wird für jede Zeile in Tabelle T2, die die Verknüpfungsbedingung mit keiner Zeile in Tabelle T1 erfüllt, eine verknüpfte Zeile mit Nullwerten in Spalten von T1 hinzugefügt. Dies ist die Umkehrung einer linken Verknüpfung; Die Ergebnistabelle enthält immer eine Zeile für jede Zeile in T2.
Das Folgende ist die Syntax von RIGHT OUTER JOIN -
SELECT ... FROM table1 RIGHT OUTER JOIN table2 ON conditional_expression ...
Basierend auf den obigen Tabellen können wir einen inneren Join wie folgt schreiben:
testdb=# SELECT EMP_ID, NAME, DEPT FROM COMPANY RIGHT OUTER JOIN DEPARTMENT
ON COMPANY.ID = DEPARTMENT.EMP_ID;
Die oben angegebene Abfrage führt zu folgendem Ergebnis:
emp_id | name | dept
--------+-------+--------
1 | Paul | IT Billing
2 | Allen | Engineering
7 | | Finance
Der VOLLSTÄNDIGE OUTER JOIN
Zunächst wird eine innere Verknüpfung durchgeführt. Dann wird für jede Zeile in Tabelle T1, die die Verknüpfungsbedingung mit keiner Zeile in Tabelle T2 erfüllt, eine verknüpfte Zeile mit Nullwerten in Spalten von T2 hinzugefügt. Zusätzlich wird für jede Zeile von T2, die die Verknüpfungsbedingung mit keiner Zeile in T1 erfüllt, eine verknüpfte Zeile mit Nullwerten in den Spalten von T1 hinzugefügt.
Das Folgende ist die Syntax von FULL OUTER JOIN -
SELECT ... FROM table1 FULL OUTER JOIN table2 ON conditional_expression ...
Basierend auf den obigen Tabellen können wir einen inneren Join wie folgt schreiben:
testdb=# SELECT EMP_ID, NAME, DEPT FROM COMPANY FULL OUTER JOIN DEPARTMENT
ON COMPANY.ID = DEPARTMENT.EMP_ID;
Die oben angegebene Abfrage führt zu folgendem Ergebnis:
emp_id | name | dept
--------+-------+---------------
1 | Paul | IT Billing
2 | Allen | Engineering
7 | | Finance
| James |
| David |
| Paul |
| Mark |
| Teddy |
| James |