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 JOINklausul, bruger viLEFT JOINklausul i den andenSELECTsætning i stedet og skiftcatss positioner oghundetabeller. UNION ALLklausul beholder de duplikerede rækker fra resultatsættene for begge forespørgsler.HVOR klausul i den anden SELECTsætning fjerner rækker, der allerede er inkluderet i resultatsættet af den førsteSELECTerklæ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.