DatorerProgrammering

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å:

  1. Valts korrekt ordning tabeller för vilka uppgifter var förlorat.
  2. 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

 

 

 

 

Newest

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