Computers, Programmering
LEFT JOIN (SQL) - een voorbeeld, de gedetailleerde beschrijving, het gebruik van de fout
In een echte relationele database, wordt alle informatie die wordt verspreid op een aparte tafel. Veel van de tafels zijn uiteengezet in de mededeling van de regeling met elkaar. Echter, met behulp van SQL-query's is het heel goed mogelijk om een verband tussen de gegevens, niet in het circuit ingebed te zetten. Dit wordt gedaan door het uitvoeren van een join-verbinding, waarmee u een relatie tussen een aantal tabellen op te bouwen, en zelfs schijnbaar ongelijksoortige informatie aan te sluiten.
Dit artikel zal specifiek hebben over de linker outer join. Alvorens over te gaan tot de beschrijving van dit type verbinding, toe te voegen in een database tabellen.
Voorbereiding van de nodige tabellen
Bijvoorbeeld, in onze database, is er informatie over mensen en hun vastgoed. Samenvatting op basis van de drie tabellen: Peoples (people), Realty (onroerend goed), Realty_peoples (tabel relaties, mensen die van wat onroerend goed behoort). Uitgaande van de volgende gegevens die zijn opgeslagen in de tabellen van de mensen:
Peoples | ||||
id | L_name | f_name | Middle_name | verjaardag |
1 | Ivanova | Daria |
B. | 2000/07/16 |
2 | Pugin | Vladislav | Nikolajevitsj | 1986/01/29 |
3 | Evgenin | Alexander | Federovich | 1964/04/30 |
4 | Annina | liefde | P. | 31.12.1989 |
5 | Gerasimovsky | hopen | 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 |
Onroerend goed:
onroerend goed | |
id | adres |
1 | Arkhangelsk, ul. Voronin, d. 7, kv.6 |
2 | Arkhangelsk, ul. Severodvinskaya, d. 84, q. 9 BR. 5 |
3 | regio Archangelsk, Severodvinsk, st. Lenin, d. 134, q. 85 |
4 | regio arkhangelsk, Novodvinsk, ul. Proletarshaya, d. 16, q. 137 |
5 | Arkhangelsk, pl. Terekhina, d. 89, q. 13 |
Relations mensen - eigenschap:
Realty_peoples | ||
id_peoples | id_realty | type |
7 | 3 | Totaal onverdeeldheid |
8 | 3 | Totaal onverdeeldheid |
3 | 5 | eigenschap |
7 | 1 | eigenschap |
5 | 4 | gemeenschappelijke delen |
6 | 4 | gemeenschappelijke delen |
LEFT JOIN (SQL) - Beschrijving
Links verbinding heeft de volgende syntax:
Table A LEFT JOIN Table B [{ON predikaat} | {GEBRUIK spisok_ met tolbtsov}] |
En schematisch als volgt:
En deze uitdrukking wordt vertaald als "Alles selecteren, zonder uitzondering, lijn van de tabellen A en B om alleen de matching rijen van het predikaat weer te geven. Als de tabel werd gevonden in de string tabel paren A en vult de resulterende kolommen Null - waarden".
Meestal, wanneer de links-verbinding wordt aangegeven aan te zetten, wordt alleen gebruikt wanneer de kolom namen, die is gepland om de verbinding te maken zijn hetzelfde.
LEFT JOIN - voorbeelden van het gebruik
Met de aansluiting van de linker kunnen we zien, alle mensen uit de lijst als er Peoples eigendom. Om dit te doen in het linker join sql-query voorbeeld:
SELECT Peoples. *, Realty_peoples.id_realty, Realty_peoples.type FROM Peoples LEFT JOIN Realty_peoples ON Peoples.id = Realty_peoples.id_peoples; |
Met de volgende resultaten:
query1 | ||||||
id | L_name | f_name | Middle_name | verjaardag | id_realty | type |
1 | Ivanova | Daria | B. | 2000/07/16 | ||
2 | Pugin | Vladislav | Nikolajevitsj | 1986/01/29 | ||
3 | Evgenin | Alexander | Federovich | 1964/04/30 | 5 | eigenschap |
4 | Annina | liefde | P. | 31.12.1989 | ||
5 | Gerasimovsky | hopen | P. | 1992/03/14 | 4 | gemeenschappelijke delen |
6 | Gerasimovsky | Oleg | Albertovich | 1985/01/29 | 4 | gemeenschappelijke delen |
7 | Sukhanovskaya | jury | A. | 1976/09/25 | 1 | eigenschap |
7 | Sukhanovskaya | jury | A. | 1976/09/25 | 3 | Totaal onverdeeldheid |
8 | Sukhanovskaya | Julia | Y. | 01.10.2001 | 3 | Totaal onverdeeldheid |
Zoals we zien, Ivanova Darya Pugin Vladislav en Anninoy Lyubovi Geen geregistreerde vastgoed rechten.
En wat zouden we hebben ontvangen, met behulp van een inner join Binnenste join? Zoals u weet, sluit niet-matching rijen, dus drie van onze laatste steekproef zou gewoon laten vallen:
query1 | ||||||
id | L_name | f_name | Middle_name | verjaardag | id_realty | type |
3 | Evgenin | Alexander | Federovich | 1964/04/30 | 5 | eigenschap |
5 | Gerasimovsky | hopen | P. | 1992/03/14 | 4 | gemeenschappelijke delen |
6 | Gerasimovsky | Oleg | Albertovich | 1985/01/29 | 4 | gemeenschappelijke delen |
7 | Sukhanovskaya | jury | A. | 1976/09/25 | 1 | eigenschap |
7 | Sukhanovskaya | jury | A. | 1976/09/25 | 3 | Totaal onverdeeldheid |
8 | Sukhanovskaya | Julia | Y. | 01.10.2001 | 3 | Totaal onverdeeldheid |
Het lijkt erop dat de tweede versie voldoet ook aan de voorwaarden van ons probleem. Echter, als we beginnen te bevestigen op een andere, en een andere tafel, drie mensen uit het resultaat al onherroepelijk verdwenen. Daarom is in de praktijk, bij het samenvoegen van meerdere tabellen veel vaker gebruikt Left en Right-aansluiting dan Inner sluiten.
Zal blijven kijken naar links te sluiten sql voorbeelden. Bevestig een lijst met adressen van onze huizen:
SELECT Peoples. *, Realty_peoples.id_realty, Realty_peoples.type, Realty.address FROM Peoples LEFT JOIN Realty_peoples ON Peoples.id = Realty_peoples.id_peoples LEFT JOIN Realty ON Realty.id = Realty_peoples.id_realty |
Nu krijgen we niet alleen een soort van het recht, maar ook het adres van vastgoed:
query1 | |||||||
id | L_name | f_name | Middle_name | verjaardag | id_realty | type | adres |
1 | Ivanova | Daria | B. | 2000/07/16 | |||
2 | Pugin | Vladislav | Nikolajevitsj | 1986/01/29 | |||
3 | Evgenin | Alexander | Federovich | 1964/04/30 | 5 | eigenschap | Arkhangelsk, pl. Terekhina, d. 89, q. 13 |
4 | Annina | liefde | P. | 31.12.1989 | |||
5 | Gerasimovsky | hopen | P. | 1992/03/14 | 4 | gemeenschappelijke delen | regio arkhangelsk, Novodvinsk, ul. Proletarshaya, d. 16, q. 137 |
6 | Gerasimovsky | Oleg | Albertovich | 1985/01/29 | 4 | gemeenschappelijke delen | regio arkhangelsk, Novodvinsk, ul. Proletarshaya, d. 16, q. 137 |
7 | Sukhanovskaya | jury | A. | 1976/09/25 | 3 | Totaal onverdeeldheid | regio Archangelsk, Severodvinsk, st. Lenin, d. 134, q. 85 |
7 | Sukhanovskaya | jury | A. | 1976/09/25 | 1 | eigenschap | Arkhangelsk, ul. Voronin, d. 7, kv.6 |
8 | Sukhanovskaya | Julia | Y. | 01.10.2001 | 3 | Totaal onverdeeldheid |
regio Archangelsk, Severodvinsk, st. Lenin, d. 134, q. 85 |
LEFT JOIN - de typische gebruik van fout: ongeldige procedure table
Basis fouten gemaakt aan de linker outer join tafels, twee:
- Juist gekozen voor de volgorde van de tabellen waarvoor gegevens verloren was.
- Waar fouten bij het gebruik van een query met join tafels.
Beschouw eerste fout. Voorafgaand aan de beslissing van een probleem zou moeten duidelijk zijn dat wat we willen in het einde. In dit voorbeeld hierboven, namen we elk één van de mensen, maar de informatie over het object onder het nummer 2, waarvan de eigenaar is niet gevonden volledig verloren.
Als we de tafels verplaatst in een query op sommige plaatsen, en zou beginnen met «... Van Realty LEFT JOIN Peoples ...» één eigenschap, zouden we niet hebben verloren, zal je niet vertellen over mensen.
Maar niet bang links verbinding zijn, schakelen naar buiten, die is opgenomen in de resultaten en de overeenkomende en niet overeenkomende lijnen.
Immers, het volume van het monster is vaak erg groot, en extra data is eigenlijk nutteloos. Het belangrijkste ding - om erachter te komen wat je wilt om een resultaat te krijgen: van alle mensen met een lijst van hun beschikbare eigendom of het hele pand lijst met hun eigenaren (indien aanwezig).
LEFT JOIN - de typische gebruik van fout: Request correct is bij het instellen van de voorwaarden in de Where
De tweede fout wordt ook geassocieerd met verlies van gegevens, en niet altijd onmiddellijk duidelijk.
Laten we teruggaan naar de query toen we vertrokken via verbindingen ontvangen gegevens voor alle mensen en hun bestaande woning. Denk aan de volgende met LEFT JOIN sql voorbeeld:
FROM Peoples LEFT JOIN Realty_peoples ON Peoples.id = Realty_peoples.id_peoples; |
Stel dat we het verzoek te verduidelijken en niet de output van de data, waarbij de aard van de wet - "Bezit". Als we gewoon voegen, met behulp van LEFT JOIN sql, een voorbeeld van de volgende voorwaarde:
...
Wanneer type <> "Property" |
we zullen verliezen de gegevens van mensen die geen woning, omdat de null-waarde Null niet wordt vergeleken als volgt:
query1 | ||||||
id | L_name | f_name | Middle_name | verjaardag | id_realty | type |
5 | Gerasimovsky | hopen | P. | 1992/03/14 | 4 | gemeenschappelijke delen |
6 | Gerasimovsky | Oleg | Albertovich | 1985/01/29 | 4 | gemeenschappelijke delen |
7 | Sukhanovskaya | jury | A. | 1976/09/25 | 3 | Totaal onverdeeldheid |
8 | Sukhanovskaya | Julia | Y. | 01.10.2001 | 3 | Totaal onverdeeldheid |
Om fouten te voorkomen om deze reden, is het het beste om de selectie toestand onmiddellijk na verbinding. Wij stellen voor om te overwegen de volgende met de linker toetreden sql voorbeeld.
SELECT Peoples. *, Realty_peoples.id_realty, Realty_peoples.type FROM Peoples LEFT JOIN Realty_peoples ON (Peoples.id = Realty_peoples.id_peoples EN type kunnen <> "Bezit") |
Het resultaat is als volgt:
query1 | ||||||
id | L_name | f_name | Middle_name | verjaardag | id_realty | type |
1 | Ivanova | Daria | B. | 2000/07/16 | ||
2 | Pugin | Vladislav | Nikolajevitsj | 1986/01/29 | ||
3 | Evgenin | Alexander | Federovich | 1964/04/30 | ||
4 | Annina | liefde | P. | 31.12.1989 | ||
5 | Gerasimovsky | hopen | P. | 1992/03/14 | 4 | gemeenschappelijke delen |
6 | Gerasimovsky | Oleg | Albertovich | 1985/01/29 | 4 | gemeenschappelijke delen |
7 | Sukhanovskaya | jury | A. | 1976/09/25 | 3 | Totaal onverdeeldheid |
8 | Sukhanovskaya | Julia | Y. | 01.10.2001 | 3 | Totaal onverdeeldheid |
Dus, door het volgen van de eenvoudige naar links te sluiten sql bijvoorbeeld, kregen we een lijst van alle mensen, verdere stappen te zetten, een van deze eigenschappen in een eigen vermogen / mede-eigendom.
Ter afsluiting wil ik nogmaals benadrukken dat een steekproef van de informatie uit de database nodig hebben om op verantwoorde wijze worden genomen te benadrukken. Veel nuances geopend voor ons met LEFT JOIN sql eenvoudig voorbeeld, de uitleg waarvan één - voordat je begint te zelfs elementaire vraag te schrijven, moet je zorgvuldig te begrijpen wat we willen in het einde. Good luck!
Similar articles
Trending Now