PostgreSQL tiltrer
klausulen brukes for å kombinere poster fra to eller flere tabeller i en database. En BLI er et middel for å kombinere felt fra to tabeller ved hjelp av verdier som er felles for hver
Bli Typer i PostgreSQL er:.
Den CROSS BLI
INNER JOIN
VENSTRE YTRE BLI
HØYRE YTRE BLI
Den FULL YTRE BLI
Før vi går videre, la oss vurdere to tabeller COMPANY og DEPARTMENT. Vi har allerede sett INSERT-setninger til befolker COMPANY bordet. Så bare la oss anta listen over oppføringer tilgjengelige i COMPANY tabellen:
id | Navn | alder | adressere | lønn | join_date ---- + ------- + ----- + ----------- + -------- + --------- - 1 | Paul | 32 | California | 20000 | 2001-07-13 3 | Teddy | 23 | Norge | 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 | Norge | 5000 | 2005-07-13 10 | James | 45 | Texas | 5000 | 2005-07-13
En annen tabell er DEPARTMENT, har følgende definisjon:
CREATE TABLE INSTITUTT (ID INT PRIMARY KEY NOT NULL, DEPT CHAR (50) NOT NULL, EMP_ID INT NOT NULL);
Her er listen over INSERT-setninger for å fylle DEPARTMENT tabell:
INSERT INTO DEPARTMENT (ID, DEPT, EMP_ID) VALUES (1, 'IT Billing', 1); INSERT INTO avdeling (ID, DEPT, EMP_ID) VALUES (2, 'Engineering', 2); INSERT INTO avdeling (ID, DEPT, EMP_ID) VALUES (3, "Finance", 7);
Endelig har vi følgende liste over poster tilgjengelig i DEPARTMENT tabellen:
id | tjenesten | emp_id ---- + ------------- + -------- 1 | IT Billing | 1 2 | Engineering | 2 3 | Finance | 7
Den CROSS BLI
En CROSS BLI kampene hver rad av den første tabellen med hver rad i den andre tabellen. Hvis inngangs bordene har x- og y-spalter, henholdsvis, vil det resulterende bordet er x + y kolonner. Fordi CROSS tiltrer har potensial til å generere svært store bord, må man sørge for å bare bruke dem når det passer
Følgende er syntaksen CROSS BLI:.
SELECT ... Fra table1 CROSS BLI table2. ..
Basert på tabellene ovenfor, kan vi skrive en CROSS BLI slik:
testdb = # SELECT EMP_ID, NAVN, DEPT fra selskap CROSS BLI DEPARTMENT;
Over spørring vil gi følgende resultat:
emp_id | Navn | 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 | Finans 7 | Teddy | Finans 7 | Mark | Finans 7 | David | Finans 7 | Allen | Finans 7 | Paul | Finans 7 | James | Finans 7 | James | Finans
Den INNER JOIN
En INNER JOIN oppretter en ny resultattabell ved å kombinere kolonneverdier av to tabeller (Tabell 1 og table2) basert på join-predikat. Spørringen sammen hver rad med table1 med hver rad med table2 å finne alle par av rader, som tilfredsstiller join-predikat. Når join-predikat er fornøyd, er kolonneverdier for hver matchet par rader med table1 og table2 sammen til et resultat rad.
En INNER JOIN er den vanligste typen delta og er standardtypen delta . Du kan bruke INNER søkeord eventuelt
Følgende er syntaksen INNER JOIN.
SELECT table1.column1, table2.column2 ... Fra table1INNER JOIN table2ON table1.common_filed = table2.common_field;
Basert på ovennevnte tabeller, kan vi skrive en INNER JOIN som følger:
testdb = # SELECT EMP_ID, NAVN, DEPT fra selskap INNER JOIN DEPARTMENT PÅ COMPANY.ID = DEPARTMENT.EMP_ID;
Over søket vil produsere følgende Resultatet:
emp_id | Navn | DEPT -------- + ------- + ------------ 1 | Paul | IT Billing 2 | Allen | Engineering
VENSTRE YTRE BLI
YTRE BLI er en forlengelse av INNER JOIN. SQL-standarden definerer tre typer av ytre kobles: Venstre, Høyre, og FULL og PostgreSQL støtter alle disse
Ved VENSTRE YTRE BLI, en indre delta utføres først.. Så, for hver rad i tabellen T1 som ikke tilfredsstiller ikke delta stand med en rad i tabellen T2, er en sluttet rad lagt med nullverdier i kolonner av T2. Dermed sluttet bordet har alltid minst en rad for hver rad i T1
Følgende er syntaksen til VENSTRE ytre delta.
SELECT ... Fra table1 VENSTRE YTRE BLI table2 PÅ conditional_expression ...
Basert på tabellene ovenfor, kan vi skrive en indre bli som følger:
testdb = # SELECT EMP_ID, NAVN, DEPT fra selskap VENSTRE YTRE BLI DEPARTMENT PÅ COMPANY.ID = DEPARTMENT.EMP_ID;
Over søket vil produsere følgende resultat:
emp_id | Navn | DEPT -------- + ------- + ------------ 1 | Paul | IT Billing 2 | Allen | Engineering | James | | David | | Paul | | Mark | | Teddy | | James |
HØYRE YTRE BLI
Først en INNER JOIN er utført. Så, for hver rad i tabellen T2 som ikke tilfredsstiller ikke delta stand med en rad i tabellen T1 er en sluttet rad lagt med nullverdier i kolonner av T1. Dette er det motsatte av en venstre delta; resultattabellen vil alltid ha en rad for hver rad i T2
Følgende er syntaksen VENSTRE ytre delta.
SELECT ... Fra table1 HØYRE YTRE BLI table2 PÅ conditional_expression ...
Basert på ovennevnte tabeller, kan vi skrive en indre bli som følger:
testdb = # SELECT EMP_ID, NAVN, DEPT fra selskap HØYRE YTRE BLI DEPARTMENT PÅ COMPANY.ID = DEPARTMENT.EMP_ID;
Over søket vil produsere følgende resultat:
emp_id | Navn | DEPT -------- + ------- + -------- 1 | Paul | IT Billing 2 | Allen | Engineering 7 | | Finans
Den FULL YTRE BLI
Først en INNER JOIN er utført. Så, for hver rad i tabellen T1 som ikke tilfredsstiller ikke delta stand med en rad i tabellen T2, er en sluttet rad lagt med nullverdier i kolonner av T2. Også, for hver rad i T2 som ikke tilfredsstiller delta stand med en rad i T1 er en sluttet rad med nullverdier i kolonnene for T1 lagt
Følgende er syntaksen FULL ytre delta.
SELECT ... Fra table1 FULL YTRE BLI table2 PÅ conditional_expression ...
Basert på tabellene ovenfor, kan vi skrive en indre bli som følger:
testdb = # SELECT EMP_ID, NAVN, DEPT fra selskap FULL YTRE BLI INSTITUTT PÅ COMPANY.ID = DEPARTMENT.EMP_ID;
Over spørring vil gi følgende resultat:
emp_id | Navn | DEPT -------- + ------- + --------------- 1 | Paul | IT Billing 2 | Allen | Engineering 7 | | Finance | James | | David | | Paul | | Mark | | Teddy | | James |