Array ( [0] => 15488239 [id] => 15488239 [1] => cswiki [site] => cswiki [2] => JOIN [uri] => JOIN [3] => [img] => [4] => [day_avg] => [5] => [day_diff] => [6] => [day_last] => [7] => [day_prev_last] => [8] => [oai] => [9] => [is_good] => [10] => [object_type] => [11] => 0 [has_content] => 0 [12] => [oai_cs_optimisticky] => ) Array ( [0] => {{Možná hledáte|[[join]] v Unixu}} [1] => '''JOIN''' je [[syntaxe|syntaktická konstrukce]] jazyka [[SQL]]. Slouží ke spojování výsledku dotazu [[SELECT]] ze dvou vstupních množin (typicky tabulek [[relační databáze]]). [2] => [3] => == Použití == [4] => [5] => SELECT seznam_sloupců FROM tabulka1 [6] => [CROSS|INNER|NATURAL|LEFT|RIGHT|[FULL ]OUTER] JOIN tabulka2 ON podmínka [7] => [WHERE podmínka] [ORDER BY sloupce] [LIMIT počet_záznamů]; [8] => [9] => [10] => Jako podmínka se typicky uvádí, které sloupce z obou tabulek se v tomto dotazu mají shodovat. Například příkaz: [11] => [12] => SELECT produkty.id, produkty.nazev, dodavatele.nazev FROM produkty [13] => LEFT JOIN dodavatele ON produkty.dodavatel_id = dodavatele.id [14] => WHERE cena > 10000 ORDER BY cena DESC; [15] => [16] => …vypíše (dejme tomu v databázi s produkty, na které je napojena tabulka dodavatelů) produkty s jejich [[id]], názvem a názvem dodavatele. Všimněte si, že zatímco sloupec cena není uveden s [[prefix]]em tabulky, sloupce id a nazev jsou (a musejí být). Pokud by nebyly, databázový engine by nedokázat rozlišit, id nebo nazev které tabulky chceme vypsat, a nejspíš by vypsal chybovou hlášku „Column 'id' in field list is ambiguous“ nebo obdobnou. [17] => [18] => == Varianty spojování tabulek == [19] => Spojování tabulek může být: [20] => * ''křížové'' (CROSS JOIN) [21] => * ''vnitřní'' (INNER JOIN) [22] => * ''přirozené'' (NATURAL JOIN) [23] => * ''vnější'' (OUTER JOIN) [24] => ** ''úplné vnější'' (FULL OUTER JOIN) [25] => ** ''částečné vnější'' [26] => *** ''„zleva“'' (LEFT JOIN) [27] => *** ''„zprava“'' (RIGHT JOIN) [28] => [29] => == JOIN dle standardu SQL89 == [30] => Podle standard SQL89 se spojované množiny zapisují v příkazu SELECT jako čárkami oddělený seznam klauzule [[FROM]]. Podmínky určující spojení množin se zapisují mezi filtrační podmínky v části [[WHERE]]. Takto lze specifikovat pouze spojování ''křížové'' a ''vnitřní''. [31] => [32] => == JOIN dle standardu SQL92 == [33] => Podle standardu SQL92 je spojovací podmínka nedílnou součástí klauzule FROM příkazu SELECT. Tento způsob zápisu zavádí kromě ''křížového'' a ''vnitřního'' spojování i ''přirozené'' a ''vnější''. [34] => [35] => === Křížové spojování === [36] => Výsledkem křížového spojování (CROSS JOIN) je [[kartézský součin]] vstupních množin. Výsledná množina je většinou velmi rozsáhlá. Ekvivalentem křížového spojování je vnitřní spojování s podmínkou, která je platná pro všechny řádky vstupních množin. [37] => [38] => ;Příklad [39] => Výstupní množina pro uvedené zápisy je shodná. [40] => [41] => [42] => SELECT a.col1, a.col2, b.col1, b.col2 [43] => FROM tab1 a, tab2 b; [44] => [45] => SELECT a.col1, a.col2, b.col1, b.col2 [46] => FROM tab1 a CROSS JOIN tab2 b; [47] => [48] => SELECT a.col1, a.col2, b.col1, b.col2 [49] => FROM tab1 a INNER JOIN tab2 b ON 1 = 1 [50] => [51] => [52] => === Vnitřní spojování === [53] => Vnitřní spojování (INNER JOIN) je v praxi nejčastěji používaným způsobem spojování vstupních množin. Je to křížové spojování omezené na výstupu o řádky nevyhovující spojovací podmínce. Typicky je podmínka definovaná jako rovnost [[primární klíč|primárního klíče]] a [[cizí klíč|cizího klíče]]. [54] => [55] => ;Příklad [56] => Výstupní množina pro uvedené zápisy je shodná. [57] => [58] => [59] => SELECT a.col1, a.col2, b.col1, b.col2 [60] => FROM tab1 a, tab2 b WHERE a.col1 = b.col1; [61] => [62] => SELECT a.col1, a.col2, b.col1, b.col2 [63] => FROM tab1 a INNER JOIN tab2 b ON a.col1 = b.col1; [64] => [65] => [66] => Spojení přes více polí [67] => [68] => [69] => SELECT a.col1, a.col2, a.col3, a.col4, b.col1, b.col2, b.col3, b.col4 [70] => FROM tab1 a INNER JOIN tab2 b ON (a.col1 = b.col1 AND a.col2 = b.col2 AND a.col3 = b.col3); [71] => [72] => [73] => === Přirozené spojování === [74] => Přirozené spojování (NATURAL JOIN) je zvláštním případem vnitřního spojování, kde je spojovací podmínka realizována automaticky dle přítomnosti [[Foreign key|referenčních vazeb]] nebo shodnosti názvů sloupců a [[datový typ|datových typů]] ve spojovaných tabulkách. Pro možnou nejednoznačnost není tento typ často používán, ani v databázových strojích nebývá implementován. [75] => [76] => ;Příklad [77] => [78] => SELECT a.col1, a.col2, b.col1, b.col2 [79] => FROM tab1 a NATURAL JOIN tab2 b [80] => [81] => [82] => === Vnější spojování === [83] => Vnější spojování (OUTER JOIN) generuje výstupní množinu omezenou o spojovací podmínky podobně jako vnitřní spojování, pokud však není nalezen vhodný řádek v druhé množině, je nenalezený řádek nahrazen hodnotami [[NULL]]. Dle typu vnějšího spojení mohou být doplňovány řádky z jedné nebo obou vstupních množin. Výsledkem vnějšího spojování jsou řádky naplněné hodnotami ze vstupních množin i částečně. [84] => [85] => ==== Úplné vnější spojování ==== [86] => Úplné vnější spojování (FULL OUTER JOIN) doplňuje NULL hodnoty do obou vstupních množin. [87] => [88] => ;Příklad [89] => [90] => SELECT a.col1, a.col2, b.col1, b.col2 [91] => FROM tab1 a FULL OUTER JOIN tab2 b on a.col1 = b.col1 [92] => [93] => [94] => ==== Částečné vnější spojování ==== [95] => Pro částečné vnější spojování jsou definována klíčová slova LEFT a RIGHT, která definují, která vstupní množina má zahrnuté všechny řádky v množině výstupní, tj. která vstupní množina není doplňována o NULL hodnoty. [96] => [97] => ;Příklad [98] => [99] => SELECT a.col1, a.col2, b.col1, b.col2 [100] => FROM tab1 a LEFT OUTER JOIN tab2 b ON a.col1 = b.col1 [101] => [102] => SELECT a.col1, a.col2, b.col1, b.col2 [103] => FROM tab1 a RIGHT OUTER JOIN tab2 b ON a.col1 = b.col1 [104] => [105] => [106] => V dialektu jazyka SQL, který používá systém [[Oracle Database|Oracle]] byla do verze 8 syntaxe těchto spojení trochu jiná (od verze 9 lze užívat i výše uvedených standardních konstrukcí): [107] => [108] => [109] => SELECT a.col1, a.col2, b.col1, b.col2 [110] => FROM tab1 a, tab2 b where a.col1 = b.col1 (+) [111] => [112] => SELECT a.col1, a.col2, b.col1, b.col2 [113] => FROM tab1 a, tab2 b where a.col1 (+) = b.col1 [114] => [115] => [116] => == Další vlastnosti == [117] => === Spojování více než dvou tabulek === [118] => SQL umožňuje spojení pomocí JOIN pro teoreticky libovolné množství tabulek. Syntaxe je následující: [119] => [120] => [121] => SELECT sloupce FROM ((((tabulka1 [INNER|LEFT|OUTER|...] JOIN tabulka2 ON sloupectabulky1=sloupectabulky2) [122] => [INNER|LEFT|OUTER|...] JOIN tabulka3 ON sloupectabulky1nebo2 = sloupectabulky3) [123] => [INNER|LEFT|OUTER|...] JOIN tabulka4 ON sloupectabulky1nebo2nebo3 = sloupectabulky4) [124] => [INNER|LEFT|OUTER|...] JOIN tabulka5 ON sloupectabulky1nebo2nebo3nebo4 = sloupectabulky5) [125] => ...; [126] => [127] => [128] => Pro některé databázové systémy nejsou závorky ve výše uvedeném příkladu povinné. [129] => [130] => === JOIN a NULL === [131] => [[NULL]] má v prostředí databází speciální místo. Někdy bývá považován za synonymum prázdné nebo „nulové hodnoty“, to je však častá chyba, protože ve skutečnosti bychom o NULL měli přemýšlet jako o „neurčité hodnotě“, s tím, že platí: NULL ≠ NULL (neurčitá hodnota ≠ neurčitá hodnota). [132] => [133] => SELECT sloupce FROM tabulka1 LEFT JOIN tabulka2 ON tabulka1.sloupec=tabulka2.sloupec; [134] => [135] => SELECT sloupce FROM tabulka1 INNER JOIN tabulka2 ON tabulka1.sloupec=tabulka2.sloupec; [136] => [137] => Pro výše uvedený příklad se řádky, kde tabulka2.sloupec je NULL… [138] => * pro spojení LEFT JOIN zobrazí. [139] => * pro spojení INNER JOIN nezobrazí. [140] => Řádky, kde tabulka1.sloupec je NULL, se nezobrazí v žádném z případů. Dokonce ani při FULL OUTER JOINu: Podobně jako v dílčích tabulkách nejsou obsaženy řádky složené pouze z hodnot NULL (za předpokladu zavedeného [[primární klíč|primárního klíče]]), ani jejich FULL JOINem žádné takové NULLxNULL nevzniknou. Aby se řádek najoinoval, musel by nejdříve existovat, aby s ním pak mohlo být takto manipulováno. [141] => [142] => == Odkazy == [143] => === Související články === [144] => {{SQL}} [145] => === Externí odkazy === [146] => * [http://www.codinghorror.com/blog/2007/10/a-visual-explanation-of-sql-joins.html A Visual Explanation of SQL Joins] {{Wayback|url=http://www.codinghorror.com/blog/2007/10/a-visual-explanation-of-sql-joins.html |date=20140215193839 }} [147] => [148] => [[Kategorie:SQL]] [] => )
good wiki

JOIN

JOIN je syntaktická konstrukce jazyka SQL. Slouží ke spojování výsledku dotazu SELECT ze dvou vstupních množin (typicky tabulek relační databáze).

More about us

About

Expert Team

Vivamus eget neque lacus. Pellentesque egauris ex.

Award winning agency

Lorem ipsum, dolor sit amet consectetur elitorceat .

10 Year Exp.

Pellen tesque eget, mauris lorem iupsum neque lacus.

You might be interested in

,'primární klíč','NULL','Kategorie:SQL','Oracle Database','datový typ','Foreign key','cizí klíč','kartézský součin','FROM','WHERE','prefix','id'