ComputersProgrammering

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:

  1. Juist gekozen voor de volgorde van de tabellen waarvoor gegevens verloren was.
  2. 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

 

 

 

 

Newest

Copyright © 2018 nl.delachieve.com. Theme powered by WordPress.