RekenaarsProgrammering

Links te sluit (SQL) - 'n voorbeeld, die gedetailleerde beskrywing, gebruik van die fout

In enige werklike relasionele databasis, is alle inligting versprei op 'n aparte tafel. Baie van die tafels is soos uiteengesit in die kommunikasie skema met mekaar. Maar met die hulp van SQL navrae is dit heel moontlik om 'n verband tussen die data, nie in die kring ingesluit het. Dit word gedoen deur die uitvoering van 'n aan te sluit verbinding, wat jou toelaat om 'n verhouding tussen 'n aantal tafels bou, en selfs oënskynlik uiteenlopende inligting te koppel.

In hierdie artikel sal spesifiek praat oor die linker buitenste aansluit. Voordat jy na die beskrywing van hierdie tipe van verband, voeg in 'n paar databasis tabelle.

Voorbereiding van die nodige tabelle

Byvoorbeeld, in ons databasis, daar is inligting oor mense en hul eiendom. Opsomming gebaseer op die drie tabelle: Peoples (mense), Realty (Real Estate), Realty_peoples (tafel verhoudings, mense wat uit watter eiendom behoort aan). Aanvaar die volgende data gestoor in die tafels van die mense:

mense

id

L_name

F_name

Middle_name

verjaarsdag

1

Ivanova

Daria

B.

2000/07/16

2

Pugin

Vladislav

Nikolaevich

1986/01/29

3

Evgenin

Alexander

Federovich

1964/04/30

4

Annina

lief

P.

1989/12/31

5

Gerasimovsky

hoop

P.

1992/03/14

6

Gerasimovsky

Oleg

Albertovich

1985/01/29

7

Sukhanovskaya

jurie

A.

1976/09/25

8

Sukhanovskaya

Julia

Y.

2001/01/10

Real Estate:

Realty

id

adres

1

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

2

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

3

streek Arkhangelsk, Severodvinsk, st. Lenin, d. 134, q. 85

4

streek Arkhangelsk, Novodvinsk, ul. Proletarshaya, d. 16, q. 137

5

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

Betrekkinge mense - eiendom:

Realty_peoples

id_peoples

id_realty

tipe

7

3

Totale gesamentlike eienaarskap

8

3

Totale gesamentlike eienaarskap

3

5

eiendom

7

1

eiendom

5

4

gemeenskaplike dele

6

4

gemeenskaplike dele

Links te sluit (SQL) - Beskrywing

Links verbinding het die volgende opdrag:

Table_A LEFT JOIN table_B [{OP gesegde} | {GEBRUIK spisok_ met tolbtsov}]

En skematies soos volg:

En hierdie uitdrukking is vertaal as "Alles kies, sonder uitsondering, lyn van Tabel A en Tabel B om net die ooreenstemmende rye van die gesegde vertoon. As die tafel is gevind in die string tafel vir pare A, dan vul die gevolglike kolomme Null - waardes ".

Die meeste dikwels, wanneer die linkerkant verband is aangedui op, met behulp van slegs gebruik word wanneer die kolom name, wat beplan om die verband te maak is dieselfde.

Links te sluit - voorbeelde van gebruik

Met die aansluiting van die linker kan ons sien, al die mense uit die lys as daar Peoples eiendom. Om dit te doen in die linker sluit sql query voorbeeld:

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

UIT Peoples LEFT JOIN Realty_peoples OP Peoples.id = Realty_peoples.id_peoples;

Met die volgende resultate:

Query1

id

L_name

F_name

Middle_name

verjaarsdag

id_realty

tipe

1

Ivanova

Daria

B.

2000/07/16

2

Pugin

Vladislav

Nikolaevich

1986/01/29

3

Evgenin

Alexander

Federovich

1964/04/30

5

eiendom

4

Annina

lief

P.

1989/12/31

5

Gerasimovsky

hoop

P.

1992/03/14

4

gemeenskaplike dele

6

Gerasimovsky

Oleg

Albertovich

1985/01/29

4

gemeenskaplike dele

7

Sukhanovskaya

jurie

A.

1976/09/25

1

eiendom

7

Sukhanovskaya

jurie

A.

1976/09/25

3

Totale gesamentlike eienaarskap

8

Sukhanovskaya

Julia

Y.

2001/01/10

3

Totale gesamentlike eienaarskap

Soos ons sien, Ivanova Darya Pugin Vladislav en Anninoy Lyubovi Geen geregistreer Real Estate regte.

En wat sou ons ontvang het, met behulp van 'n innerlike sluit Inner aan te sluit? Soos u weet, dit sluit nie-ooreenstemmende rye, so drie uit ons finale monster sal net laat val:

Query1

id

L_name

F_name

Middle_name

verjaarsdag

id_realty

tipe

3

Evgenin

Alexander

Federovich

1964/04/30

5

eiendom

5

Gerasimovsky

hoop

P.

1992/03/14

4

gemeenskaplike dele

6

Gerasimovsky

Oleg

Albertovich

1985/01/29

4

gemeenskaplike dele

7

Sukhanovskaya

jurie

A.

1976/09/25

1

eiendom

7

Sukhanovskaya

jurie

A.

1976/09/25

3

Totale gesamentlike eienaarskap

8

Sukhanovskaya

Julia

Y.

2001/01/10

3

Totale gesamentlike eienaarskap

Dit blyk dat die tweede weergawe ook aan die voorwaardes van ons probleem. Maar, as ons begin om te heg aan 'n ander, en 'n ander tafel, drie mense uit die gevolg reeds onherroeplik verby. Daarom, in die praktyk, wanneer die kombinasie van verskeie tafels veel meer dikwels gebruik links en regs verband as Inner aan te sluit.

Sal voortgaan om te kyk na links te sluit sql voorbeelde. Heg 'n tafel met adresse van ons huise:

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

UIT Peoples

LEFT JOIN Realty_peoples OP Peoples.id = Realty_peoples.id_peoples

LEFT JOIN Realty OP Realty.id = Realty_peoples.id_realty

Nou kry ons nie net 'n soort van die reg, maar ook die adres van Real Estate:

Query1

id

L_name

F_name

Middle_name

verjaarsdag

id_realty

tipe

adres

1

Ivanova

Daria

B.

2000/07/16

2

Pugin

Vladislav

Nikolaevich

1986/01/29

3

Evgenin

Alexander

Federovich

1964/04/30

5

eiendom

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

4

Annina

lief

P.

1989/12/31

5

Gerasimovsky

hoop

P.

1992/03/14

4

gemeenskaplike dele

streek Arkhangelsk, Novodvinsk, ul. Proletarshaya, d. 16, q. 137

6

Gerasimovsky

Oleg

Albertovich

1985/01/29

4

gemeenskaplike dele

streek Arkhangelsk, Novodvinsk, ul. Proletarshaya, d. 16, q. 137

7

Sukhanovskaya

jurie

A.

1976/09/25

3

Totale gesamentlike eienaarskap

streek Arkhangelsk, Severodvinsk, st. Lenin, d. 134, q. 85

7

Sukhanovskaya

jurie

A.

1976/09/25

1

eiendom

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

8

Sukhanovskaya

Julia

Y.

2001/01/10

3

Totale gesamentlike eienaarskap

streek Arkhangelsk, Severodvinsk, st. Lenin, d. 134, q. 85

Links te sluit - die tipiese gebruik van fout: ongeldig prosedure tafel

Basiese foute gemaak aan die linkerkant buitenste sluit tafels, twee:

  1. Korrek gekies om die einde van tafels waarvoor data verlore gegaan het.
  2. Waar foute by die gebruik van 'n navraag met aansluit tafels.

Oorweeg eerste fout. Voor die besluit van 'n probleem moet duidelik verstaan dat dit wat ons wil op die ou end te kry. In hierdie voorbeeld hierbo, het ons elke enkele een van die mense, maar die inligting oor die voorwerp onder die nommer 2, waarvan die eienaar is nie gevind nie heeltemal verlore.

As ons die tafels verskuif in 'n navraag in sommige plekke, en sal begin met «... Van Realty links aansluit Peoples ...» enige een eiendom, sou ons nie verloor het, sal jy nie vertel oor mense.

Maar moenie bang links verband wees, oorskakel na volle eksterne, wat ingesluit is in die resultate en die wat ooreenstem, en nie die bypassende lyne.

Na alles, die volume van die monster is dikwels baie groot, en ekstra data is eintlik nutteloos. Die belangrikste ding - om uit te vind wat jy wil om 'n resultaat te kry: van al die mense met 'n lys van hul beskikbare eiendom of die hele eiendom lys met hul eienaars (indien enige).

Links te sluit - die tipiese gebruik van fout: Versoek korrek is by die opstel van die voorwaardes in die Waar

Die tweede fout word ook geassosieer met die verlies van data, en is nie altyd onmiddellik duidelik.

Kom ons gaan terug na die vraag wanneer ons verlaat via verbindings ontvang data vir al die mense en hul bestaande eiendom. Onthou die volgende met links aansluit sql voorbeeld:

UIT Peoples LEFT JOIN Realty_peoples OP Peoples.id = Realty_peoples.id_peoples;

Gestel ons wil die versoek te verduidelik en nie uitset die data, waar die tipe wet - "Eiendom". As ons net voeg, met behulp van links aansluit sql, 'n voorbeeld van die volgende voorwaarde:

...

Waar tipe <> "Eiendom"

Ons sal verloor die data op mense wat geen eiendom, omdat die nul waarde Null nie vergelyk word soos volg:

Query1

id

L_name

F_name

Middle_name

verjaarsdag

id_realty

tipe

5

Gerasimovsky

hoop

P.

1992/03/14

4

gemeenskaplike dele

6

Gerasimovsky

Oleg

Albertovich

1985/01/29

4

gemeenskaplike dele

7

Sukhanovskaya

jurie

A.

1976/09/25

3

Totale gesamentlike eienaarskap

8

Sukhanovskaya

Julia

Y.

2001/01/10

3

Totale gesamentlike eienaarskap

Om foute te voorkom vir hierdie rede, is dit die beste om die seleksie toestand onmiddellik daarop verband. Ons stel voor om te oorweeg die volgende met die linker sluit sql voorbeeld.

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

UIT Peoples

LEFT JOIN Realty_peoples OP (Peoples.id = Realty_peoples.id_peoples EN tipe <> "Eiendom")

Die resultaat is soos volg:

Query1

id

L_name

F_name

Middle_name

verjaarsdag

id_realty

tipe

1

Ivanova

Daria

B.

2000/07/16

2

Pugin

Vladislav

Nikolaevich

1986/01/29

3

Evgenin

Alexander

Federovich

1964/04/30

4

Annina

lief

P.

1989/12/31

5

Gerasimovsky

hoop

P.

1992/03/14

4

gemeenskaplike dele

6

Gerasimovsky

Oleg

Albertovich

1985/01/29

4

gemeenskaplike dele

7

Sukhanovskaya

jurie

A.

1976/09/25

3

Totale gesamentlike eienaarskap

8

Sukhanovskaya

Julia

Y.

2001/01/10

3

Totale gesamentlike eienaarskap

Dus, deur die eenvoudige na links te sluit sql byvoorbeeld het ons 'n lys van al die mense, verder beweeg, een van hierdie eienskappe in 'n aandele / gesamentlike eienaarskap.

As 'n gevolgtrekking wil ek weer eens dat 'n monster van enige inligting van die databasis moet verantwoordelik geneem word beklemtoon. Baie nuanses geopen in die voorkant van ons met links aansluit sql eenvoudige voorbeeld, die verduideliking van watter een - voor jy begin om selfs basiese navraag te skryf, jy moet versigtig om te verstaan wat ons wil op die ou end te kry. Sterkte!

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

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