Left join (SQL) - příklad, podrobný popis, chyby použití
V libovolné relativní databázi jsou všechny informace distribuovány na samostatných tabulkách. Mnoho z tabulek si vzájemně propojilo vzájemné vztahy. Nicméně, s pomocí Sql dotazy
Obsah
V tomto článku budeme hovořit konkrétně o levém vnějším připojení. Než začneme popisovat tento typ připojení, přidáme do databáze některé tabulky.
Příprava potřebných tabulek
Například v naší databázi jsou informace o lidech a jejich nemovitostech. Základní informace je založeno na třech tabulkách: lidé (lidé), nemovitosti (nemovitosti), realty_peoples (tabulka s vztahem k komu lidem, co vlastnictví patří). Předpokládejme, že následující údaje jsou uloženy v tabulkách pro lidi:
Lidé | ||||
id | L_name | F_name | Middle_name | Narozeniny |
1 | Ivanova | Daria | Borisovna | 16.07.2000 |
2 | Pugin | Vladislav | Nikolayevich | 29.1.1986 |
3 | Evgeniin | Alexander | Fedorovič | 30.4.1964 |
4 | Annina | Láska | Pavlovna | 31.3.1989 |
5 | Gerasimovskaya | Doufám | Pavlovna | 14. 4. 1992 |
6. | Gerasimovsky | Oleg | Albertovich | 29.1.1985 |
7. | Sukhanovsky | Jurij | Andreevich | 25.9.1976 |
8. | Sukhanovskaya | Julie | Yuryevna | 10/01/2001 |
Vlastnictví:
Nemovitosti | |
id | adresu |
1 | Arkhangelsk, st. Voronina, 7, ap. 6 |
2 | Arkhangelsk, st. Severodvinskaya, 84, Apt. 9, pokoj. 5 |
3 | Arkhangelsk, Severodvinsk, ul. Lenina, d. 134, apt. 85 |
4 | Arkhangelsk, Novodvinsk, ul. Proletarskaya, 16, apt. 137 |
5 | Arkhangelsk, pl. Terekhin, d. 89, apt. 13. místo |
Pro vztahy jsou lidé nemovitostí:
Realty_peoples | ||
id_peoples | id_realty | typ |
7. | 3 | Společné společné vlastnictví |
8. | 3 | Společné společné vlastnictví |
3 | 5 | Vlastnictví |
7. | 1 | Vlastnictví |
5 | 4 | Sdílené vlastnictví |
6. | 4 | Sdílené vlastnictví |
Levý spoj (Sql) - popis
Levé připojení má následující syntaxi:
Tabulka_A LEFT JOIN tabulka_B [{ON predikát} | {USING Seznam_skalibry}] |
A vypadá to takto:
A tento výraz je přeložen jako "Vybrat všechny řádky z tabulky A bez výjimky a výstup pouze řádky odpovídající predikátu z tabulky B. Pokud v tabulce B neexistovala žádná dvojice řádků tabulky A, vyplňte výsledné sloupce Null hodnotami. "
Nejčastěji se při spuštění levého připojení nastavuje ON, USING se používá pouze v případě, že názvy sloupců, pro které je naplánováno připojení, jsou stejné.
Levý spoj - příklady použití
S pomocí levého spojení vidíme, zda všichni lidé na seznamu národů mají nemovitosti. Chcete-li to provést, spusťte následující příklad v levém spojení sql:
SELECT Peoples. *, Realty_peoples.id_realty, Realty_peoples.type Od lidí LEFT JOIN Realty_peoples ON Peoples.id = Realty_peoples.id_peoples; |
A dostáváme následující výsledek:
Žádost1 | ||||||
id | L_name | F_name | Middle_name | Narozeniny | id_realty | typ |
1 | Ivanova | Daria | Borisovna | 16.07.2000 | ||
2 | Pugin | Vladislav | Nikolayevich | 29.1.1986 | ||
3 | Evgeniin | Alexander | Fedorovič | 30.4.1964 | 5 | Vlastnictví |
4 | Annina | Láska | Pavlovna | 31.3.1989 | ||
5 | Gerasimovskaya | Doufám | Pavlovna | 14. 4. 1992 | 4 | Sdílené vlastnictví |
6. | Gerasimovsky | Oleg | Albertovich | 29.1.1985 | 4 | Sdílené vlastnictví |
7. | Sukhanovsky | Jurij | Andreevich | 25.9.1976 | 1 | Vlastnictví |
7. | Sukhanovsky | Jurij | Andreevich | 25.9.1976 | 3 | Společné společné vlastnictví |
8. | Sukhanovskaya | Julie | Yuryevna | 10/01/2001 | 3 | Společné společné vlastnictví |
Jak vidíme, u Ivanova Darya, Pugin Vladislav a Annina Lyubov nemají registrovaná práva k nemovitostem.
A co bychom mohli použít pomocí spojení Vnitřního spojení? Jak víte, vylučuje chybné linky, takže tři lidé z našeho konečného vzorku prostě vypadnou:
Žádost1 | ||||||
id | L_name | F_name | Middle_name | Narozeniny | id_realty | typ |
3 | Evgeniin | Alexander | Fedorovič | 30.4.1964 | 5 | Vlastnictví |
5 | Gerasimovskaya | Doufám | Pavlovna | 14. 4. 1992 | 4 | Sdílené vlastnictví |
6. | Gerasimovsky | Oleg | Albertovich | 29.1.1985 | 4 | Sdílené vlastnictví |
7. | Sukhanovsky | Jurij | Andreevich | 25.9.1976 | 1 | Vlastnictví |
7. | Sukhanovsky | Jurij | Andreevich | 25.9.1976 | 3 | Společné společné vlastnictví |
8. | Sukhanovskaya | Julie | Yuryevna | 10/01/2001 | 3 | Společné společné vlastnictví |
Zdá se, že druhá možnost také splňuje podmínky našeho úkolu. Nicméně, pokud budeme pokračovat v přidávání více a více tabulek, tři lidé z výsledku již nenávratně zmizí. Proto v praxi při kombinaci více tabulek jsou spojení vlevo a vpravo mnohem častěji využívána než vnitřní spojení.
Pokračujeme ve zvážení příkladů s levým spojením sql. Připojte se k tabulce s adresami našich nemovitostí:
SELECT Peoples. *, Realty_peoples.id_realty, Realty_peoples.type, Realty.address FROM Peoples LEFT JOIN Realty_peoples ON Peoples.id = Realty_peoples.id_peoples LEVÁ SPOJENÍ Realty ON Realty.id = Realty_peoples.id_realty |
Nyní získáváme nejen formu práva, ale také adresy nemovitostí:
Žádost1 | |||||||
id | L_name | F_name | Middle_name | Narozeniny | id_realty | typ | adresu |
1 | Ivanova | Daria | Borisovna | 16.07.2000 | |||
2 | Pugin | Vladislav | Nikolayevich | 29.1.1986 | |||
3 | Evgeniin | Alexander | Fedorovič | 30.4.1964 | 5 | Vlastnictví | Arkhangelsk, pl. Terekhin, d. 89, apt. 13. místo |
4 | Annina | Láska | Pavlovna | 31.3.1989 | |||
5 | Gerasimovskaya | Doufám | Pavlovna | 14. 4. 1992 | 4 | Sdílené vlastnictví | Arkhangelsk, Novodvinsk, ul. Proletarskaya, 16, apt. 137 |
6. | Gerasimovsky | Oleg | Albertovich | 29.1.1985 | 4 | Sdílené vlastnictví | Arkhangelsk, Novodvinsk, ul. Proletarskaya, 16, apt. 137 |
7. | Sukhanovsky | Jurij | Andreevich | 25.9.1976 | 3 | Společné společné vlastnictví | Arkhangelsk, Severodvinsk, ul. Lenina, d. 134, apt. 85 |
7. | Sukhanovsky | Jurij | Andreevich | 25.9.1976 | 1 | Vlastnictví | Arkhangelsk, st. Voronina, 7, ap. 6 |
8. | Sukhanovskaya | Julie | Yuryevna | 10/01/2001 | 3 | Společné společné vlastnictví | Arkhangelsk, Severodvinsk, ul. Lenina, d. 134, apt. 85 |
Levý spoj - typické chyby použití: nesprávné uspořádání tabulek
Hlavní chyby povolené levým vnějším spojením tabulek jsou dvě:
- Pořadí tabulek, které způsobily ztrátu dat, je nesprávně vybráno.
- Chyby při použití Kde v dotazu se sloučenými tabulkami.
Zvažte první chybu. Před vyřešením jakéhokoli problému stojí za to jasně pochopit, co přesně chceme získat. Ve výše uvedeném příkladu jsme vyřadili všechny lidi, ale zcela ztratili informace o objektu pod číslem 2, ze kterého nebyl nalezen majitel.
Pokud jsme přesunuli tabulky do míst dotazu a začali jsme pomocí "hellip- From Realty", pak bychom neztratili žádnou vlastnost, kterou nemůžeme říct o lidech.
Nicméně, nebojte se levého spojení, jděte na úplnou externí, která bude zahrnovat jako výsledek a shoduje se a neodpovídá řádku.
Koneckonců velikost vzorku často velmi velké a zbytečné údaje opravdu nezáleží. Hlavním úkolem je pochopit, co chcete v důsledku získat: všichni lidé se seznamem dostupných nemovitostí, nebo seznam všech nemovitostí s jejich vlastníky (pokud existují).
Levý spoj - typické chyby použití: správnost dotazu při nastavení podmínek v položce Kde
Druhá chyba souvisí také se ztrátou dat a není vždy okamžitě zřejmá.
Pojďme se vrátit k dotazu, když používáme levou přípojku přijatých dat na všechny lidi a jejich stávající nemovitosti. Zapamatujte si následující s příkladem left sql join:
Od lidí LEFT JOIN Realty_peoples ON Peoples.id = Realty_peoples.id_peoples; |
Předpokládejme, že chceme upřesnit dotaz a ne výstupní data, kde typ zákona je "Vlastnost". Pokud jednoduše přidáme, použijeme levý join sql, příkladem je následující podmínka:
...
Kde je typ <> "Vlastnost" |
ztratíme údaje o osobách, které nemají žádnou nemovitost, protože prázdná hodnota Nullu se takto neporovnává:
Žádost1 | ||||||
id | L_name | F_name | Middle_name | Narozeniny | id_realty | typ |
5 | Gerasimovskaya | Doufám | Pavlovna | 14. 4. 1992 | 4 | Sdílené vlastnictví |
6. | Gerasimovsky | Oleg | Albertovich | 29.1.1985 | 4 | Sdílené vlastnictví |
7. | Sukhanovsky | Jurij | Andreevich | 25.9.1976 | 3 | Společné společné vlastnictví |
8. | Sukhanovskaya | Julie | Yuryevna | 10/01/2001 | 3 | Společné společné vlastnictví |
Abyste předešli chybám z tohoto důvodu, nejlépe je třeba specifikovat podmínku výběru okamžitě po připojení. Doporučujeme zvážit následující příklad s levým spojením sql.
SELECT Peoples. *, Realty_peoples.id_realty, Realty_peoples.type FROM Peoples LEFT JOIN Realty_peoples ON (Peoples.id = Realty_peoples.id_peoples a typ <> "Vlastnost") |
Výsledkem je následující:
Žádost1 | ||||||
id | L_name | F_name | Middle_name | Narozeniny | id_realty | typ |
1 | Ivanova | Daria | Borisovna | 16.07.2000 | ||
2 | Pugin | Vladislav | Nikolayevich | 29.1.1986 | ||
3 | Evgeniin | Alexander | Fedorovič | 30.4.1964 | ||
4 | Annina | Láska | Pavlovna | 31.3.1989 | ||
5 | Gerasimovskaya | Doufám | Pavlovna | 14. 4. 1992 | 4 | Sdílené vlastnictví |
6. | Gerasimovsky | Oleg | Albertovich | 29.1.1985 | 4 | Sdílené vlastnictví |
7. | Sukhanovsky | Jurij | Andreevich | 25.9.1976 | 3 | Společné společné vlastnictví |
8. | Sukhanovskaya | Julie | Yuryevna | 10/01/2001 | 3 | Společné společné vlastnictví |
Tímto provedením jednoduchého příkladu s levým spojením sql dostaneme seznam všech lidí, přičemž kromě toho vyvodíme, která z nich má nemovitosti ve společném / společném vlastnictví.
Na závěr bych chtěl znovu zdůraznit, že je nezbytné zodpovědně převzít výběr informací z databáze. Mnoho nuancí se nám otevřelo s využitím levého spojení sql jednoduchým příkladem, vysvětlením kterého je jeden - než začneme psát i elementární dotaz, musíme pečlivě pochopit, co přesně chceme získat. Hodně štěstí!
- Databáze je komplexní systém
- Normalizace databáze
- SQL odlišný: popis, příklady, vlastnosti
- Soubor SQL. Formát souboru SQL: popis přípony
- MySQL je to, co a kde se používá?
- Vytvoření databáze MySQL je součástí jakéhokoli webu
- MySQL - co je to? Chyba MySQL
- DB je ... Typy a vlastnosti databáze
- SQL Kde: aplikační metody a příklady
- MySQL JOIN: popis, příklad použití příkazu a doporučení
- Příkaz SQL INNER JOIN: příklady, syntaxe a funkce
- ACCDB: jak otevřít soubor
- Vytvoření tabulky SQL krok za krokem
- Vytváření dotazů v aplikaci Access. Typy požadavků
- Vymazat příkaz Delete MySQL
- Vymazání duplicit MySQL
- Jak vytvořit databázi mysql
- Jak vytvářet dotazy v aplikaci Access: podrobné pokyny a doporučení
- Podrobnosti o přístupu k tabulkám
- Jaké typy databází existují dnes?
- DBMS je systém správy dat