Csatlakozás (SQL)

A stabil verziót 2022. május 11-én nézték meg . Ellenőrizetlen változtatások vannak a sablonokban vagy a .

A JOIN  az SQL nyelv operátora , amely a relációs algebra csatlakozási műveletének megvalósítása . A SELECT , UPDATE és DELETE utasítások FROM záradékában található .

Az összekapcsolási műveletet, más bináris műveletekhez hasonlóan , úgy tervezték, hogy adatokat gyűjtsön le két táblából, és ezeket az adatokat egy eredményhalmazba foglalja. Az összekapcsolási művelet megkülönböztető jellemzői a következők:

Annak meghatározása, hogy mely forráskarakterláncok jelenjenek meg az eredményben, és milyen kombinációkban, az összekapcsolási művelet típusától és az explicit módon meghatározott összekapcsolási feltételtől függ . Az összekapcsolási feltétel, vagyis a forrástáblázatok egymáshoz illesztésének feltétele egy logikai kifejezés ( predikátum ).

Ha nem két, hanem több táblát kell összekapcsolni, akkor az összekapcsolási műveletet többször (egymás után) alkalmazzuk.

Az SQL JOIN művelet a relációs algebra összekapcsolási műveletének csak bizonyos mértékig valósul meg, mivel a relációs adatmodellben a relációkon történik az összekapcsolás, amelyek halmazok , az SQL-ben pedig a táblákon, amelyek multihalmazok . A műveletek eredményei általában is eltérőek: a relációs algebrában az összekapcsolás eredménye egy relációt (halmazt), az SQL-ben pedig egy táblát (multiset) ad.

Az operátor leírása

1. táblázatból { BELSŐ | { BALRA | JOBBRA | TELJES } KÜLSŐ | CROSS } JOIN Table2 { ON < feltétel > | HASZNÁLAT ( mező_neve [,... n ]) }

A legtöbb DBMS- ben a LEFT, szavak megadásakor a szó elhagyható. Ez a szó a legtöbb DBMS-ben is elhagyható. RIGHTFULLOUTERINNER

Általános esetben a DBMS ellenőrzi a feltétel ( predikátum ) feltételét a kapcsolat létrehozásakor . Ha a táblákat összekötő oszlopok neve megegyezik, akkor helyette ONhasználhatja a USING. A CROSS JOINfeltétel nincs megadva.

A keresztillesztéshez (derékszögű termék) CROSS JOINnéhány SQL-megvalósítás a vessző operátort ( , ) használja:

1. táblázatból , 2. táblázatból

A JOIN operátor típusai

A további magyarázatokhoz a következő táblázatokat használjuk:

Város (városok)
ID Név
egy Moszkva
2 Szentpétervár
3 Kazan
Személy (emberek)
Név CityId
András egy
Leonyid 2
Szergej egy
Gregory négy

BELSŐ CSATLAKOZÁS

A belső összekapcsolás INNER JOIN operátor két táblát kapcsol össze. Az operátor tábláinak sorrendje nem fontos, mert az operátor kommutatív .

Az eredménytábla fejléce az egyesített táblák fejléceinek uniója ( összefűzése ).

Az eredmény törzse logikusan a következőképpen alakul. Az egyik tábla minden sorát összehasonlítja a második táblázat minden sorával, majd ellenőrzi az összekapcsolási feltételt az eredményül kapott „összekapcsolt” sorra (az összekapcsolási predikátum kiszámítása). Ha a feltétel igaz, a megfelelő „csatlakozott” sor hozzáadódik az eredménytáblázathoz.

A leírt műveleti algoritmus szigorúan logikus, vagyis csak azt az eredményt magyarázza meg, amelyet a művelet végrehajtása során meg kell szerezni, de nem írja elő, hogy egy adott DBMS a megadott módon hajtsa végre a kapcsolatot. Az összekapcsolási művelet megvalósításának többféle módja van, például egymásba ágyazott hurkok összekapcsolása ( eng.  inner loops join ), hash join ( eng.  hash join ), egyesítése join ( eng.  merge join ). Az egyetlen követelmény az, hogy bármely implementáció logikailag ugyanazt az eredményt adja, mint a leírt algoritmus alkalmazásakor.

KIVÁLASZTÁS * FROM Személy BELSŐ CSATLAKOZÁS Város ON Személy . CityId = város . ID

Eredmény:

Személy.Név Person.CityId Város.Id Város Név
András egy egy Moszkva
Leonyid 2 2 Szentpétervár
Szergej egy egy Moszkva

KÜLSŐ CSATLAKOZÁS

Két tábla összekapcsolása, amely szükségszerűen tartalmazza az egyik vagy mindkét tábla összes sorát.

LEFT OUTER JOIN

A bal külső összekapcsolási LEFT OUTER JOIN operátor két táblát kapcsol össze. Az operátorok táblázatainak sorrendje azért fontos, mert az operátor nem kommutatív .

Az eredménytábla fejléce az egyesített táblák fejléceinek uniója ( összefűzése ).

Az eredmény törzse logikusan a következőképpen alakul. A bal és a jobb oldali táblákat csatlakoztassa a p predikátum (feltétel) .

  1. Az eredmény tartalmazza a bal és jobb oldali táblák belső összekapcsolását ( INNER JOIN) a p predikátummal .
  2. Ezután a bal oldali tábla azon sorai, amelyek az 1. lépésben nem szerepeltek a belső összekapcsolásban, hozzáadódnak az eredményhez, ilyen soroknál a jobb oldali táblázatnak megfelelő oszlopok értékekkel töltődnek fel NULL.
KIVÁLASZTÁS * FROM személytől -- Bal oldali asztal BAL KÜLSŐ CSATLAKOZÁS Város -- Jobb asztal BE Személy . CityId = város . ID

Eredmény:

Személy.Név Person.CityId Város.Id Város Név
András egy egy Moszkva
Leonyid 2 2 Szentpétervár
Szergej egy egy Moszkva
Gregory négy NULLA NULLA
RIGHT OUTER JOIN

A jobb külső csatlakozási RIGHT OUTER JOIN operátor két táblát kapcsol össze. Az operátorok táblázatainak sorrendje azért fontos, mert az operátor nem kommutatív .

Az eredménytábla fejléce az egyesített táblák fejléceinek uniója ( összefűzése ).

Az eredmény törzse logikusan a következőképpen alakul. A bal és a jobb oldali táblákat csatlakoztassa a p predikátum (feltétel) .

  1. Az eredmény tartalmazza a bal és jobb oldali táblák belső összekapcsolását ( INNER JOIN) a p predikátummal .
  2. Ezután a jobb oldali tábla azon sorai, amelyek az 1. lépésben a belső összekapcsolásban nem szerepeltek, hozzáadódnak az eredményhez, ilyen soroknál a bal oldali táblázatnak megfelelő oszlopok értékekkel töltődnek fel NULL.
SELECT * FROM személy -- Bal asztal JOBB KÜLSŐ JOIN Város -- Jobb asztal BE személy . CityId = város . ID

Eredmény:

Személy.Név Person.CityId Város.Id Város Név
András egy egy Moszkva
Szergej egy egy Moszkva
Leonyid 2 2 Szentpétervár
NULLA NULLA 3 Kazan
TELJES KÜLSŐ JOIN

A teljes külső összekapcsolás FULL OUTER JOIN operátor két táblát kapcsol össze. Az operátor tábláinak sorrendje nem fontos, mert az operátor kommutatív .

Az eredménytábla fejléce az egyesített táblák fejléceinek uniója ( összefűzése ).

Az eredmény törzse logikusan a következőképpen alakul. Az első és a második táblát a p predikátum (feltétel) csatlakoztassa . Az "első" és a "második" szavak itt nem jelzik a kifejezés írási sorrendjét (ami lényegtelen), hanem csak a táblázatok megkülönböztetésére szolgálnak.

  1. INNER JOINAz eredmény tartalmazza az első és a második tábla belső összekapcsolását ( ) a p predikátummal .
  2. Az eredmény tartalmazza az első tábla azon sorait, amelyek az 1. lépésben nem szerepeltek a belső összeillesztésben. Az ilyen soroknál a második táblázatnak megfelelő oszlopok értékekkel vannak feltöltve NULL.
  3. A második tábla azon sorai, amelyek az 1. lépésben a belső összekapcsolásban nem szerepeltek, hozzáadódnak az eredményhez, ilyen soroknál az első táblázatnak megfelelő oszlopok értékekkel vannak feltöltve NULL.
KIVÁLASZTÁS * FROM személytől TELJES KÜLSŐ CSATLAKOZÁS Város ON Személy . CityId = város . ID

Eredmény:

Személy.Név Person.CityId Város.Id Város Név
András egy egy Moszkva
Szergej egy egy Moszkva
Leonyid 2 2 Szentpétervár
NULLA NULLA 3 Kazan
Gregory négy NULLA NULLA

CROSS JOIN

A keresztillesztés operátor vagy derékszögű szorzat CROSS JOIN két táblát kapcsol össze. Az operátor tábláinak sorrendje nem fontos, mert az operátor kommutatív .

Az eredménytábla fejléce az egyesített táblák fejléceinek uniója ( összefűzése ).

Az eredmény törzse logikusan a következőképpen alakul. Az egyik tábla minden sora a második táblázat minden sorához kapcsolódik, ezáltal megadva a két tábla sorainak összes lehetséges kombinációját.

KIVÁLASZTÁS * FROM személytől CROSS JOIN City

vagy

SELECT * FROM Személy , Város

Eredmény:

Személy.Név Person.CityId Város.Id Város Név
András egy egy Moszkva
András egy 2 Szentpétervár
András egy 3 Kazan
Leonyid 2 egy Moszkva
Leonyid 2 2 Szentpétervár
Leonyid 2 3 Kazan
Szergej egy egy Moszkva
Szergej egy 2 Szentpétervár
Szergej egy 3 Kazan
Gregory négy egy Moszkva
Gregory négy 2 Szentpétervár
Gregory négy 3 Kazan

Ha egy csatlakozási feltételt ( p predikátum ) ad hozzá a WHERE záradékhoz , azaz korlátozásokat a sorok kombinációira, akkor az eredmény egyenértékű egy ugyanazon feltételű művelettel: INNER JOIN

SELECT * FROM személy , város WHERE személy . CityId = város . ID

Így a t1, t2 WHERE pés kifejezések t1 INNER JOIN t2 ON pszintaktikailag alternatív formái ugyanazon logikai belső összekapcsolási művelet írásának a p predikátumra . Az SQL ANSI [1] [2]CROSS JOIN + WHERE szabvány szerint az összekapcsolási művelet szintaxisa elavult és elavult .

Jegyzetek

  1. SR0010: Ne használjon örökölt szintaxist . Letöltve: 2012. április 9. Az eredetiből archiválva : 2012. június 10.
  2. ANSI csatlakozások . Letöltve: 2012. április 9. Az eredetiből archiválva : 2012. június 15.

Linkek