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

Użytkowanie programu bazodanowego
Ludzik19
Posty: 13
Rejestracja: wt lut 26, 2013 12:32 am

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

Post 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.
Załączniki
Graficznie
Graficznie
Wynik
Wynik
Baza 2.png (12.56 KiB) Przejrzano 3996 razy
OpenOffice 3.3.0
Windows 7, 64b
hasheq
Posty: 16
Rejestracja: czw sty 10, 2013 1:49 am

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

Post autor: hasheq »

proszę o załączenie pliku bazy
LibreOffice 3.6.4.3 na Windows 7
Jan_J
Posty: 4626
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

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

Post 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.
JJ
LO (25.2|24.8) ∙ Python (3.12|3.10) ∙ Unicode 16 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
Ludzik19
Posty: 13
Rejestracja: wt lut 26, 2013 12:32 am

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

Post 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
Załączniki
Baza Danych cz.2.odb
(22.13 KiB) Pobrany 230 razy
OpenOffice 3.3.0
Windows 7, 64b
Ludzik19
Posty: 13
Rejestracja: wt lut 26, 2013 12:32 am

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

Post 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
OpenOffice 3.3.0
Windows 7, 64b
Jan_J
Posty: 4626
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

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

Post 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ć.
JJ
LO (25.2|24.8) ∙ Python (3.12|3.10) ∙ Unicode 16 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
ODPOWIEDZ