Oversigt :i denne øvelse lærer du, hvordan du emulerer SQLite fuld ydre joinforbindelse ved hjælp af UNION
og LEFT JOIN
klausuler.
Introduktion til SQL FULD YDRE JOIN
klausul
I teorien er resultatet af FULL YDRE JOIN
er en kombination af en LEFT JOIN
og en RIGHT JOIN
. Resultatsættet af den fulde ydre joinforbindelse har NULL
værdier for hver kolonne i tabellen, der ikke har en matchende række i den anden tabel. For de matchende rækker er FULD YDRE JOIN
producerer en enkelt række med værdier fra kolonner i rækkerne i begge tabeller.
Følgende billede illustrerer resultatet af FULL YDRE JOIN
klausul:
Se følgende katte
og hunde
tabeller.
-- opret og indsæt data i hundetabellenCREATE TABLE dogs (skriv TEXT, color TEXT);INSERT INTO dogs(type, color) VALUES('Hunting','Black'), ('Guard', 'Brun');-- opret og indsæt data i kattetabellen CREATE TABLE cats (skriv TEXT, color TEXT);INSERT INTO cats(type,color) VALUES('Indoor','White'), ('Udendørs',' Sort');
Kodesprog:SQL (Structured Query Language) (sql)
Følgende sætning bruger FULL OUTER JOIN
klausul for at forespørge data fra hundene
og katte
tabeller.
VÆLG *FRA hunde FULDSTÆNDIG YDRE JOIN katte PÅ dogs.color =cats.color;
Kodesprog:SQL (Structured Query Language) (sql)
Følgende viser resultatet af udsagnet ovenfor:
Type | Farve | Typ | Farve |
---|---|---|---|
Jagt | Sort | Udendørs | Sort |
Vagt | Brun | NULL | NULL |
NULL | NULL | Indendørs | Hvid |
Desværre understøtter SQLite ikke RIGHT JOIN
klausulen og også FULL OUTER JOIN
klausul. Du kan dog nemt efterligne FULL OUTER JOIN
ved at bruge LEFT JOIN
klausul.
Emulering af SQLite fuld ydre joinforbindelse
Følgende sætning emulerer FULL OUTER JOIN
klausul i SQLite:
VÆLG d.type, d.color, c.type, c.colorFROM hunde dLEFT JOIN cats c BRUGE(color)UNION ALLSELECT d.type, d.color, c.type, c.colorFROM cats cLEFT JOIN dogs d USING(color)WHERE d.color IS NULL;
Kodesprog:SQL (Structured Query Language) (sql) Sådan fungerer forespørgslen.
- Fordi SQLilte ikke understøtter
RIGHT JOIN
klausul, bruger viLEFT JOIN
klausul i den andenSELECT
sætning i stedet og skiftcats
s positioner oghunde
tabeller. UNION ALL
klausul beholder de duplikerede rækker fra resultatsættene for begge forespørgsler.HVOR klausul i den anden SELECT
sætning fjerner rækker, der allerede er inkluderet i resultatsættet af den førsteSELECT
erklæring.
I denne øvelse har du lært, hvordan du bruger UNION ALL
og LEFT JOIN
klausuler til at emulere SQLite FULL OUTER JOIN
klausul.