30. december 2000 - 22:58Der er
24 kommentarer og 2 løsninger
SQL: * JOIN .. hvad faen bruges det til ?
Jeg har set nogle steder hvor der bruges bl.a. INNER JOIN, OUTER JOIN og LEFT JOIN (og der er sikkert også en RIGHT JOIN) i SQL kald, men hvad faen bruges det til ? ER der nogle der kan komme med et eksempel og en forklaring på samme ?
Det kunne jeg jo også bruge til meget .. og det kunne jeg godt regne ud, men hvordan bruger man det ? Og hvad er forskellen på INNER, OUTER, LEFT & RIGHT JOIN
En INNER JOIN returnerer alle rækker fra to eller flere tabeller som opfylder en eller anden betingelse ... En UOTER JOIN returnerer desuden rækker fra enhver tabel der ikke opfylder betingelsen ...
Forklaring ... ? \"Almindelig\" ydre joins kan også angives med LEFT eller som du gætter på RIGHT ... Hvis man så opstiller en klausul (som det så flot hedder) der lydder som følger; \"T1 LEFT NATURAL JOIN T2\" vil der blive returneret rækker fra tabel T1 der ikke opfylder join-betingelsen, men ikke fra T2 ... volapyk?
Hvis du har to tabeller, a og b med hver 100 records, så vil SELECT * FROM a,b uden optimering danne det kartesiske produkt, som er en tabel med 100*100, altså 10000 records.
Læg mærke til at ikke alle DBMS er enige om betydningen og syntaksen af JOIN. Hvis du har skrevet en SQL sætning hvor du laver en NATURAL RIGHT OUTER JOIN, er det ikke sikkert at du får samme resultat, hvis du udfører den på en anden database. Du kan også risikere at få en syntaks fejl, fordi databasen ikke forstår NATURAL RIGHT OUTER JOIN.
Hvis du bruger f.eks. a INNER JOIN b i stedet for a, b i en SELECT, kan du sagtens ende med samme resultat efter alle dine WHERE-clauser og hvad ved jeg, men det kan være at det måske tager 2 sekunder at udføre sætningen, hvor du før havde svartider på 2 minutter - eller sågar timer.
Hvis Access/MSSQL ikke forstår NATURAL, så skal du naturligvis ikke bruge det, men du bliver nødt til at kigge i manualen for den enkelte DBMS for at finde ud af hvilken syntaks den præcis forstår.
En join består af en join type og en join condition
join typer: inner join left outer join right outer join full outer join evt. flere
join conditions: natural on <predicate> using (A1, A2,...,An) evt. flere
join conditionen definerer, hvilke tupler i de to relationer der matcher, og hvilke attributter der skal være i resultatet.
NATURAL betyder, at de attributter der er fælles for begge relationer kommer først i resultatet. I samme rækkefølge som i den venstre relation. Derefter kommer de attributter, der kun optræder i den venstre relation og endelig de attributter, der kun optræder i den højre.
Hvis du har to relationer, R1 og R2, med følgende schema (altså attributter) R1: A1 A2 A3 R2: A2 A1 A4 A5 så vil SELECT * FROM R1, R2 og SELECT * FROM R1 INNER JOIN R2 give en relation med schema A1 A2 A3 A2 A1 A4 A5 mens SELECT * FROM R1 NATURAL INNER JOIN R2 giver en relation med schema A1 A2 A3 A4 A5
Tjah, NATURAL har med attributterne at gøre og DISTINCT har med tupler (records) at gøre, men bortset fra det,...
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.