.NET Tip #22: JOIN (obrázek inside)

Tomáš Jecha, MVP, MCSD       03.11.2008       SQL, Databáze, .NET Tips       12179 zobrazení

Skoro každý se setkal s jazykem SQL a jedním z jeho příkazů JOIN pro spojení řádků dvou tabulek do jedné. Bohužel ne všichni mají 100% jasno jak příkaz používat a jak využít jeho varianty v Microsoft SQL Serveru.

Základní syntaxe příkazu je:

SELECT * FROM Tabulka1 JOIN Tabulka2 ON Tabulka1.Sloupec = Tabulka2.Sloupec

Ta vybere kombinace řádků z tabulky Tabulka1 a Tabulka2, které mají shodnou hodnotu sloupce Sloupec. Místo klíčového slova JOIN však můžeme použít i LEFT JOIN, FULL JOIN nebo RIGHT JOIN. Každá z těchto variant může ovlivnit počet i hodnotu výsledků. Celé to lze znázornit jako průniky množit hodnot:

Join poster

Platí, že pokud použijeme vnitřní join, tak vždy dostaneme data, která mají platné hodnoty z obou tabulek. Použití vnějšího joinu znamená, že hodnoty z původní tabulky (FULL JOIN a RIGHT JOIN) nebo z připojované (FULL JOIN a LEFT JOIN) můžou být NULL, pokud se nenalezne odpovídající kombinace pomocí propojovacího pravidla.

Nejlépe je vše vidět na příkladu. Připravil jsem proto ukázkový kód všech typů JOINů, který si můžete pustit proti SQL Serveru:

-- vytvořit tabulky
create table #tbl (a int, txt nvarchar(100))
go
create table #tbl2 (a int, txt nvarchar(100))
go

-- naplnit puvodni tabulku
insert into #tbl values ( 2, N'2 je dělitelné 2' )
insert into #tbl values ( 4, N'4 je dělitelné 2' )
insert into #tbl values ( 6, N'6 je dělitelné 2' )

-- naplnit tabulku, kterou budeme pripojovat
insert into #tbl2 values ( 3, N'3 je dělitelné 3' )
insert into #tbl2 values ( 6, N'6 je dělitelné 3' )

-- DOTAZ 1 - vybrat jen odpovídajíci kombinace (společné jsou jen řádky s číslem 6)
select #tbl.a, #tbl.txt, #tbl2.txt from #tbl inner join #tbl2 on #tbl.a = #tbl2.a

-- DOTAZ 2 - vybrat všechny řádky z první tabulky + k odpovídajícím kombinacím i z druhé
select #tbl.a, #tbl.txt, #tbl2.txt from #tbl left outer join #tbl2 on #tbl.a = #tbl2.a

-- DOTAZ 3 - vybrat vše z obou tabulek a spojit případné kombinace
select #tbl.a, #tbl.txt, #tbl2.txt from #tbl full outer join #tbl2 on #tbl.a = #tbl2.a

-- DOTAZ 4 - vybrat všechny řádky z druhé tabulky + k odpovídajícím kombinacím i z první
select #tbl.a, #tbl.txt, #tbl2.txt from #tbl right outer join #tbl2 on #tbl.a = #tbl2.a

go
-- zrušit tabulky 
drop table #tbl
go
drop table #tbl2
go

 

hodnocení článku

0       Hodnotit mohou jen registrované uživatelé.

 

Nový příspěvek

 

Diskuse: .NET Tip #22: JOIN

Moc vám děkuji za ukázku,

váš kód je snadný na úpravy a dost mi osvětlil problém.

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.

Nyní zakládáte pod článkem nové diskusní vlákno.
Pokud chcete reagovat na jiný příspěvek, klikněte na tlačítko "Odpovědět" u některého diskusního příspěvku.

Nyní odpovídáte na příspěvek pod článkem. Nebo chcete raději založit nové vlákno?

 

  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:  
Heslo:  

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback