Kāda ir atšķirība starp INNER JOIN, LEFT JOIN, RIGHT JOIN un FULL JOIN?

Kāda ir atšķirība starp INNER JOIN, LEFT JOIN, RIGHT JOIN un FULL JOIN? MySQL?

Risinājums

Ļ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.

Komentāri (34)

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.

Komentāri (6)

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.

Komentāri (10)