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.
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ólA 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 |
Név | CityId |
---|---|
András | egy |
Leonyid | 2 |
Szergej | egy |
Gregory | négy |
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 . IDEredmé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ét tábla összekapcsolása, amely szükségszerűen tartalmazza az egyik vagy mindkét tábla összes sorát.
LEFT OUTER JOINA 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) .
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 |
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) .
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 |
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.
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 |
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 Cityvagy
SELECT * FROM Személy , VárosEredmé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 .
SQL | |
---|---|
Verziók |
|
Kulcsszavak |
|
Kapcsolódó cikkek | |
Az ISO/IEC SQL részei |
|
Adatbázis | |
---|---|
Fogalmak |
|
Objektumok |
|
Kulcsok | |
SQL |
|
Alkatrészek |