Avatar billede tdaugaard Nybegynder
30. december 2000 - 22:58 Der 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 ?
Avatar billede tdaugaard Nybegynder
30. december 2000 - 23:00 #1
Eksemplet må gerne være komplext så længe forklaringen forklarer det med menneske ord.
Avatar billede stigc Nybegynder
30. december 2000 - 23:00 #2
Det er når man henter data fra mere end en table af gangen!
Avatar billede tdaugaard Nybegynder
30. december 2000 - 23:02 #4
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
Avatar billede tdaugaard Nybegynder
30. december 2000 - 23:03 #5
okæi .. så ikke lige din anden kommentar ..
Avatar billede pstric Nybegynder
30. december 2000 - 23:03 #6
JOIN bruges til at sammensætte to eller flere tabeller uden at lave et kartesisk produkt
Avatar billede tdaugaard Nybegynder
30. december 2000 - 23:07 #7
pstric:> \"med menneske ord. \".. kartesisk produkt  WTF is that ?
Avatar billede tdaugaard Nybegynder
30. december 2000 - 23:08 #8
stigc:> jeg kigger på dine URLs
Avatar billede stigc Nybegynder
30. december 2000 - 23:09 #9
Hvis vi har 2 mængder A og B, så er det kartesiske produkt mængden af samtlige kombinationer af ét element fra A og ét element fra B.
Avatar billede repsac Nybegynder
30. december 2000 - 23:09 #10
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 ...
Avatar billede repsac Nybegynder
30. december 2000 - 23:10 #11
- med FULL ...
Avatar billede repsac Nybegynder
30. december 2000 - 23:11 #12
Eks ...

SELECT * FROM XXXXXX
FULL NATURAL JOIN YYYYYYY;
Avatar billede pstric Nybegynder
30. december 2000 - 23:12 #13
Det kartesiske produkt af to relationer er en relation, der består af alle mulige kombinationer af tupler fra de to relationer.
Avatar billede repsac Nybegynder
30. december 2000 - 23:15 #14
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?
Avatar billede pstric Nybegynder
30. december 2000 - 23:15 #15
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.
Avatar billede tdaugaard Nybegynder
30. december 2000 - 23:20 #16
repsac:> hvad bruges NATURAL til ?
pstric:> se DET var til at forstå, tak!

tror lige jeg smider lidt flere point på da der ikke vil blive meget til hver med 25 ..
Avatar billede pstric Nybegynder
30. december 2000 - 23:21 #17
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.

PS. bed mig ikke om eksempler
Avatar billede tdaugaard Nybegynder
30. december 2000 - 23:23 #18
pstric:> Så det er bedst ikke at bruge NATURAL ? (Det bliver Access/MSSQL jeg skal bruge det på hvis det engang bliver aktuelt..)
Avatar billede pstric Nybegynder
30. december 2000 - 23:25 #19
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.
Avatar billede pstric Nybegynder
30. december 2000 - 23:28 #20
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.
Avatar billede tdaugaard Nybegynder
30. december 2000 - 23:28 #21
ER der nogle der kan komme med et GODt eksempel på f.eks. INNER JOIN ? Og hvis der er LEFT JOIN hvad gør RIGHT JOIN så ?

(125 point nu så der bliver til jer alle sammen)
Avatar billede tdaugaard Nybegynder
30. december 2000 - 23:33 #22
pstric:> nå nej, men jeg mente hvis nu man ikke var sikker på hvilken DB man ville køre på... og hvad gør NATURAL da ?
Avatar billede pstric Nybegynder
30. december 2000 - 23:43 #23
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.
Avatar billede pstric Nybegynder
30. december 2000 - 23:52 #24
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
Avatar billede tdaugaard Nybegynder
31. december 2000 - 00:19 #25
pstric:> så NATURAL er lidt a\'la DISTINCT ?

Jeg siger tak for jeres forklaringer/eksempler.
Avatar billede pstric Nybegynder
31. december 2000 - 00:33 #26
Tjah, NATURAL har med attributterne at gøre og DISTINCT har med tupler (records) at gøre, men bortset fra det,...
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester