Computere, Programmering
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:
- Korrekt valgt rækkefølgen af tabeller for hvilke data gik tabt.
- 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