Rekenaars, Programmering
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:
- Korrek gekies om die einde van tafels waarvoor data verlore gegaan het.
- 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