Datamaskiner, Programmering
Venstre delta (SQL) - et eksempel, detaljert beskrivelse, bruk av feil
I noen reell relasjonsdatabase, er all informasjon fordelt på en egen tabell. Mange av tabellene er angitt i kommunikasjonen ordningen med hverandre. Men med hjelp av SQL-spørringer er det fullt mulig å sette en kobling mellom data, ikke innebygd i kretsen. Dette gjøres ved å utføre en bli-tilkobling, som lar deg bygge en relasjon mellom en rekke tabeller, og med koble tilsynelatende uforenlige informasjon.
Denne artikkelen vil snakke spesifikt om venstre ytre delta. Før du går videre til beskrivelsen av denne type tilkobling, legge inn noen databasetabeller.
Utarbeidelse av nødvendige tabeller
For eksempel, i vår database, er det informasjon om personer og deres eiendom. Oppsummering basert på de tre tabeller: Peoples (mennesker), Realty (eiendom), Realty_peoples (tabellen relasjoner, mennesker som fra hva eiendommen tilhører). Anta følgende data lagret i tabellene i folket:
Peoples | ||||
id | L_NAME | F_name | Middle_name | bursdag |
1 | Ivanova | Daria |
B. | 07/16/2000 |
2 | Pugin | Vladislav | Nikolaevich | 29.01.1986 |
3 | Evgenin | Alexander | Federovich | 04/30/1964 |
4 | Annina | elsker | P. | 31.12.1989 |
5 | Gerasimovsky | håper | P. | 14.03.1992 |
6 | Gerasimovsky | Oleg | Albertovich | 01/29/1985 |
7 | Sukhanovskaya | jury | A. | 09/25/1976 |
8 | Sukhanovskaya | Julia | Y. | 01.10.2001 |
Fast eiendom:
Realty | |
id | adresse |
1 | Arkhangelsk, ul. Voronin, d. 7, kv.6 |
2 | Arkhangelsk, ul. Severodvinskaya, d. 84, kv. 9 BR. 5 |
3 | Arkhangelsk region, Severodvinsk, st. Lenin, d. 134, kv. 85 |
4 | Arkhangelsk region, Novodvinsk, ul. Proletarshaya, d. 16, kv. 137 |
5 | Arkhangelsk, pl. Terekhina, d. 89, kv. 13 |
Relasjoner mennesker - Eiendom:
Realty_peoples | ||
id_peoples | id_realty | typen |
7 | 3 | Total felles eierskap |
8 | 3 | Total felles eierskap |
3 | 5 | eiendom |
7 | 1 | eiendom |
5 | 4 | felles deler |
6 | 4 | felles deler |
Venstre delta (SQL) - Beskrivelse
Venstre forbindelse har følgende syntaks:
Table_A VENSTRE BLI table_B [{ON predikat} | {BRUK spisok_ med tolbtsov}] |
Og skjematisk som følger:
Og dette uttrykket er oversatt som "Select All, uten unntak, linje i tabell A og tabell B for å vise bare de samsvarende rader av predikatet. Hvis tabellen ble funnet i strengen tabellen for par A, og deretter fylle de resulterende kolonnene Null - verdier".
Oftest når forlot forbindelse indikeres videre, ved hjelp brukes bare når kolonnenavnene, som er planlagt å gjøre tilkoblingen er de samme.
Venstre delta - eksempler på bruk
Ved innkobling av venstre kan vi se, alle menneskene fra listen hvis det Peoples eiendom. For å gjøre dette i venstre bli sql spørring eksempel:
VELG Peoples. *, Realty_peoples.id_realty, Realty_peoples.type Fra folks VENSTRE BLI Realty_peoples ON Peoples.id = Realty_peoples.id_peoples; |
Med følgende resultater:
spørring1 | ||||||
id | L_NAME | F_name | Middle_name | bursdag | id_realty | typen |
1 | Ivanova | Daria | B. | 07/16/2000 | ||
2 | Pugin | Vladislav | Nikolaevich | 29.01.1986 | ||
3 | Evgenin | Alexander | Federovich | 04/30/1964 | 5 | eiendom |
4 | Annina | elsker | P. | 31.12.1989 | ||
5 | Gerasimovsky | håper | P. | 14.03.1992 | 4 | felles deler |
6 | Gerasimovsky | Oleg | Albertovich | 01/29/1985 | 4 | felles deler |
7 | Sukhanovskaya | jury | A. | 09/25/1976 | 1 | eiendom |
7 | Sukhanovskaya | jury | A. | 09/25/1976 | 3 | Total felles eierskap |
8 | Sukhanovskaya | Julia | Y. | 01.10.2001 | 3 | Total felles eierskap |
Som vi ser, Ivanova Darya Pugin Vladislav og Anninoy Lyubovi Ingen registrerte eiendomsrettigheter.
Og hva ville vi ha fått, ved hjelp av en indre delta Indre bli med? Som du vet, utelukker det ikke-samsvarende rader, så tre av våre endelige prøven ville bare bli droppet:
spørring1 | ||||||
id | L_NAME | F_name | Middle_name | bursdag | id_realty | typen |
3 | Evgenin | Alexander | Federovich | 04/30/1964 | 5 | eiendom |
5 | Gerasimovsky | håper | P. | 14.03.1992 | 4 | felles deler |
6 | Gerasimovsky | Oleg | Albertovich | 01/29/1985 | 4 | felles deler |
7 | Sukhanovskaya | jury | A. | 09/25/1976 | 1 | eiendom |
7 | Sukhanovskaya | jury | A. | 09/25/1976 | 3 | Total felles eierskap |
8 | Sukhanovskaya | Julia | Y. | 01.10.2001 | 3 | Total felles eierskap |
Det synes som den andre versjonen også oppfyller betingelsene for vårt problem. Men hvis vi begynner å legge på en annen, og en annen tabell, tre personer fra resultatet allerede ugjenkallelig borte. Derfor, i praksis, ved kombinasjon av flere bord mye oftere brukt høyre og en venstre enn Indre delta.
Vil fortsette å se til venstre bli sql eksempler. Fest en tabell med adresser til husene våre:
VELG Peoples. *, Realty_peoples.id_realty, Realty_peoples.type, Realty.address Fra Peoples VENSTRE BLI Realty_peoples PÅ Peoples.id = Realty_peoples.id_peoples VENSTRE BLI Realty PÅ Realty.id = Realty_peoples.id_realty |
Nå får vi ikke bare en slags lov, men også adressen til fast eiendom:
spørring1 | |||||||
id | L_NAME | F_name | Middle_name | bursdag | id_realty | typen | adresse |
1 | Ivanova | Daria | B. | 07/16/2000 | |||
2 | Pugin | Vladislav | Nikolaevich | 29.01.1986 | |||
3 | Evgenin | Alexander | Federovich | 04/30/1964 | 5 | eiendom | Arkhangelsk, pl. Terekhina, d. 89, kv. 13 |
4 | Annina | elsker | P. | 31.12.1989 | |||
5 | Gerasimovsky | håper | P. | 14.03.1992 | 4 | felles deler | Arkhangelsk region, Novodvinsk, ul. Proletarshaya, d. 16, kv. 137 |
6 | Gerasimovsky | Oleg | Albertovich | 01/29/1985 | 4 | felles deler | Arkhangelsk region, Novodvinsk, ul. Proletarshaya, d. 16, kv. 137 |
7 | Sukhanovskaya | jury | A. | 09/25/1976 | 3 | Total felles eierskap | Arkhangelsk region, Severodvinsk, st. Lenin, d. 134, kv. 85 |
7 | Sukhanovskaya | jury | A. | 09/25/1976 | 1 | eiendom | Arkhangelsk, ul. Voronin, d. 7, kv.6 |
8 | Sukhanovskaya | Julia | Y. | 01.10.2001 | 3 | Total felles eierskap |
Arkhangelsk region, Severodvinsk, st. Lenin, d. 134, kv. 85 |
Venstre delta - typisk bruk av feil: ugyldig prosedyren bordet
Grunnleggende feil som blir gjort på venstre ytre delta bord, to:
- Riktig valgt rekkefølgen på tabeller for hvilke data som gikk tapt.
- Hvor feil når du bruker en spørring med bli med tabeller.
Tenk først feil. Før avgjørelsen av eventuelle problemer bør gjøres klart at det vi ønsker å få til slutt. I dette eksempelet ovenfor, vi tok hver eneste en av folket, men helt mistet informasjon om objektet under nummer to, der eieren ble ikke funnet.
Hvis vi flyttet tabellene i en spørring i noen steder, og vil starte med «... Fra Realty igjen bli Peoples ...» enhver eiendom, ville vi ikke ha tapt, vil du ikke fortelle om mennesker.
Men ikke vær redd for venstre, kan du bytte til full ekstern, som er inkludert i resultatene og matchende, og ikke samsvarende linjer.
Tross alt, volumet av prøven er ofte svært store, og ekstra data er faktisk ubrukelig. Det viktigste - å finne ut hva du ønsker å få et resultat: av alle mennesker med en liste over sine tilgjengelige eiendom eller hele eiendommen listen med sine eiere (hvis noen).
Venstre delta - typisk bruk av feil: Request er riktig når du setter betingelsene i Hvor
Den andre feilen er også forbundet med tap av data, og er ikke alltid umiddelbart åpenbare.
La oss gå tilbake til spørsmålet når vi igjen via tilkoblinger mottatt data for alle mennesker og deres eksisterende eiendom. Husk følgende med venstre delta sql eksempel:
Fra folks VENSTRE BLI Realty_peoples ON Peoples.id = Realty_peoples.id_peoples; |
Anta at vi ønsker å avklare forespørselen og ikke kan sende dataene, hvor den type lov - "Property". Hvis vi bare legge til, med Venstre delta sql, et eksempel på følgende vilkår:
...
For type <> "eiendom" |
vi vil miste dataene på folk som ikke har eiendom, fordi nullverdi Null ikke sammenlignes som følger:
spørring1 | ||||||
id | L_NAME | F_name | Middle_name | bursdag | id_realty | typen |
5 | Gerasimovsky | håper | P. | 14.03.1992 | 4 | felles deler |
6 | Gerasimovsky | Oleg | Albertovich | 01/29/1985 | 4 | felles deler |
7 | Sukhanovskaya | jury | A. | 09/25/1976 | 3 | Total felles eierskap |
8 | Sukhanovskaya | Julia | Y. | 01.10.2001 | 3 | Total felles eierskap |
For å hindre at feil oppstår på grunn av dette, er det best å angi valget tilstand umiddelbart etter tilkobling. Vi foreslår å vurdere følgende med venstre delta sql eksempel.
VELG Peoples. *, Realty_peoples.id_realty, Realty_peoples.type Fra Peoples VENSTRE BLI Realty_peoples ON (Peoples.id = Realty_peoples.id_peoples og skriv <> "Property") |
Resultatet vil være som følger:
spørring1 | ||||||
id | L_NAME | F_name | Middle_name | bursdag | id_realty | typen |
1 | Ivanova | Daria | B. | 07/16/2000 | ||
2 | Pugin | Vladislav | Nikolaevich | 29.01.1986 | ||
3 | Evgenin | Alexander | Federovich | 04/30/1964 | ||
4 | Annina | elsker | P. | 31.12.1989 | ||
5 | Gerasimovsky | håper | P. | 14.03.1992 | 4 | felles deler |
6 | Gerasimovsky | Oleg | Albertovich | 01/29/1985 | 4 | felles deler |
7 | Sukhanovskaya | jury | A. | 09/25/1976 | 3 | Total felles eierskap |
8 | Sukhanovskaya | Julia | Y. | 01.10.2001 | 3 | Total felles eierskap |
Dermed ved å følge de enkle til venstre bli sql eksempel, fikk vi en liste over alle mennesker, flytte videre, en av disse egenskapene i en egenkapital / sameie.
Som en konklusjon vil jeg gjerne understreke igjen at en prøve av informasjon fra databasen må tas ansvarlig. Mange nyanser åpnet foran oss med venstre bli sql enkelt eksempel, den forklaring som en - før du begynner å skrive selv grunnleggende spørsmål, må du nøye for å forstå hva vi ønsker å få til slutt. Lykke til!
Similar articles
Trending Now