Datorer, Programmering
Vänster join (SQL) - ett exempel, den detaljerade beskrivningen, användning av felet
I någon verklig relationsdatabas är all information som sprids på en separat tabell. Många av tabellerna anges i kommunikationsschema med varandra. Men med hjälp av SQL-frågor är det fullt möjligt att sätta en länk mellan data, inte inbäddade i kretsen. Detta görs genom att utföra en ansluta anslutning, vilket gör det möjligt att bygga upp en relation mellan ett antal tabeller och även ansluta till synes disparata information.
Denna artikel kommer att tala specifikt om vänster yttre koppling. Innan vi fortsätter med en beskrivning av denna typ av anslutning, lägg i vissa databastabeller.
Förbereda de nödvändiga tabeller
Till exempel i vår databas, det finns information om personer och deras fastigheter. Sammanfattning av de tre tabeller: Peoples (människor), Realty (fastigheter), Realty_peoples (tabellrelationer, människor som från vilken egendom tillhör). Antag följande data som lagrats i tabellerna av folket:
Peoples | ||||
id | L_name | F_name | Middle_name | födelsedag |
1 | Ivanova | Daria |
B. | 2000/07/16 |
2 | Pugin | Vladislav | Nikolaevich | 1986/01/29 |
3 | Evgenin | Alexander | Federovich | 1964/04/30 |
4 | Annina | älskar | P. | 1989/12/31 |
5 | Gerasimovsky | hoppas | P. | 1992/03/14 |
6 | Gerasimovsky | Oleg | Albertovich | 1985/01/29 |
7 | Sukhanovskaya | jury | A. | 1976/09/25 |
8 | Sukhanovskaya | julia | Y. | 01.10.2001 |
Fastigheter:
Realty | |
id | adress |
1 | Arkhangelsk, ul. Voronin, d. 7, kv.6 |
2 | Arkhangelsk, ul. Severodvinskaya, d. 84, q. 9 BR. 5 |
3 | Archangelskregionen, Severodvinsk, st. Lenin, d. 134, q. 85 |
4 | Archangelskregionen, Novodvinsk, ul. Proletarshaya, d. 16, q. 137 |
5 | Arkhangelsk, pl. Terekhina, d. 89, q. 13 |
Relations människor - fastighets:
Realty_peoples | ||
id_peoples | id_realty | Typ |
7 | 3 | Total gemensamt ägande |
8 | 3 | Total gemensamt ägande |
3 | 5 | egenskap |
7 | 1 | egenskap |
5 | 4 | gemensamma delar |
6 | 4 | gemensamma delar |
Vänster join (SQL) - Beskrivning
Vänster förening har följande syntax:
Table_A VÄNSTER GÅ table_B [{ON predikat} | {ANVÄNDA spisok_ med tolbtsov}] |
Och schematiskt på följande sätt:
Och detta uttryck översätts som "Markera allt, utan undantag, rad i tabell A och tabell B för att visa endast de matchande rader av predikatet. Om tabellen återfanns i strängen tabellen för par A, sedan fylla den resulterande kolumner Null - värden".
Oftast när den vänstra anslutningen anges på, använder är bara används när kolumnnamnen, som är planerat att göra kopplingen är desamma.
Left gå - exempel på användning
Med anslutningen av vänster kan vi se, alla människor från listan om det Peoples egendom. För att göra detta i den vänstra gå sql query exempel:
SELECT Peoples. * Realty_peoples.id_realty, Realty_peoples.type FRÅN Peoples VÄNSTER GÅ Realty_peoples ON Peoples.id = Realty_peoples.id_peoples; |
Med följande resultat:
fråga1 | ||||||
id | L_name | F_name | Middle_name | födelsedag | id_realty | Typ |
1 | Ivanova | Daria | B. | 2000/07/16 | ||
2 | Pugin | Vladislav | Nikolaevich | 1986/01/29 | ||
3 | Evgenin | Alexander | Federovich | 1964/04/30 | 5 | egenskap |
4 | Annina | älskar | P. | 1989/12/31 | ||
5 | Gerasimovsky | hoppas | P. | 1992/03/14 | 4 | gemensamma delar |
6 | Gerasimovsky | Oleg | Albertovich | 1985/01/29 | 4 | gemensamma delar |
7 | Sukhanovskaya | jury | A. | 1976/09/25 | 1 | egenskap |
7 | Sukhanovskaya | jury | A. | 1976/09/25 | 3 | Total gemensamt ägande |
8 | Sukhanovskaya | julia | Y. | 01.10.2001 | 3 | Total gemensamt ägande |
Som vi ser, Ivanova Darya Pugin Vladislav och Anninoy Lyubovi Inga registrerade fastighets rättigheter.
Och vad skulle vi ha fått hjälp av en inre gå Inner gå? Som ni vet, utesluter det inte matchande rader, så tre av våra sista prov skulle helt enkelt tas bort:
fråga1 | ||||||
id | L_name | F_name | Middle_name | födelsedag | id_realty | Typ |
3 | Evgenin | Alexander | Federovich | 1964/04/30 | 5 | egenskap |
5 | Gerasimovsky | hoppas | P. | 1992/03/14 | 4 | gemensamma delar |
6 | Gerasimovsky | Oleg | Albertovich | 1985/01/29 | 4 | gemensamma delar |
7 | Sukhanovskaya | jury | A. | 1976/09/25 | 1 | egenskap |
7 | Sukhanovskaya | jury | A. | 1976/09/25 | 3 | Total gemensamt ägande |
8 | Sukhanovskaya | julia | Y. | 01.10.2001 | 3 | Total gemensamt ägande |
Det verkar som den andra versionen uppfyller också villkoren för vårt problem. Men om vi börjar att fästa på en annan, och en annan tabell, tre personer från resultatet redan oåterkalleligen borta. Därför, i praktiken, när man kombinerar flera bord mycket oftare används vänster och höger anslutning än Inre gå.
Kommer att fortsätta att se till vänster gå sql exempel. Bifoga en tabell med adresser till våra hus:
SELECT Peoples. * Realty_peoples.id_realty, Realty_peoples.type, Realty.address FRÅN Peoples LEFT GÅ Realty_peoples ON Peoples.id = Realty_peoples.id_peoples LEFT GÅ Realty ON Realty.id = Realty_peoples.id_realty |
Nu får vi inte bara en sorts lag, men också adressen till fastigheter:
fråga1 | |||||||
id | L_name | F_name | Middle_name | födelsedag | id_realty | Typ | adress |
1 | Ivanova | Daria | B. | 2000/07/16 | |||
2 | Pugin | Vladislav | Nikolaevich | 1986/01/29 | |||
3 | Evgenin | Alexander | Federovich | 1964/04/30 | 5 | egenskap | Arkhangelsk, pl. Terekhina, d. 89, q. 13 |
4 | Annina | älskar | P. | 1989/12/31 | |||
5 | Gerasimovsky | hoppas | P. | 1992/03/14 | 4 | gemensamma delar | Archangelskregionen, Novodvinsk, ul. Proletarshaya, d. 16, q. 137 |
6 | Gerasimovsky | Oleg | Albertovich | 1985/01/29 | 4 | gemensamma delar | Archangelskregionen, Novodvinsk, ul. Proletarshaya, d. 16, q. 137 |
7 | Sukhanovskaya | jury | A. | 1976/09/25 | 3 | Total gemensamt ägande | Archangelskregionen, Severodvinsk, st. Lenin, d. 134, q. 85 |
7 | Sukhanovskaya | jury | A. | 1976/09/25 | 1 | egenskap | Arkhangelsk, ul. Voronin, d. 7, kv.6 |
8 | Sukhanovskaya | julia | Y. | 01.10.2001 | 3 | Total gemensamt ägande |
Archangelskregionen, Severodvinsk, st. Lenin, d. 134, q. 85 |
Left gå - den typiska användningen av fel: ogiltig förfarande bord
Grundläggande misstag till vänster yttre koppling bord, två:
- Valts korrekt ordning tabeller för vilka uppgifter var förlorat.
- Där fel när du använder en fråga med gå tabeller.
Överväga första misstag. Innan beslut om eventuella problem bör stå klart att det vi vill komma i slutet. I det här exemplet ovan, tog vi varenda en av dem, men helt förlorade information om objektet med nummer 2, vars ägare kunde inte hittas.
Om vi flyttade tabeller i en fråga på vissa ställen, och skulle börja med «... Från Realty lämnade gå Peoples ...» någon egenskap, skulle vi inte ha förlorat, du kommer inte att berätta om människor.
Men var inte rädd för den vänstra anslutningen växla till full extern, som ingår i resultatet och matchningen, och inte de matchande linjer.
När allt kommer omkring, provvolymen är ofta mycket stora, och extra uppgifterna är faktiskt värdelös. Det viktigaste - att räkna ut vad du vill få ett resultat: av alla människor med en lista över sina tillgängliga egendom eller hela fastigheten listan med sina ägare (om någon).
Left gå - den typiska användningen av fel: Request är korrekt när du ställer villkoren i Var
Det andra felet är också associerad med förlust av data, och är inte alltid omedelbart uppenbart.
Låt oss gå tillbaka till frågan när vi lämnade via anslutningar mottagna data för alla människor och deras befintliga fastigheter. Kom ihåg följande med vänster gå sql exempel:
FRÅN Peoples VÄNSTER GÅ Realty_peoples ON Peoples.id = Realty_peoples.id_peoples; |
Antag att vi vill klargöra begäran och inte mata ut data där typen av lagen - "egendom". Om vi helt enkelt lägga till, med vänster gå sql, ett exempel på följande villkor:
...
Där typ <> "egendom" |
Vi kommer att förlora data om personer som inte har någon egendom, eftersom nollvärdet Null inte jämförs enligt följande:
fråga1 | ||||||
id | L_name | F_name | Middle_name | födelsedag | id_realty | Typ |
5 | Gerasimovsky | hoppas | P. | 1992/03/14 | 4 | gemensamma delar |
6 | Gerasimovsky | Oleg | Albertovich | 1985/01/29 | 4 | gemensamma delar |
7 | Sukhanovskaya | jury | A. | 1976/09/25 | 3 | Total gemensamt ägande |
8 | Sukhanovskaya | julia | Y. | 01.10.2001 | 3 | Total gemensamt ägande |
För att förhindra att fel uppstår av denna anledning är det bäst att ställa in valet tillstånd omedelbart efter anslutning. Vi föreslår att överväga följande med vänster gå sql exempel.
SELECT Peoples. * Realty_peoples.id_realty, Realty_peoples.type FRÅN Peoples VÄNSTER GÅ Realty_peoples ON (Peoples.id = Realty_peoples.id_peoples OCH typ <> "egendom") |
Resultatet kommer att vara följande:
fråga1 | ||||||
id | L_name | F_name | Middle_name | födelsedag | id_realty | Typ |
1 | Ivanova | Daria | B. | 2000/07/16 | ||
2 | Pugin | Vladislav | Nikolaevich | 1986/01/29 | ||
3 | Evgenin | Alexander | Federovich | 1964/04/30 | ||
4 | Annina | älskar | P. | 1989/12/31 | ||
5 | Gerasimovsky | hoppas | P. | 1992/03/14 | 4 | gemensamma delar |
6 | Gerasimovsky | Oleg | Albertovich | 1985/01/29 | 4 | gemensamma delar |
7 | Sukhanovskaya | jury | A. | 1976/09/25 | 3 | Total gemensamt ägande |
8 | Sukhanovskaya | julia | Y. | 01.10.2001 | 3 | Total gemensamt ägande |
Således genom att följa det enkla till vänster ansluta sql exempel fick vi en lista över alla människor, flytta ytterligare en av dessa egenskaper i en aktie / gemensamt ägande.
Som en slutsats jag vill återigen betona att ett prov av någon information från databasen måste tas på ett ansvarsfullt sätt. Många nyanser öppnas framför oss med vänster gå sql enkelt exempel förklaringen varav en - innan du börjar skriva ens grundläggande fråga, måste du noga för att förstå vad vi vill komma i slutet. Lycka till!
Similar articles
Trending Now