Kombináljon két táblát egy virtuális táblába a JOIN segítségével
Előzetes megjegyzés
szintaxis
- Vessző verzió:
- A BELSŐ CSATLAKOZÁS legegyszerűbb formája
- Több link:
- Az INNER helyett a következő kulcsszavak egyike is használható:
- Az OR használható az AND operátor helyett, kettőnél több összehasonlító kifejezést lehet megadni, és az AND és az OR kombinálható.
- Egy tábla kétszer is megadható, az egyik beszél róla Önkapcsolódás, mert a táblázat sorai összefüggenek a táblázat többi sorával. A vesszőváltozaton kívül legalább egy álnév szükséges egy táblához az oszlopok egyértelmű leírása érdekében.
Példák
- Ez a vesszőverzió egyesíti az ARTIKEL táblázat minden sorát a SALES táblázat minden sorával, és teljes egészében kimeneti a 4 * 9 = 36 sor eredményét. Ha összehasonlítjuk a két A.A_NR és U.A_NR oszlopot, akkor észrevehető, hogy az értékesítésekhez a legtöbb esetben olyan cikkeket rendelnek, amelyek eltérnek az értékesítésben említett cikkektől. Ezek a (36 - 9) = 27 eredmények értelmetlenek. A következő JOIN záradékban az ON záradékban megadott szűrési feltétel eltávolítja ezeket az adatrekordokat.
- Ez a JOIN legegyszerűbb és leggyakrabban használt formája. Az A. oszlop. Az A_NR oszlop szintén az ARTIKEL táblázat elsődleges kulcsa; egy cikkhez több rendelés is sorolható, azaz sorok találhatók a SALES táblában. Az összes sor, amelyben a két A.A_NR és U.A_NR oszlop nem egyezik, eltávolításra kerül a fenti vesszőverzióból.
Ez a lekérdezés először egyezik egymással mindazokkal a sorokkal, amelyek ugyanarra a dátumra és ugyanarra a cikkre hivatkoznak. Mivel a harmadik feltétel annak ellenőrzése, hogy az A_STUECK oszlop eltér-e, a dátum és a cikk minden kombinációja, amely ugyanarra a sorra vonatkozik, először eltávolításra kerül. Ugyanez azonban teljesíti az U1.UMSATZ_NR <> U1.UMSATZ_NR tesztet. A ténylegesen használt teszt azonban emellett eltávolítja a dátum és az árucikk összes kombinációját, amelyért az árucikket többször adták el azonos darabszámmal; csak azokat a kombinációkat adják ki, amelyekben a cikket legalább két különböző darabszámban adták el egy napon. Mivel minden sor, amely megfelel ezeknek a feltételeknek, akkor is teljesül, ha a két sort felcseréljük, ezért a <> feltételt szintén helyettesíthetjük U2.Value_No értékkel, így 1999.06.25-én csak a 11. tételt adták ki, amelyet kétszer húszszor adtak el. Összességében:

Megjegyzések
- Ha táblákat kapcsol össze, akkor általában a JOIN módszerek egyikét kell használnia. Különösen kerülni kell a „régi” technikát, amely a zárójeles verziót használja és az ON záradékot a WHERE feltételbe helyezi át. Hasonlítsa össze a következő két ábrázolást: Az első nem használható verzióban a két tábla összekapcsolásának feltétele összekeveredik a néhány sort kiválasztó feltétellel. A második változat azonban elválasztja a táblák összekapcsolását az oszlopok redukciójától. Általános szabályként minden olyan WHERE feltétel végrehajtása, amely csökkenti a sorok számát, a JOIN csak a maradék sorszám felhasználásával jön létre.
- A BAL és JOBB csatlakozás szimmetrikus egymással. A soha el nem adott elemek meghatározásához a következő két állításnak ezért ugyanazt a folyamatábrát kell generálnia (adjon hozzá egy olyan elemet, amelyet soha nem adtak el, mint fent): és az OUTER JOIN egyesíti a BAL/JOBB oldalt, és mindkét táblázatból elfogadja mind az egyező sorokat, mind a null értékeket.
- A bal vagy jobb összekapcsolási konstrukciók kötelezőek, ha egy tábla tartalmaz egy hivatkozást egy választható szegélytáblára. Egy klasszikus példa hozzárendeli a címeket a személyekhez, a címeket (Dr., Dr.med, Prof. Dr.) margótáblázatban tárolják, a személytábla tartalmaz egy oszlopot a címtábla azonosítójával. Ha vannak olyan emberek, akiknek nincs címük, akkor vagy szöveg nélküli bejegyzés hozható létre a margótáblában, és egy INNER JOIN használható a linkeléshez, vagy hiányzik egy ilyen bejegyzés. Ez azt jelenti, hogy a személytábla megfelelő cellája üres, ezért bal/jobb összekapcsolást kell kialakítani a főtáblától az éltábláig, ha minden személy megtalálható.
Példa az MS-SqlServer-re: A CoalEsce a lista első, nullától eltérő kifejezését adja vissza. Ha létezik cím, akkor szóközzel elválasztva jelenik meg, különben egy üres karakterlánc kerül az előző kimenethez, amely vezetéknevet, vesszőt és keresztnevet tartalmaz.