Uz jsem si o tom jednou zjistoval informace, ale protoze jsem to pak nepouzil, a vickrat jsem toto nutne nepotreboval, zapomnel jsem jak se to pouziva a jine informace o tomto. Velmi mi dnes pomohlo na zakladni pochopeni tento obrazek, ktery jsem nasel na stackoverflow: Pak jsem si vytvoril v SQL Server Management Studio tyto 2 tabulky: Tabulka Albums:
Tabulka Photos:
A ted vysledky a popisy jednotlivych funkci sql join: Full Outer Join: Full Outer Join slouzi k tomu, pokud chcete ziskat vsechna data tabulek seskupenou podle jejich klice, jehoz specifikace se nachazi v klazuli on na konci SQL dotazu. Takze tento prikaz:
1 2 |
use MSSQLLearn; select * from Albums a full outer join Photo p on a.IDAlbum = p.IDAlbum; |
Vysledek tohoto prikazu vidite zde:
Pozdeji si ukazeme jak ziskat jen konkretni sloupce. Inner Join: Toto je patrne to co ve vetsine pripadu budete potrebovat. Jednoduse receno – vrati vam jen ty radky z tabulek, ktere maji stejny klic. Napsal jsem si takovy SQL prikaz:
1 2 |
use MSSQLLearn; select * from Albums a inner join Photo p on a.IDAlbum = p.IDAlbum; |
Left Join: Tabulku kterou urcim za left join nemusi mit tu hodnotu kterou mam v klazuli on. Takove hodnoty neexistujiciho sloupce tabulky se pak nahradi NULL. Takze jednoducha pomucka pro rozliseni kdy dat left a kdy right join – left pokud chcete mit vsechny radky z hlavni tabulky, tedy z te kterou specifikujete za slovem from. Right pokud chcete mit vsechny radky z tabulky, kterou specifikujete za klicovym slovem join:
1 2 |
use MSSQLLearn; select * from Albums a left join Photo p on a.IDAlbum = p.IDAlbum; |
Right Join: Je to analogicke s left join – akorat naopak. To znamena ze budou vypsany vsechny radky ze tabulky specifikovane za join a radky ktere nebudou mit shodny klic v tabulce za from budou mit ve sloupcich null.
1 2 |
use MSSQLLearn; select * from Albums a right join Photo p on a.IDAlbum = p.IDAlbum; |
Libovolny Join s urcenim vracenych sloupcu libovolne tabulky Na konec to slibene. Neni to zadna veda a urcite tohle bude noseni drivi do lesa, jen chci ukazat ze to skutecne funguje:
1 2 |
use MSSQLLearn; select a.Name, p.Name from Albums a left join Photo p on a.IDAlbum = p.IDAlbum; |