ComputereProgrammering

Venstre slutte (SQL) - et eksempel, den detaljerede beskrivelse, brug af fejlen

I nogen reel relationsdatabase, er alle oplysninger fordelt på et separat bord. Mange af tabellerne er angivet i kommunikationen ordningen med hinanden. Men med hjælp fra SQL-forespørgsler er det meget muligt at sætte et link mellem de data, ikke indlejret i kredsløbet. Dette gøres ved at udføre en join-forbindelse, som giver dig mulighed for at opbygge et forhold mellem en række tabeller, og endda forbinde tilsyneladende uensartede oplysninger.

Denne artikel vil tale specifikt om venstre ydre join. Inden vi går videre til beskrivelsen af denne type forbindelse, tilføje i nogle databasetabeller.

Forberedelse af de nødvendige tabeller

For eksempel i vores database, der er oplysninger om mennesker og deres ejendom. Resumé baseret på de tre tabeller: Peoples (mennesker), Realty (fast ejendom), Realty_peoples (tabel relationer, mennesker, der fra, hvad ejendommen tilhører). Antag følgende data, der er lagret i tabellerne på de mennesker:

Peoples

id

l_name

F_name

Middle_name

Fødselsdag

1

Ivanova

Daria

B.

2000/07/16

2

Pugin

Vladislav

Nikolaevich

1986/01/29

3

EvgeniN

Alexander

Federovich

1964/04/30

4

Annina

elsker

P.

1989/12/31

5

Gerasimovsky

håber

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

Fast ejendom:

Realty

id

adresse

1

Arkhangelsk, ul. Voronin, d. 7, kv.6

2

Arkhangelsk, ul. Severodvinskaya, d. 84, q. 9 BR. 5

3

Arkhangelsk-regionen, Severodvinsk, st. Lenin, d. 134, q. 85

4

Arkhangelsk-regionen, Novodvinsk Str. Proletarshaya, d. 16, q. 137

5

Arkhangelsk, pl. Terekhina, d. 89, q. 13

Relations folk - ejendom:

Realty_peoples

id_peoples

id_realty

typen

7

3

Samlet fælles ejerskab

8

3

Samlet fælles ejerskab

3

5

ejendom

7

1

ejendom

5

4

fælles dele

6

4

fælles dele

Venstre slutte (SQL) - Beskrivelse

Venstre forbindelse har følgende syntaks:

TABEL_A LEFT JOIN TABEL_B [{PÅ prædikat} | {BRUG spisok_ med tolbtsov}]

Og skematisk som følger:

Og dette udtryk er oversat som "Vælg alle, uden undtagelse, linje i tabel A og tabel B for kun at vise de matchende rækker af prædikatet. Hvis tabellen blev fundet i strengen tabel for par A, så fylder de resulterende kolonner Null - værdier".

Oftest, når den venstre forbindelse angives videre ved hjælp anvendes kun, når kolonnenavne, som er planlagt til at gøre forbindelsen er de samme.

Venstre slutte - eksempler på brug

Med tilslutningen af venstre kan vi se, alle de mennesker fra listen, hvis der Peoples ejendom. For at gøre dette i den venstre slutte sql query eksempel:

SELECT Peoples. *, Realty_peoples.id_realty, Realty_peoples.type

FRA Peoples LEFT JOIN Realty_peoples PÅ Peoples.id = Realty_peoples.id_peoples;

Med følgende resultater:

forespørgsel1

id

l_name

F_name

Middle_name

Fødselsdag

id_realty

typen

1

Ivanova

Daria

B.

2000/07/16

2

Pugin

Vladislav

Nikolaevich

1986/01/29

3

EvgeniN

Alexander

Federovich

1964/04/30

5

ejendom

4

Annina

elsker

P.

1989/12/31

5

Gerasimovsky

håber

P.

1992/03/14

4

fælles dele

6

Gerasimovsky

Oleg

Albertovich

1985/01/29

4

fælles dele

7

Sukhanovskaya

Jury

A.

1976/09/25

1

ejendom

7

Sukhanovskaya

Jury

A.

1976/09/25

3

Samlet fælles ejerskab

8

Sukhanovskaya

Julia

Y.

01.10.2001

3

Samlet fælles ejerskab

Som vi ser, Ivanova Darya Pugin Vladislav og Anninoy Lyubovi Ingen registrerede fast ejendom rettigheder.

Og hvad ville vi har modtaget, ved hjælp af en indre slutte Indre deltage? Som du ved, det udelukker ikke-matchende rækker, så tre ud af vores endelige prøve ville simpelthen blive droppet:

forespørgsel1

id

l_name

F_name

Middle_name

Fødselsdag

id_realty

typen

3

EvgeniN

Alexander

Federovich

1964/04/30

5

ejendom

5

Gerasimovsky

håber

P.

1992/03/14

4

fælles dele

6

Gerasimovsky

Oleg

Albertovich

1985/01/29

4

fælles dele

7

Sukhanovskaya

Jury

A.

1976/09/25

1

ejendom

7

Sukhanovskaya

Jury

A.

1976/09/25

3

Samlet fælles ejerskab

8

Sukhanovskaya

Julia

Y.

01.10.2001

3

Samlet fælles ejerskab

Det ser ud til, at den anden version opfylder også betingelserne for vores problem. Men hvis vi begynder at vedhæfte på en anden, og en anden tabel, tre folk fra resultatet allerede uigenkaldeligt forsvundet. Derfor i praksis, når man kombinerer flere borde langt oftere brugt Venstre og højre-tilslutning end Indre deltage.

Vil fortsætte med at se til venstre slutte sql eksempler. Vedhæft et bord med adresser på vores huse:

SELECT Peoples. *, Realty_peoples.id_realty, Realty_peoples.type, Realty.address

FRA Peoples

LEFT JOIN Realty_peoples PÅ Peoples.id = Realty_peoples.id_peoples

LEFT JOIN Realty PÅ Realty.id = Realty_peoples.id_realty

Nu får vi ikke kun en slags lov, men også adressen på fast ejendom:

forespørgsel1

id

l_name

F_name

Middle_name

Fødselsdag

id_realty

typen

adresse

1

Ivanova

Daria

B.

2000/07/16

2

Pugin

Vladislav

Nikolaevich

1986/01/29

3

EvgeniN

Alexander

Federovich

1964/04/30

5

ejendom

Arkhangelsk, pl. Terekhina, d. 89, q. 13

4

Annina

elsker

P.

1989/12/31

5

Gerasimovsky

håber

P.

1992/03/14

4

fælles dele

Arkhangelsk-regionen, Novodvinsk, ul. Proletarshaya, d. 16, q. 137

6

Gerasimovsky

Oleg

Albertovich

1985/01/29

4

fælles dele

Arkhangelsk-regionen, Novodvinsk, ul. Proletarshaya, d. 16, q. 137

7

Sukhanovskaya

Jury

A.

1976/09/25

3

Samlet fælles ejerskab

Arkhangelsk-regionen, Severodvinsk, st. Lenina. 134, q. 85

7

Sukhanovskaya

Jury

A.

1976/09/25

1

ejendom

Arkhangelsk, ul. Voronin, d. 7, kv.6

8

Sukhanovskaya

Julia

Y.

01.10.2001

3

Samlet fælles ejerskab

Arkhangelsk-regionen, Severodvinsk, st. Lenin, d. 134, q. 85

Venstre deltage - den typiske brug af: ugyldig procedure bord

Grundlæggende fejl begået ved venstre ydre join borde, to:

  1. Korrekt valgt rækkefølgen af tabeller for hvilke data gik tabt.
  2. Hvor fejl ved brug af en forespørgsel med slutte tabeller.

Overvej første fejl. Forud for afgørelsen af ethvert problem skal forstås tydeligt, at det, vi ønsker at komme i slutningen. I dette eksempel ovenfor, tog vi hver eneste af de mennesker, men helt tabt de oplysninger om objektet under nummer 2, hvis ejer blev ikke fundet.

Hvis vi flyttede bordene i en forespørgsel i nogle steder, og ville starte med «... Fra Realty forlod slutte Peoples ...» nogen ejendom, ville vi ikke have tabt, vil du ikke fortælle om mennesker.

Men du behøver ikke være bange for den venstre tilslutning, skifte til fuld ekstern, som er inkluderet i resultaterne og den matchende, og ikke de matchende linjer.

Efter alt, mængden af prøven er ofte meget store, og ekstra data er faktisk ubrugelig. De vigtigste ting - at finde ud af, hvad du ønsker at få et resultat: af alle mennesker med en liste over deres rådighed ejendom eller hele ejendommen listen med deres ejere (hvis nogen).

Venstre deltage - den typiske brug af fejl: Request er korrekt, når fastlæggelsen af betingelserne i Hvor

Den anden fejl er også forbundet med tab af data, og er ikke altid umiddelbart indlysende.

Lad os gå tilbage til forespørgslen, da vi forlod via forbindelser modtagne data for alle de mennesker og deres eksisterende ejendom. Husk følgende med venstre slutte sql eksempel:

FRA Peoples LEFT JOIN Realty_peoples PÅ Peoples.id = Realty_peoples.id_peoples;

Antag, at vi ønsker at tydeliggøre anmodningen og ikke udsende data, hvor den type lov - "Property". Hvis vi blot tilføje, ved hjælp af venstre deltage sql, et eksempel på den følgende betingelse:

...

Hvor typen <> "Property"

vi vil miste data på folk, der ikke har nogen ejendom, fordi den null-værdi Null ikke sammenlignes på følgende måde:

forespørgsel1

id

l_name

F_name

Middle_name

Fødselsdag

id_realty

typen

5

Gerasimovsky

håber

P.

1992/03/14

4

fælles dele

6

Gerasimovsky

Oleg

Albertovich

1985/01/29

4

fælles dele

7

Sukhanovskaya

Jury

A.

1976/09/25

3

Samlet fælles ejerskab

8

Sukhanovskaya

Julia

Y.

01.10.2001

3

Samlet fælles ejerskab

For at forhindre fejl i at opstå af denne grund, er det bedst at indstille valg tilstand umiddelbart efter tilslutning. Vi foreslår at overveje følgende med venstre slutte sql eksempel.

SELECT Peoples. *, Realty_peoples.id_realty, Realty_peoples.type

FRA Peoples

LEFT JOIN Realty_peoples ON (Peoples.id = Realty_peoples.id_peoples og type <> "Property")

Resultatet vil være som følger:

forespørgsel1

id

l_name

F_name

Middle_name

Fødselsdag

id_realty

typen

1

Ivanova

Daria

B.

2000/07/16

2

Pugin

Vladislav

Nikolaevich

1986/01/29

3

EvgeniN

Alexander

Federovich

1964/04/30

4

Annina

elsker

P.

1989/12/31

5

Gerasimovsky

håber

P.

1992/03/14

4

fælles dele

6

Gerasimovsky

Oleg

Albertovich

1985/01/29

4

fælles dele

7

Sukhanovskaya

Jury

A.

1976/09/25

3

Samlet fælles ejerskab

8

Sukhanovskaya

Julia

Y.

01.10.2001

3

Samlet fælles ejerskab

Således ved at følge det enkle til venstre slutte sql eksempel modtog vi en liste over alle de mennesker, der flytter videre, en af disse egenskaber i en egenkapital / fælles ejerskab.

Som afslutning vil jeg gerne endnu en gang understrege, at en prøve af alle oplysninger fra databasen skal tages ansvarligt. Mange nuancer åbnet foran os med venstre slutte sql simpelt eksempel, den forklaring, som en - før du begynder at skrive selv grundlæggende forespørgsel, skal du omhyggeligt for at forstå, hvad vi ønsker at komme i slutningen. Held og lykke!

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

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