Kāda ir atšķirība starp INNER JOIN
, LEFT JOIN
, RIGHT JOIN
un FULL JOIN
?
MySQL?
Ļoti palīdzēs šī oriģinālā raksta izlasīšana par The Code Project: Visual Representation of SQL Joins.
Apskatiet arī šo ziņu: SQL SERVER - labāka veiktspēja - LEFT JOIN vai NOT IN?.
Atrodiet oriģinālu vietnē: Atšķirība starp JOIN un OUTER JOIN MySQL.
INNER JOIN iegūst visus ierakstus, kas ir kopīgi abām tabulām, pamatojoties uz norādīto ON klauzulu.
LEFT JOIN iegūst visus ierakstus no LEFT saistītās tabulas, bet, ja esat atlasījis dažus kolonnas no RIGHT tabulas, ja nav saistītu ierakstu, šajās kolonnās būs NULL.
PRAVAIS APSTIPRINĀJUMS ir līdzīgs iepriekš minētajam, bet iegūst visus ierakstus labajā tabulā.
PILNĪGAIS APSTIPRINĀJUMS iegūst visus ierakstus no abām tabulām un ieraksta NULL ailēs, ja pretējā tabulā nav saistītu ierakstu.
SQL JOIN klauzulu izmanto, lai apvienotu rindas no divām vai vairākām tabulām, pamatojoties uz to kopīgu lauku.
SQL ir pieejami dažādi savienošanas veidi:
INNER JOIN: atgriež rindas, ja abās tabulās ir sakritība.
LEFT JOIN: atgriež visas rindas no kreisās tabulas, pat ja labajā tabulā nav atbilstības.
PRAVAIS APVIENOJUMS: atgriež visas rindas no labās tabulas, pat ja kreisajā tabulā nav atbilstības.
PILNĪGS APSTIPRINĀJUMS: Tas apvieno gan kreisās, gan labās ārējās savienošanas rezultātus.
Apvienotajā tabulā būs visi ieraksti no abām tabulām, un trūkstošie sakritības gadījumi abās pusēs tiks aizpildīti ar NULL.
SELF JOIN: tiek izmantots, lai tabulu pievienotu sev, it kā tā būtu divas tabulas, SQL izteikumā uz laiku pārdēvējot vismaz vienu tabulu.
CARTESIAN JOIN: atgriež divu vai vairāku apvienoto tabulu ierakstu kopu Dekarta reizinājumu.
MĒS varam veikt katru no pirmajiem četriem savienojumiem Details :
Mums ir divas tabulas ar šādām vērtībām.
TabulaA
id firstName lastName
.......................................
1 arun prasanth
2 ann antony
3 sruthy abc
6 new abc
TabulaB
id2 age Place
................
1 24 kerala
2 24 usa
3 25 ekm
5 24 chennai
....................................................................
PIEVIENOŠANĀS JAUNIETIM
Piezīme :tas dod divu tabulu krustošanos, t. i., rindas, kas tām ir kopīgas tabulāA un tabulāB.
Sintakse
SELECT table1.column1, table2.column2...
FROM table1
INNER JOIN table2
ON table1.common_field = table2.common_field;
Piemērojiet to mūsu parauga tabulā :
SELECT TableA.firstName,TableA.lastName,TableB.age,TableB.Place
FROM TableA
INNER JOIN TableB
ON TableA.id = TableB.id2;
Rezultāts būs
firstName lastName age Place
..............................................
arun prasanth 24 kerala
ann antony 24 usa
sruthy abc 25 ekm
LEFT JOIN
Piezīme : tiks iegūtas visas atlasītās rindas tabulāA un visas kopīgās atlasītās rindas tabulāB.
Sintakse
SELECT table1.column1, table2.column2...
FROM table1
LEFT JOIN table2
ON table1.common_field = table2.common_field;
Piemērojiet to mūsu parauga tabulā :
SELECT TableA.firstName,TableA.lastName,TableB.age,TableB.Place
FROM TableA
LEFT JOIN TableB
ON TableA.id = TableB.id2;
Rezultāts
firstName lastName age Place
...............................................................................
arun prasanth 24 kerala
ann antony 24 usa
sruthy abc 25 ekm
new abc NULL NULL
PRAVA JOIN
Piezīme : tiks iegūtas visas atlasītās rindas tabulāB un visas kopīgās atlasītās rindas tabulāA.
Sintakse
SELECT table1.column1, table2.column2...
FROM table1
RIGHT JOIN table2
ON table1.common_field = table2.common_field;
Piemērojiet to mūsu parauga tabulā :
SELECT TableA.firstName,TableA.lastName,TableB.age,TableB.Place
FROM TableA
RIGHT JOIN TableB
ON TableA.id = TableB.id2;
Rezultāts
firstName lastName age Place
...............................................................................
arun prasanth 24 kerala
ann antony 24 usa
sruthy abc 25 ekm
NULL NULL 24 chennai
PILNĪGI APVIENOT
Piezīme :Tas atgriezīs visas atlasītās vērtības no abām tabulām.
Sintakse
SELECT table1.column1, table2.column2...
FROM table1
FULL JOIN table2
ON table1.common_field = table2.common_field;
Piemērojiet to mūsu parauga tabulā :
SELECT TableA.firstName,TableA.lastName,TableB.age,TableB.Place
FROM TableA
FULL JOIN TableB
ON TableA.id = TableB.id2;
Rezultāts
firstName lastName age Place
...............................................................................
arun prasanth 24 kerala
ann antony 24 usa
sruthy abc 25 ekm
new abc NULL NULL
NULL NULL 24 chennai
Interešs fakts
INNER savienojumiem secībai nav nozīmes.
(LEFT, RIGHT vai FULL) OUTER savienojumiem secībai ir nozīme.
Labāk pārbaudiet šo Saite, kas sniegs jums interesantu informāciju par savienošanas secību.