Strona 1 z 1

Zastosowanie łączenia tabel: wewnętrznego, lewego i prawego.

: sob kwie 13, 2013 8:54 pm
autor: Ludzik19
Otóż mam problem z jednym podpunktem w zadaniu:

2.Zestawienie samochodów w oddziałach, w trzech wariantach z zastosowaniem łączenia tabel: wewnętrznego, lewego i prawego.

Nie mam pojęcia o co chodzi z tym lewym, prawym i wewnętrznym łączeniem tabel... :(
Samo zestawienie samochodów w oddziałach wygląda w SQL następująco:

Kod: Zaznacz cały

SELECT "Oddziały"."Miasto", "Oddziały"."Ulica", "Samochody"."ID Samochodu", "Samochody"."Nr rejestracji" FROM "Oddziały", "Samochody" WHERE "Oddziały"."ID" = "Samochody"."ID Samochodu" ORDER BY "Oddziały"."ID" ASC, "Samochody"."Nr rejestracji" ASC
Natomiast graficznie jak w załączniku.
Co daje efekt jak w załączniku kolejnym.

Gdyby mógł ktoś wytłumaczyć o co z tym chodzi i w jaki sposób to zrobić będę bardzo wdzięczny.

Re: Zastosowanie łączenia tabel: wewnętrznego, lewego i praw

: sob kwie 13, 2013 10:04 pm
autor: hasheq
proszę o załączenie pliku bazy

Re: Zastosowanie łączenia tabel: wewnętrznego, lewego i praw

: sob kwie 13, 2013 10:04 pm
autor: Jan_J
Masz dwie tabele mm:

Kod: Zaznacz cały

Marka Model
Ford Fiesta
Opel Corsa
Opel Astra
Nissan Micra
oraz mk:

Kod: Zaznacz cały

Model Kolor
Astra biały
Astra czerwony
Astra zielony
Fiesta biały
Fiesta czarny
Orion niebieski
Zrobimy różne złączenia tych dwóch tabel wg pola Model.

1. Złączenie wewnętrzne, czyli inner join albo join

Kod: Zaznacz cały

select * from mm join mk on mm.Model = mk.Model;
albo

Kod: Zaznacz cały

select * from mm join mk using(Model);
da w wyniku

Kod: Zaznacz cały

Marka Model Model Kolor
Ford Fiesta Fiesta biały
Ford Fiesta Fiesta czarny
Opel Astra Astra biały
Opel Astra Astra czerwony
Opel Astra Astra zielony
czyli wszystkie możliwe pary dopasowanych krotek.

2. Złączenie lewe left join

Kod: Zaznacz cały

select * from mm left join mk on mm.Model = mk.Model;
albo

Kod: Zaznacz cały

select * from mm left join mk using(Model);
da w wyniku

Kod: Zaznacz cały

Marka Model Model Kolor
Ford Fiesta Fiesta biały
Ford Fiesta Fiesta czarny
Opel Corsa NULL NULL
Opel Astra Astra biały
Opel Astra Astra czerwony
Opel Astra Astra zielony
Nissan Micra NULL NULL
czyli wszystkie możliwe krotki z lewej tabeli, jeżeli to możliwe dopasowane do wszystkich pasujących krotek z prawej tabeli; jeżeli zaś niemożliwe, to uzupełnione rubrykami pustymi.

3. Złączenie prawe right join

Kod: Zaznacz cały

select * from mm right join mk on mm.Model = mk.Model;
albo

Kod: Zaznacz cały

select * from mm right join mk using(Model);
da w wyniku analogiczne zestawienie z zamienioną rolą tabel lewej i prawej

Kod: Zaznacz cały

Marka Model Model Kolor
Ford Fiesta Fiesta biały
Ford Fiesta Fiesta czarny
Opel Astra Astra biały
Opel Astra Astra czerwony
Opel Astra Astra zielony
NULL NULL Orion niebieski
czyli wszystkie możliwe krotki z prawej tabeli, jeżeli to możliwe dopasowane do wszystkich pasujących krotek z lewej tabeli; jeżeli zaś niemożliwe, to poprzedzone pustymi rubrykami.

4. Złączenie zewnętrzne, czyli outer join

Kod: Zaznacz cały

select * from mm outer join mk on mm.Model = mk.Model;
albo

Kod: Zaznacz cały

select * from mm outer join mk using(Model);
da zestawienie będące sumą mnogościową złączeń: lewego i prawego

Kod: Zaznacz cały

Marka Model Model Kolor
Ford Fiesta Fiesta biały
Ford Fiesta Fiesta czarny
Opel Corsa NULL NULL
Opel Astra Astra biały
Opel Astra Astra czerwony
Opel Astra Astra zielony
Nissan Micra NULL NULL
NULL NULL Orion niebieski
czyli wszystkie możliwe krotki z obu tabel, jeżeli to możliwe dopasowane do wszystkich pasujących krotek z przeciwległej tabeli; jeżeli zaś niemożliwe, to uzupełnione pustymi rubrykami.

Re: Zastosowanie łączenia tabel: wewnętrznego, lewego i praw

: sob kwie 13, 2013 10:34 pm
autor: Ludzik19
Mało z tego rozumiem, ale będę kombinował :D a nóż się uda :D
Załączam też plik bazy.

Powychodziło mi coś takiego (wszystko wygląda tak samo, ale wydaje mi się, że to przez to, że mam każdy samochód dopasowany do jakiegoś oddziału - nie ma samochodu bez odziały ani odziału, który nie ma samochodu).

Wewnętrzne:

Kod: Zaznacz cały

SELECT "Oddziały".*, "Samochody".* FROM "Oddziały", "Samochody" WHERE "Oddziały"."ID" = "Samochody"."ID Samochodu"
Lewe:

Kod: Zaznacz cały

SELECT "Oddziały".*, "Samochody".* FROM { OJ "Oddziały" LEFT OUTER JOIN "Samochody" ON "Oddziały"."ID" = "Samochody"."ID Samochodu" }
Prawe:

Kod: Zaznacz cały

SELECT "Oddziały".*, "Samochody".* FROM { OJ "Oddziały" RIGHT OUTER JOIN "Samochody" ON "Oddziały"."ID" = "Samochody"."ID Samochodu" }
Dobrze ?:P

Re: Zastosowanie łączenia tabel: wewnętrznego, lewego i praw

: sob kwie 13, 2013 11:56 pm
autor: Ludzik19
Przepraszam za dwa posty pod sobą :D

Wielkie dzięki za pomoc :) Wszystko śmiga jak powinno, pododawałem oddziały bez samochodów jak i samochody bez przypisania do oddziałów i całość funkcjonuje jak opisałeś :D

Re: Zastosowanie łączenia tabel: wewnętrznego, lewego i praw

: ndz kwie 14, 2013 5:20 pm
autor: Jan_J
Mało z tego rozumiem, ale będę kombinował :D a nóż --> nuż (ort.) się uda :D
Bo nauki baz danych nie zaczyna się od obsługi programów, tylko od pojęć. Trzeba najpierw parę rzeczy przeliczyć bez komputera, żeby je rozumieć.