Opis korištenja spojeva u programu Microsoft Query


Sažetak


U ovom se članku raspravlja o korištenju spojeva u programu Microsoft Query. Spoj je metoda koju možete koristiti u bazama podataka da biste definirali i ilustrirali odnose između dviju tablica. U programu Microsoft Query možete stvarati i manipulirati različitim vrstama spojeva. U mnogim se slučajevima Microsoft Query pridružuje tablicama u upitu. Spojevi su predstavljeni linijama koje povezuju tablice u oknu tablice. Teme obuhvaćene ovim člankom obuhvaćaju sljedeće:
   What Is a Join?   Inner Joins   SQL Statements   Outer Joins   Subtract Joins   Full Outer Joins   Self Joins   Equi-Joins   Natural Joins   Cartesian Products 

Dodatne informacije


Što je spoj?

Spoj je veza između dviju tablica u kojima su dvije tablice spojene prema polju koje im je zajedničko, stvaranjem nove virtualne tablice (koja se može spremiti kao stvarna tablica). Primjerice, uz sljedeće dvije tablice:
      Color_Table:   Join_Field   Color_Field   1            Red   2            Blue   3            Green      Pattern_Table:   Join_Field   Pattern_Field   2            Striped   3            Checkered   4            Polka-Dot 
jednostavan spoj nalikuje sljedećem:
   Join_Field   Color_Field      Pattern_Field   2            Blue             Striped   3            Green            Checkered 
Tablica rezultat sadrži samo zapise 2 i 3 u polju Join_Field jer su oni jedini zapisi koji postoje u Color_Table i Pattern_Table. Praktični primjer spoja jest popis distributera proizvoda i proizvođača. Tablica proizvodi i tablica dobavljači mogu se priključiti na polje ID proizvoda.

Unutrašnji spoj

Spoj u prethodnom primjeru, nazvan unutrašnji spoj, najjednostavniji je tip spoja. Obično želite koristiti samo djelić polja u tablicama. Primjerice, u stvarnom unutarnjem pridruživanjem, kao što je ono gore, možda želite isključiti Join_Field, tako da spoj izgleda ovako:
   Color_Field      Pattern_Field   Blue             Striped   Green            Checkered 
U programu Microsoft Query unutarnji spojevi zadana su vrsta spoja (Dodatne informacije potražite u članku stranica 105 u priručniku za korisnike "Microsoftova upita", verziji 1,0).

SQL naredba

Strukturirani upit jezika (SQL) SELECT izjava predstavlja vrstu makronaredbe koju možete koristiti prilikom stvaranja spoja. Imajte na čemu da se SQL razlikuje od drugih jezika makronaredbi programa Microsoft Excel (Visual Basic for Applications i jezik makronaredbi programa Excel 4,0). SQL nije potrebno razumjeti da biste mogli jednostavno stvarati spojeve u programu Microsoft Query. Svaki spoj sadrži naredbu SELECT koja je povezana s njom. Možete pogledati naredbu SELECT za bilo koji spoj u programu Microsoft Query tako da kliknete "SQL" na alatnoj traci. Kao i u programu Microsoft Excel za snimač makronaredbi, možete koristiti Query za snimanje naredbe SELECT. Za razliku od snimač makronaredbi u programu Microsoft Excel, snimač naredbe SELECT uvijek je uključen i nije ga moguće isključiti. Evo kako naredba SELECT može izgledati u programu Microsoft Query za iznad unutarnjeg spoja:
   SELECT Color_Table.Color_Field, Pattern_Table.Pattern_Field   FROM `c:\database`.Color_Table, `c:\database`.Pattern_Table   WHERE Color_Table.Join_Field = Pattern_Table.Join_Field 
Imajte na čemu koristiti naziv baze podataka ' C:\baze podataka ' čije je. mdb proširenje naziva datoteke za bazu podataka programa Microsoft Access, koja može imati više tablica u jednoj datoteci. U nekim drugim bazama podataka, kao što su d-Base, paradoks i FoxPro, svaka tablica mora imati vlastitu datoteku. U tim slučajevima SQL sintaksa može izgledati suvišno jer je naziv tablice uvijek isti kao naziv datoteke bez nastavka. SQL sintaksa varira među upitima motora; primjerice, u programu Microsoft Access upit iz gornjeg primjera nalikuje sljedećem:
   SELECT Color_Table.[Color_Field],   Pattern_Table.Pattern_Field   FROM Pattern_Table INNER JOIN Color_Table ON   Pattern_Table.[Join_Field] = Color_Table.[Join_Field]; 
Put do tablice ne koristi se u programu Microsoft Access jer je tablica u datoteci programa Microsoft Access. mdb. Čak i ako je vanjska tablica priložena i korištena u upitu, naredba Microsoft Access SQL ne prikazuje put do vanjske tablice.

Vanjski spoj

Druga vrsta spoja naziva se vanjskim pridruživanjem. Uz vanjski spoj dobivate sve zapise iz jedne tablice i samo one zapise iz druge tablice koje imaju podudarne vrijednosti iz prve tablice. To može ostaviti neke stavke polja prazne ili "null". Da bi se bilo koja dva tablica pridružila, postoje dva moguća vanjskog spoja, "lijeva vanjska veza" i "desni vanjski spoj" (tzv. jer obično pregledavate tablice jedan uz drugi). Pomoću prethodnih dvaju tablica u primjeru sljedeći je jedan od dvaju mogućih vanjskih spojeva:
   Join_Field   Color_Field   Pattern_Field   1            Red           (NULL)   2            Blue          Striped   3            Green         Checkered 
Drugi mogući spoj jest sljedeći:
   Join_Field   Color_Field   Pattern_Field   2            Blue          Striped   3            Green         Checkered   4            (NULL)         Polka-Dot 
Pažnja: u programu Join ne prikazuje se riječ "NULL" kada pogledate podatke. koristite ključnu riječ "NULL" kada radite s priključnim spojevima. U programu Microsoft Query obje vrste vanjskog spoja mogu se jednostavno stvoriti pomoću miša (Dodatne informacije o ovom postupku potražite u članku stranica 112 u priručniku za korisnike "Microsoftova upita", verzija 1,0). Slijedi način na koji SQL iskaz može potražiti drugi primjer vanjskog spoja:
   SELECT Color_Table.Color_Field, Pattern_Table.Pattern_Field   FROM {oj `c:\database`.Color_Table LEFT OUTER JOIN   `c:\database`.Pattern_Table ON Color_Table.Join_Field =   Pattern_Table.Join_Field} 
Da biste stvorili praktičan primjer vanjskog spoja, napravite popis proizvoda tvrtke s prodajnim brojkama za proizvode koji su bili prodane, ali ne i bez proizvoda koji nisu bili prodane. Da biste to učinili, upotrijebite polje ID proizvoda da biste se pridružili tablici Proizvodi i tablici prodaja.

Uključivanje u oduzimanje

Treća vrsta spoja jest oduzimanje pridruživanja. Oduzimanje pridruživanja obrnuto je od vanjskog spoja; sadrži samo one zapise u jednoj tablici koji se ne podudaraju ni s jednim zapisom u drugoj tablici. Kao i vanjski spojevi, postoje dva moguća oduzimanje spojeva za sve dvije tablice kojima se želite pridružiti. Međutim, oni se obično ne nazivaju "lijevom oduzmom" Join "ili" Right oduzimanje Join ". Oduzimanje spoja obično se vraća iz samo jedne tablice jer po definiciji polja druge tablice vraćaju samo NULL vrijednosti. Sljedeći je jedan od mogućih oduzimanja pridruživanja:
   join_Field   Color_Field   1            Red 
a ovdje je drugi:
   Join_Field   Pattern_Field   4            Polka-Dot 
U programu Microsoft Query stvara se oduzimanja spoja prema prvom stvaranju vanjskog spoja, a zatim pomoću kriterija "IS NULL" na odgovarajućem polju (Pattern_Field u prvom primjeru iznad; Color_Field u drugom primjeru) da biste isključili zapise koji se podudaraju između tablica. Slijedi način na koji SQL naredba može potražiti prvi oduzimanje u nastavku:
   SELECT Color_Table.Join_Field, Color_Table.Color_Field   FROM {oj `c:\database`.Color_Table LEFT OUTER JOIN   `c:\database`.Pattern_Table ON Color_Table.Join_Field =   Pattern_Table.Join_Field}   WHERE (Pattern_Table.Pattern_Field Is Null) 
Da biste stvorili praktični primjer oduzimanja spoja, popis korisnika koji nisu nedavno naručili. Da biste to učinili, upotrijebite polje ID narudžbe za uključivanje u tablicu Kupci i tablicu Narudžbe.

Cijeli vanjski spoj

Četvrta vrsta spoja jest cijeli vanjski spoj. Cijeli vanjski spoj kombinacija je vanjskog spoja s pohvalnim uključenim oduzmom. Cijeli vanjski spoj obuhvaća sve zapise iz obje tablice i spaja one zapise koji su česti između dviju tablica. Slijedi cijeli vanjski spoj:
   Join_Field   Color_Field   Pattern_Field   1            Red           (NULL)   2            Blue          Striped   3            Green         Checkered   4            (NULL)        Polka-Dot 
U programu Microsoft Query stvara se cijeli vanjski spoj tako da umetnete operator unije u vlastitu crtu između naredbe SELECT vanjskog spoja i izvatkom SELECT (vidi gore). Da biste stvorili puni vanjski spoj u programu Microsoft Query, upotrijebite sljedeće korake da biste stvorili odgovarajuću SQL rečenicu:
  1. Stvorite vanjski spoj, a zatim na izborniku Datoteka kliknite novo, a zatim stvorite podtrani spoj.
  2. Kopirajte SQL.
  3. Prebacite se na vanjski spoj, upišite Word UNION u vlastitu crtu ispod SQL naredbe vanjskog spoja, zalijepite SQL-a u odjeljku oduzimanje teksta ispod programa Word, a zatim zatvaranje prozora oduzimanje spoja.
Napomena Rezultati sljedeće tablice nedostaju vrijednost Join_Field "4" jer je zapis koji je vrijednost Join_Field jednako 4 u tablici Pattern_Table. Ispod SQL rečenice dones't odaberite polje Pattern_Table. John_Field.
   Join_Field   Color_Field   Pattern_Field                (NULL)        Polka-Dot   1            Red           (NULL)   2            Blue          Striped   3            Green         Checkered 
Evo kako SQL može potražiti iznad cijelog vanjskog spoja (naredbe koje se nalaze ispod operatora UNION):
   SELECT Color_Table.Join_Field, Color_Table.Color_Field,   Pattern_Table.Pattern_Field   FROM {oj `C:\database`.Pattern_Table LEFT OUTER JOIN   `C:\database`.Color_Table ON Color_Table.Join_Field =   Pattern_Table.Join_Field}   UNION   SELECT Color_Table.Join_Field, Color_Table.Color_Field,   Pattern_Table.Pattern_Field   FROM {oj `C:\database`.Color_Table LEFT OUTER JOIN   `C:\database`.Pattern_Table ON Color_Table.Join_Field =   Pattern_Table.Join_Field}   WHERE (Color_Table.Color_Field Is Null)  or(Pattern_Table.Pattern_Field Is Null) 
Da biste stvorili praktičan primjer potpunog vanjskog spoja, spojite preklapajuće popise kupaca koje koriste razni odjeli, uključujući brojeve faksa (koji su bili samo na prvom popisu) i internetski nazivi e-pošte (koji se nalaze samo na drugom popisu). Svaki odjel mogao bi nastaviti koristiti djelomični popis dok je na raspolaganju potpun, pridruženi popis. Mogli bi se priključiti na polje ID klijenta.

Samospajanje

Peti vrsta spoja je samostalno spajanje. Samospajanje jest veza u kojoj je polje u tablici podudarno s drugim poljem u kopiji iste tablice. Pomoću ove tablice s primjerom:
      Table_Three   Employee_ID   Employee_Name   Reports_To   1             Bob             3   2             Sue             (NULL)   3             Jim             2   4             Jane            3 
i kopiju, kako slijedi:
      Table_Three_01   Employee_ID   Employee_Name   Reports_To   1             Bob             3   2             Sue             (NULL)   3             Jim             2   4             Jane            3 
Samostalno spajanje može se koristiti za stvaranje popisa imena zaposlenika s nazivima nadređenog. Employee_ID u Table_Three pridružuju se Reports_To u Table_Three_01. Sljedeći način na koji može izgledati na prvom mjestu:
   Employee_Name   Employee_Name   Bob             Jim   Sue             (NULL)   Jim             Sue   Jane            Jim 
Međutim, budući da je zbunjujuće imati isti naziv polja za oba polja, promijenite jedan od naziva polja, na sljedeći način:
   Employee_Name   Supervisor   Bob             Jim   Sue             (NULL)   Jim             Sue   Jane            Jim 
Slijedi način na koji SQL može potražiti gore navedeni samospajanje:
   SELECT table_three.Employee_Name,   table_three_01.Employee_Name 'Supervisor'   FROM `c:\database`.table_three, `c:\database`.table_three_01   WHERE table_three.Employee_ID = table_three_01.Reports_To 
Kada vratite podatke u Microsoft Excel, nema koristi za preimenovanje polja u programu Microsoft Query. To je istina jer Microsoft Excel koristi izvorni naziv polja. Dodatne informacije o tom problemu potražite u sljedećem članku iz Microsoftove baze znanja: 121551 : XL5: polje umjesto naziva stupca u servisu MSQUERY vraćeno u Excel Microsoft Excel Macro mora promijeniti naziv stupca svaki puta kada se vraćeni podaci osvježe (osim ako ne vratite podatke u zaokretnoj tablici, u kojem slučaju može stvoriti i zadržati prilagođeni naziv polja).

Pridruživanje Equi-u i naturi

Gotovo svi spojevi, uključujući sve primjere koji su do sada dani, Equi-pridružuje se i prirodne spojeve. Značenja ovih pojmova nisu važna prosječnom korisniku programa Microsoft Query, no sljedeća dva odlomka pokušavaju objasniti uvjete za one koji su možda znatiželjni. Uključivanje Equi-Join predstavlja spoj u kojem se zapisi dohvaćaju na temelju toga jesu li polja spoja podudarne vrijednosti u obje tablice. To se možda čini kao definicija spoja, ali nije. Primjer nejednakih spoja jest spoj u kojem se zapisi u prvoj tablici spajaju s tim zapisima u drugoj tablici u kojoj je pridruženo polje u prvoj tablici veće od (umjesto jednakih) spojenog polja u drugoj tablici (ili manje od, ili bilo što drugo osim jednakih). Naravno, time se vraća više zapisa nego što je ravnopravnih. Prirodni spoj jedan je u kojem se vraća samo jedno od dviju tablica u pridruženim poljima. Budući da su ta dva polja po definiciji identična u Equi-Join-u, suvišno je uključivati oboje. Da biste imali nejednaki spoj, važno je uvrstiti i ta polja. Dakle, Equi-pridružuje i prirodni spojevi idu zajedno. Želite da se Equi-pridružuje (koji opisuje najviše spojeva) bude prirodan spoj tako da vratite samo jedno od pridruženih polja; No, ako ikad koristite nejednaki spoj, možete ga i učiniti neprirodnim pridruživanjem tako da vratite oba spojena polja. Postoje i druge vrste spojeva. Cijeli spektar spojeva nedavno je definiran u programu 1992, a taj je standard poznat kao SQL-92. Neki spojevi nisu važni korisnicima programa Microsoft Excel jer te spojeve olakšava obavljanje zadataka u programu Microsoft Excel.

Kartezijski proizvod

Pokušaj vraćanja podataka iz dviju ili više tablica bez spojeva stvara ono što se zove "Kartezijski proizvod". Kartezijski proizvod definira se kao sve moguće kombinacije redaka u svim tablicama. Budite sigurni da imate spojeve prije nego što pokušate vratiti podatke, jer Kartezijski proizvod u tablicama s brojnim zapisima i/ili na mnogim tablicama može potrajati nekoliko sati. Sljedeći je Kartezijski proizvod koji se koristi u dva primjera tablice. Imajte na sebi da je ova tablica samo tri zapisa puta 3 zapisa, što daje ukupno 9 zapisa. No, zamislite, ako je umjesto toga, tablica iznosila 100 zapisa puta 1.000 bilježi puta 10.000 zapisa; zatim će tablica sadržavati 1.000.000.000 zapisa!
   Join_Field   Join_Field   Color_Field   Pattern_Field   1            2            Red           Striped   1            3            Red           Checkered   1            4            Red           Polka-Dot   2            2            Blue          Striped   2            3            Blue          Checkered   2            4            Blue          Polka-Dot   3            2            Green         Striped   3            3            Green         Checkered   3            4            Green         Polka-Dot 
Ponekad neki korisnici žele koristiti Kartezijski proizvod; Međutim, većina korisnika koji ih dobiju to učiniti slučajno, a često su zbunjeni njima. Budući da većina korisnika isključuju većina polja u sklopu spoja, pravi Kartezijski proizvod može jednostavno izgledati kao zbunjujuće:
   Color_Field   Red   Red   Red   Blue   Blue   Blue   Green   Green   Green 
Ako se zapisi 100 dodaju u Pattern_Table, taj će upit imati 309 zapisa (103 bilježi svaki od crvenih, plavih i zelenih). Kartesian proizvodi imaju relativno jednostavne odabrane naredbe. Slijedi način na koji SQL može potražiti gore navedeni Kartezijski proizvod:
   SELECT Color_Table.Color_Field, Pattern_Table.Pattern_Field   FROM `c:\database`.Color_Table, `c:\database`.Pattern_Table 
Praktični primjer Kartezijskog proizvoda bio bi stvaranje popisa svih mogućih kombinacija mogućnosti na proizvodu robe, s ukupnim zbrojevima cijena za svaku kombinaciju.

Reference


Microsoftov upit "korisnički vodič", verzija 1,0, Pages 101-114, 123-131 sljedeće dvije knjige nisu uključene u Microsoftove proizvode i ne proizvodi ga Microsoft. Proizvodi drugih proizvođača koji se ovdje razmatraju proizvedeni su od proizvođača neovisnih korisnika Microsofta; Ne dajemo nikakva jamstva, implicirana ili na neki drugi način, što se tiče performansi ili pouzdanosti tih proizvoda. "Razumijevanje novog SQL: kompletan vodič", Morgan Kaufmann Publishers, Inc, 1993. "SQL za Smarties Joe Celko: Napredno SQL programiranje," Morgan Kaufmann Publishers, Inc., 1995. Dodatne informacije o stvaranju spojeva u programu Microsoft Query odaberite gumb Pretraži u odjeljku pomoć i upišite:
   joins, overview