A MySQL JOINS oktatóanyag: BELSŐ, KÜLSŐ, BAL, JOBB, KERESZT

Anonim

Mik azok a JOINS?

A csatlakozások segítenek az adatok lekérésében két vagy több adatbázis-táblából. A táblák kölcsönösen kapcsolódnak az elsődleges és az idegen kulcsok használatával.

Megjegyzés: A JOIN a leginkább félreértett téma az SQL leanerek között. Az egyszerűség és az érthetőség kedvéért egy új adatbázist fogunk használni a minta gyakorlásához. Az alábbiak szerint

id keresztnév vezetéknév film_azonosító
1 Ádám Kovács 1
2 Ravi Kumar 2
3 Susan Davidson 5.
4 Jenny Adrianna 8.
6. Lee Pong 10.
id cím kategória
1 JÁRMŰVEL KERETETT: TAGOK Animációk
2 Valódi acél (2012) Animációk
3 Alvin és a mókusok Animációk
4 A konzervdoboz kalandjai Animációk
5. Biztonságos (2012) Akció
6. Biztonságos ház (2012) Akció
7 GIA 18+
8. 2009. határidő 18+
9. A piszkos kép 18+
10. Marley és én Románc

A csatlakozások típusai

Kereszt CSATLAKOZÁS

A Cross JOIN a JOIN-ok legegyszerűbb formája, amely egy adatbázis-táblázat minden egyes sorát egybe hozza a másik minden sorával.

Más szavakkal, az első táblázat minden egyes sorának kombinációit adja a második táblázat összes rekordjával.

Tegyük fel, hogy minden taglemezt meg akarunk szerezni az összes filmrekorddal, az alább látható szkriptet használhatjuk a kívánt eredmények eléréséhez.

SELECT * FROM `movies` CROSS JOIN `members`

A fenti parancsfájl futtatása a MySQL munkapadban a következő eredményeket adja.

 
id title id first_name last_name movie_id
1 ASSASSIN'S CREED: EMBERS Animations 1 Adam Smith 1
1 ASSASSIN'S CREED: EMBERS Animations 2 Ravi Kumar 2
1 ASSASSIN'S CREED: EMBERS Animations 3 Susan Davidson 5
1 ASSASSIN'S CREED: EMBERS Animations 4 Jenny Adrianna 8
1 ASSASSIN'S CREED: EMBERS Animations 6 Lee Pong 10
2 Real Steel(2012) Animations 1 Adam Smith 1
2 Real Steel(2012) Animations 2 Ravi Kumar 2
2 Real Steel(2012) Animations 3 Susan Davidson 5
2 Real Steel(2012) Animations 4 Jenny Adrianna 8
2 Real Steel(2012) Animations 6 Lee Pong 10
3 Alvin and the Chipmunks Animations 1 Adam Smith 1
3 Alvin and the Chipmunks Animations 2 Ravi Kumar 2
3 Alvin and the Chipmunks Animations 3 Susan Davidson 5
3 Alvin and the Chipmunks Animations 4 Jenny Adrianna 8
3 Alvin and the Chipmunks Animations 6 Lee Pong 10
4 The Adventures of Tin Tin Animations 1 Adam Smith 1
4 The Adventures of Tin Tin Animations 2 Ravi Kumar 2
4 The Adventures of Tin Tin Animations 3 Susan Davidson 5
4 The Adventures of Tin Tin Animations 4 Jenny Adrianna 8
4 The Adventures of Tin Tin Animations 6 Lee Pong 10
5 Safe (2012) Action 1 Adam Smith 1
5 Safe (2012) Action 2 Ravi Kumar 2
5 Safe (2012) Action 3 Susan Davidson 5
5 Safe (2012) Action 4 Jenny Adrianna 8
5 Safe (2012) Action 6 Lee Pong 10
6 Safe House(2012) Action 1 Adam Smith 1
6 Safe House(2012) Action 2 Ravi Kumar 2
6 Safe House(2012) Action 3 Susan Davidson 5
6 Safe House(2012) Action 4 Jenny Adrianna 8
6 Safe House(2012) Action 6 Lee Pong 10
7 GIA 18+ 1 Adam Smith 1
7 GIA 18+ 2 Ravi Kumar 2
7 GIA 18+ 3 Susan Davidson 5
7 GIA 18+ 4 Jenny Adrianna 8
7 GIA 18+ 6 Lee Pong 10
8 Deadline(2009) 18+ 1 Adam Smith 1
8 Deadline(2009) 18+ 2 Ravi Kumar 2
8 Deadline(2009) 18+ 3 Susan Davidson 5
8 Deadline(2009) 18+ 4 Jenny Adrianna 8
8 Deadline(2009) 18+ 6 Lee Pong 10
9 The Dirty Picture 18+ 1 Adam Smith 1
9 The Dirty Picture 18+ 2 Ravi Kumar 2
9 The Dirty Picture 18+ 3 Susan Davidson 5
9 The Dirty Picture 18+ 4 Jenny Adrianna 8
9 The Dirty Picture 18+ 6 Lee Pong 10
10 Marley and me Romance 1 Adam Smith 1
10 Marley and me Romance 2 Ravi Kumar 2
10 Marley and me Romance 3 Susan Davidson 5
10 Marley and me Romance 4 Jenny Adrianna 8
10 Marley and me Romance 6 Lee Pong 10

BELSŐ ÖSSZEKAPCSOLÁS

A belső JOIN arra szolgál, hogy mindkét táblázatból visszatérjenek az adott feltételnek megfelelő sorok.

Tegyük fel, hogy listát szeretne kapni azokról a tagokról, akik filmeket béreltek, valamint az általuk bérelt filmek címeit. Ehhez egyszerűen használhat INNER JOIN-t, amely mindkét tábla sorait adja vissza, amelyek megfelelnek az adott feltételeknek.

SELECT members.`first_name` , members.`last_name` , movies.`title`FROM members ,moviesWHERE movies.`id` = members.`movie_id`

A fenti szkript végrehajtása adja

 
first_name last_name title
Adam Smith ASSASSIN'S CREED: EMBERS
Ravi Kumar Real Steel(2012)
Susan Davidson Safe (2012)
Jenny Adrianna Deadline(2009)
Lee Pong Marley and me

Ne feledje, hogy a fenti eredményszkript ugyanazon eredmények elérése érdekében az alábbiak szerint is írható.

SELECT A.`first_name` , A.`last_name` , B.`title`FROM `members`AS AINNER JOIN `movies` AS BON B.`id` = A.`movie_id`

Külső CSATLAKOZÁSOK

A MySQL Outer JOINs visszaadja az összes rekordnak megfelelő táblákat.

Felismerheti azokat a rekordokat, amelyeknek nincs egyezése a csatlakozott táblában. Ha nem található egyezés, akkor a NULL értékeket adja vissza az összekapcsolt tábla rekordjaihoz.

Zavarosnak hangzik? Nézzünk meg egy példát -

BAL CSATLAKOZÁS

Tegyük fel, hogy mostantól meg akarja szerezni az összes film címét, a tagok nevével együtt, akik bérelték őket. Nyilvánvaló, hogy egyes filmeket senki sem bérelt. Egyszerűen használhatjuk a LEFT JOIN- t a célra.

A LEFT JOIN visszaadja a bal oldali táblázat összes sorát, még akkor is, ha a jobb oldali táblázatban nem található megfelelő sor. Ahol a jobb oldali táblázatban nem található egyezés, a NULL értéket adja vissza.

SELECT A.`title` , B.`first_name` , B.`last_name`FROM `movies` AS ALEFT JOIN `members` AS BON B.`movie_id` = A.`id`

A fenti parancsfájl végrehajtása a MySQL munkapadban megadja. Láthatja, hogy az alább felsorolt ​​visszaküldött eredményben a nem bérelt filmek esetében a tagnév mezők NULL értékekkel rendelkeznek. Ez azt jelenti, hogy az adott filmhez egyetlen tag sem talált tagtáblát.

 
title first_name last_name
ASSASSIN'S CREED: EMBERS Adam Smith
Real Steel(2012) Ravi Kumar
Safe (2012) Susan Davidson
Deadline(2009) Jenny Adrianna
Marley and me Lee Pong
Alvin and the Chipmunks NULL NULL
The Adventures of Tin Tin NULL NULL
Safe House(2012) NULL NULL
GIA NULL NULL
The Dirty Picture NULL NULL
Note: Null is returned for non-matching rows on right

JOBB CSATLAKOZÁS

A JOBB CSATLAKOZÁS nyilvánvalóan a BAL CSATLAKOZÁS ellentéte. A JOBB CSATLAKOZÁS a jobb oldali táblázat összes oszlopát visszaadja, még akkor is, ha a bal oldali táblázatban nem található megfelelő sor. Ahol a bal oldali táblázatban nem található egyezés, a NULL értéket adja vissza.

Tegyük fel, hogy példánkban meg kell kapnia a tagok nevét és az általuk bérelt filmeket. Most új tagunk van, aki még nem kölcsönzött filmet

SELECT A.`first_name` , A.`last_name`, B.`title`FROM `members` AS ARIGHT JOIN `movies` AS BON B.`id` = A.`movie_id`

A fenti parancsfájl futtatása a MySQL munkaasztalon a következő eredményeket adja.

 
first_name last_name title
Adam Smith ASSASSIN'S CREED: EMBERS
Ravi Kumar Real Steel(2012)
Susan Davidson Safe (2012)
Jenny Adrianna Deadline(2009)
Lee Pong Marley and me
NULL NULL Alvin and the Chipmunks
NULL NULL The Adventures of Tin Tin
NULL NULL Safe House(2012)
NULL NULL GIA
NULL NULL The Dirty Picture
Note: Null is returned for non-matching rows on left

"ON" és "USING" záradékok

A fenti JOIN lekérdezési példákban az ON záradékot használtuk a rekordok táblák közötti egyeztetésére.

A USING záradék ugyanarra a célra használható. A HASZNÁLAT különbsége, hogy mindkét táblázatban azonos nevekkel kell rendelkeznie az egyező oszlopoknak.

A "filmek" táblázatban eddig az "id" nevű elsődleges kulcsot használtuk. Ugyanazt utaltuk a "tagok" táblázatban a "film_id" névvel.

Nevezzük át a "filmek" táblák "id" mezőjét, hogy a "film_id" nevet kapja. Ezt azért tesszük, hogy azonos egyező mezőnevek legyenek.

ALTER TABLE `movies` CHANGE `id` `movie_id` INT( 11 ) NOT NULL AUTO_INCREMENT;

Ezután használjuk a HASZNÁLAT lehetőséget a fenti LEFT JOIN példával.

SELECT A.`title` , B.`first_name` , B.`last_name`FROM `movies` AS ALEFT JOIN `members` AS BUSING ( `movie_id` )

Az ON és a JOIN használatával együtt számos más MySQL záradékot is használhat, mint például a GROUP BY, WHERE és még olyan funkciókat is, mint a SUM , AVG stb.

Miért használjuk a csatlakozásokat?

Most azt gondolhatja, miért használjuk a JOIN-okat, amikor ugyanazt a feladatot tudjuk végrehajtani a lekérdezések futtatásával. Különösen, ha van tapasztalata az adatbázis-programozásban, akkor tudja, hogy egyesével futtathatunk lekérdezéseket, mindegyik kimenetét felhasználhatjuk egymást követő lekérdezések során. Természetesen ez lehetséges. A JOINs használatával azonban csak egy lekérdezést használhat, bármilyen keresési paraméterrel. Másrészt a MySQL jobb teljesítményt érhet el a JOIN-okkal, mivel használhatja az indexelést. Egyszerűen egyetlen JOIN lekérdezés használata több lekérdezés futtatása helyett csökkenti a kiszolgáló általános költségeit. Több lekérdezés használata helyett több adatátvitelhez vezet a MySQL és az alkalmazások (szoftverek) között. Ez további adatkezelést igényel az alkalmazás végén is.

Világos, hogy a JOIN-ok használatával jobb MySQL és alkalmazás teljesítményeket érhetünk el.

Összegzés

  • A JOINS lehetővé teszi számunkra, hogy egynél több táblázat adatait egyetlen eredményhalmazba egyesítsük.
  • A JOINS jobb teljesítményt nyújt az alkérdezésekhez képest
  • A INNER JOINS csak azokat a sorokat adja vissza, amelyek megfelelnek a megadott feltételeknek.
  • A KÜLSŐ CSATLAKOZÁS olyan sorokat is visszaadhat, ahol nem található egyezés. A páratlan sorokat a NULL kulcsszó adja vissza.
  • A főbb JOIN típusok közé tartozik a belső, a bal oldali, a jobb oldali, a cross JOINS stb
  • A JOIN műveletekben gyakran használt záradék "ON". A "USING" záradék megköveteli, hogy az egyező oszlopok azonos nevűek legyenek.
  • A JOINS más tagmondatokban is használható, például a GROUP BY, WHERE, SUB QUERIES, AGGREGATE FUNCTIONS stb.