Zlaczenie naturalne - teoria

pyt Q

Witam!
Jestem nowy na tej grupce i mam nast?puj?ce pytanie: Ucze sie na czym polega dzialanie zlaczenia naturalnego. Wedlug notatek z moich wykladow wyglada to tak:
1. Najpierw wylicza sie iloczyn kartezjanski - OK to jest jasne, kazda krotke laczy sie z kazda. 2. Realizujemy wybór wedlugo wzoru:
Sigma a=b(T) => S
3. Nastepnie realizujemy rzut:
"Pi"(lista kolumumn bez b)(S) => R
No i tu sie wlasnie pojawia moje pytanie - o co dokladnie chodzi w punkcie 2 i 3. Czy ktos wie i bylby w stanie mi to wytlumaczyc na jakims przykladzie z tabelkami? a oraz b to kolumny.
Pozdrawiam

odp A

1. Najpierw wylicza sie iloczyn kartezjanski - OK to jest jasne, kazda krotke laczy sie z kazda. 2. Realizujemy wybór wedlugo wzoru:
Sigma a=b(T) = S
3. Nastepnie realizujemy rzut:
"Pi"(lista kolumumn bez b)(S) = R
Są dwie tabele tabela o
id i_r 2 Franek 2 Janek 1 Romek 3 Czesio
i tabela p
id imie 1 Hela 2 Mela 3 Jola 4 Anka

złączenia naturalne tabel
SELECT * FROM `o` NATURAL JOIN `p`;
id imie i_r 1 Romek Hela 2 Franek Mela 2 Janek Mela 3 Czesio Jola
SELECT * FROM `p` natural join `o`;
id i_r imie 2 Mela Franek 2 Mela Janek 1 Hela Romek 3 Jola Czesio
Teraz chcąc uzyskać te złączenia według tego: to trzeba:
1 punkt iloczyn kartezjański
SELECT * FROM `o` CROSS JOIN `p`;
id imie id i_r 2 Franek 1 Hela 2 janek 1 Hela 1 Romek 1 Hela 3 Czesio 1 Hela 2 Franek 2 Mela 2 janek 2 Mela 1 Romek 2 Mela 3 Czesio 2 Mela 2 Franek 3 Jola 2 janek 3 Jola 1 Romek 3 Jola 3 Czesio 3 Jola 2 Franek 4 Anka 2 janek 4 Anka 1 Romek 4 Anka 3 Czesio 4 Anka

2 punkt sigma, restrykcja, (wyniki relacji spełniające określone warunki)
SELECT * FROM `o` CROSS JOIN `p` on `o`.`id`=`p`.`id`;
id imie id i_r 1 Romek 1 Hela 2 Franek 2 Mela 2 janek 2 Mela 3 Czesio 3 Jola
SELECT * FROM `p` CROSS JOIN `o` on `o`.`id`=`p`.`id`;
id i_r id imie 2 Mela 2 Franek 2 Mela 2 janek 1 Hela 1 Romek 3 Jola 3 Czesio

3 punkt pi, rzut, projekcja, (wybranie odpowiednich kolumn)
SELECT `p`.`id`,`i_r`,`imie` FROM `p` CROSS JOIN `o` ON `o`.`id`=`p`.`id`;
id i_r imie 2 Mela Franek 2 Mela janek 1 Hela Romek 3 Jola Czesio
SELECT `p`.`id`,`imie`,`i_r` FROM `o` CROSS JOIN `p` ON `o`.`id`=`p`.`id`;
id imie i_r 1 Romek Hela 2 Franek Mela 2 janek Mela 3 Czesio Jola

aha, u Ciebie "a" to "`p`.`id`" , zaś "b" to "`o`.`id`".


odp A

Są dwie tabele tabela o
id i_r 2 Franek 2 Janek 1 Romek 3 Czesio
i tabela p
id imie 1 Hela 2 Mela 3 Jola 4 Anka

złączenia naturalne tabel
SELECT * FROM `o` NATURAL JOIN `p`;
id imie i_r 1 Romek Hela 2 Franek Mela 2 Janek Mela 3 Czesio Jola
SELECT * FROM `p` natural join `o`;
id i_r imie 2 Mela Franek 2 Mela Janek 1 Hela Romek 3 Jola Czesio

Witam Ja niestety nie znam teorii, ale mam nieodparte wrazenie, ze zamieniles nazwy kolumn. Mam racje, czy czegos jednak nie rozumiem?
Pozdrawiam Michal

odp A

Są dwie tabele tabela o
id i_r 2 Franek 2 Janek 1 Romek 3 Czesio
i tabela p
id imie 1 Hela 2 Mela 3 Jola 4 Anka

złączenia naturalne tabel
SELECT * FROM `o` NATURAL JOIN `p`;
id imie i_r 1 Romek Hela 2 Franek Mela 2 Janek Mela 3 Czesio Jola
SELECT * FROM `p` natural join `o`;
id i_r imie 2 Mela Franek 2 Mela Janek 1 Hela Romek 3 Jola Czesio
Witam Ja niestety nie znam teorii, ale mam nieodparte wrazenie, ze zamieniles nazwy kolumn. Mam racje, czy czegos jednak nie rozumiem?
Michal AKA Miki pisze: W wynikach zapytań nazwy kolumn są odwrotnie - imie i_r , ale wyniki zapytań w kolumnach też nie są prawidłowe! Specjalnie założyłem takie tabele i wyniki mam takie:
SELECT * FROM `o` NATURAL JOIN `p`;
id imie i_r 1 Romek Hela 2 Janek Mela ---- 2 Janek Mela ---- takie SAME!!! 3 Czesio Jola
odwrotnie SELECT * FROM `p` natural join `o`;
id i_r imie 2 Mela Janek 2 Mela Janek 1 Hela Romek 3 Jola Czesio
Pytanie do mistrzów tej dziedziny magii - o co biega? Czy chodzi o to, że zawsze "ostatnie" wystąpienie przy identycznym polu złączenia (id) pobiera? Tj. gdy mamy do wyboru Franka i Janka dla id=2, to Janek jest na końcu i ten jest pobierany?
pozdrawiam Artur

Dodaj odpowiedź

Tytuł:

Mail: (w celu weryfikacji posta)