Aký je rozdiel medzi INNER JOIN
, LEFT JOIN
, RIGHT JOIN
a FULL JOIN
v MySQL?
Prečítanie tohto pôvodného článku na stránke The Code Project vám veľmi pomôže: Visual Representation of SQL Joins.
Pozrite si aj tento príspevok: SQL SERVER - lepší výkon - LEFT JOIN alebo NOT IN?.
Originál nájdete na adrese: Rozdiel medzi JOIN a OUTER JOIN v MySQL.
INNER JOIN získa všetky záznamy, ktoré sú spoločné pre obe tabuľky na základe zadanej klauzuly ON.
LEFT JOIN získa všetky záznamy z prepojenej tabuľky LEFT, ale ak ste vybrali niektoré stĺpce z tabuľky RIGHT, ak neexistujú žiadne súvisiace záznamy, tieto stĺpce budú obsahovať NULL.
RIGHT JOIN je podobné ako vyššie uvedené, ale získa všetky záznamy v tabuľke RIGHT.
FULL JOIN získa všetky záznamy z oboch tabuliek a do stĺpcov, v ktorých neexistujú súvisiace záznamy v opačnej tabuľke, vloží NULL.
Klauzula SQL JOIN sa používa na kombinovanie riadkov z dvoch alebo viacerých tabuliek, na základe spoločného poľa medzi nimi.
V jazyku SQL sú k dispozícii rôzne typy spojenia:
INNER JOIN: vracia riadky, ak existuje zhoda v oboch tabuľkách.
LEFT JOIN: vráti všetky riadky z ľavej tabuľky, aj keď v pravej tabuľke nie je žiadna zhoda.
RIGHT JOIN: vráti všetky riadky z pravej tabuľky, aj keď v ľavej tabuľke nie sú žiadne zhody.
FULL JOIN: Kombinuje výsledky ľavého aj pravého vonkajšieho spojenia.
Spojená tabuľka bude obsahovať všetky záznamy z oboch tabuliek a doplní NULL za chýbajúce zhody na oboch stranách.
SELF JOIN: používa sa na pripojenie tabuľky k sebe samej, ako keby išlo o dve tabuľky, pričom sa v príkaze SQL dočasne zmení názov aspoň jednej tabuľky.
CARTESIAN JOIN: vráti karteziánsky súčin množín záznamov z dvoch alebo viacerých spojených tabuliek.
Môžeme vziať každé prvé štyri spojenia v Details :
Máme dve tabuľky s nasledujúcimi hodnotami.
TabuľkaA
id firstName lastName
.......................................
1 arun prasanth
2 ann antony
3 sruthy abc
6 new abc
TabuľkaB
id2 age Place
................
1 24 kerala
2 24 usa
3 25 ekm
5 24 chennai
....................................................................
PRIPOJENIE NOVÉHO ČLENA
Poznámka :poskytuje priesečník týchto dvoch tabuliek, t. j. riadky, ktoré majú spoločné v tabuľkeA a tabuľkeB
Syntax
SELECT table1.column1, table2.column2...
FROM table1
INNER JOIN table2
ON table1.common_field = table2.common_field;
Použite ju v našej vzorovej tabuľke :
SELECT TableA.firstName,TableA.lastName,TableB.age,TableB.Place
FROM TableA
INNER JOIN TableB
ON TableA.id = TableB.id2;
Výsledok bude
firstName lastName age Place
..............................................
arun prasanth 24 kerala
ann antony 24 usa
sruthy abc 25 ekm
LEFT JOIN
Poznámka : poskytne všetky vybrané riadky v tabuľkeA plus všetky spoločné vybrané riadky v tabuľkeB.
Syntax
SELECT table1.column1, table2.column2...
FROM table1
LEFT JOIN table2
ON table1.common_field = table2.common_field;
Použite ju v našej vzorovej tabuľke :
SELECT TableA.firstName,TableA.lastName,TableB.age,TableB.Place
FROM TableA
LEFT JOIN TableB
ON TableA.id = TableB.id2;
Výsledok
firstName lastName age Place
...............................................................................
arun prasanth 24 kerala
ann antony 24 usa
sruthy abc 25 ekm
new abc NULL NULL
PRAVÉ SPOJENIE
Poznámka : poskytne všetky vybrané riadky v tabuľkeB plus všetky spoločné vybrané riadky v tabuľkeA.
Syntax
SELECT table1.column1, table2.column2...
FROM table1
RIGHT JOIN table2
ON table1.common_field = table2.common_field;
Použite ju v našej vzorovej tabuľke :
SELECT TableA.firstName,TableA.lastName,TableB.age,TableB.Place
FROM TableA
RIGHT JOIN TableB
ON TableA.id = TableB.id2;
Výsledok
firstName lastName age Place
...............................................................................
arun prasanth 24 kerala
ann antony 24 usa
sruthy abc 25 ekm
NULL NULL 24 chennai
FULL JOIN
Poznámka :Vráti všetky vybrané hodnoty z oboch tabuliek.
Syntax
SELECT table1.column1, table2.column2...
FROM table1
FULL JOIN table2
ON table1.common_field = table2.common_field;
Použite ju v našej vzorovej tabuľke :
SELECT TableA.firstName,TableA.lastName,TableB.age,TableB.Place
FROM TableA
FULL JOIN TableB
ON TableA.id = TableB.id2;
Výsledok
firstName lastName age Place
...............................................................................
arun prasanth 24 kerala
ann antony 24 usa
sruthy abc 25 ekm
new abc NULL NULL
NULL NULL 24 chennai
Záujímavý fakt
Pri INNER spojeniach na poradí nezáleží
Pre (LEFT, RIGHT alebo FULL) OUTER spojenia na poradí záleží
Radšej si pozrite tento odkaz, ktorý vám poskytne zaujímavé podrobnosti o poradí spojenia