MySQL UNISCE Tutorial: INTERNO, ESTERNO, SINISTRA, DESTRA, CROCE

Cosa sono i JOIN?

I join aiutano a recuperare i dati da due o più tabelle di database.

Le tabelle sono reciprocamente correlate utilizzando chiavi primarie ed esterne.

Nota: JOIN è l'argomento più frainteso tra gli strumenti SQL. Per ragioni di semplicità e facilità di comprensione, utilizzeremo un nuovo database per fare pratica con l'esempio. Come mostrato di seguito

id nome cognome id_film
1 Adam fabbro 1
2 Ravi Kumar 2
3 Susan Davidson 5
4 Jenny Adrianna 8
5 sottovento Pong 10
id titolo categoria
1 IL CREDO DELL'ASSASSINO: BRICI animazioni
2 Vero acciaio (2012) animazioni
3 Alvin and the Chipmunks animazioni
4 Le avventure di Tin Tin animazioni
5 Sicuro (2012) Action
6 Casa sicura (2012) Action
7 GIA 18+
8 Scadenza 2009 18+
9 L'immagine sporca 18+
10 Marley ed io Romanticismo

Tipi di join

Croce ISCRIVITI

Il Cross JOIN è la forma più semplice di JOIN che abbina ogni riga di una tabella di database a tutte le righe di un'altra.

In altre parole ci fornisce le combinazioni di ciascuna riga della prima tabella con tutti i record della seconda tabella.

Supponiamo di voler ottenere tutti i record dei membri rispetto a tutti i record dei film, possiamo utilizzare lo script mostrato di seguito per ottenere i risultati desiderati.

Tipi di join

SELECT * FROM `movies` CROSS JOIN `members`

Eseguendo lo script precedente in MySQL banco di lavoro ci fornisce i seguenti risultati.

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

INNER JOIN

Il JOIN interno viene utilizzato per restituire righe da entrambe le tabelle che soddisfano la condizione specificata.

Supponiamo che tu voglia ottenere l'elenco dei membri che hanno noleggiato film insieme ai titoli dei film noleggiati da loro. Puoi semplicemente utilizzare un INNER JOIN per questo, che restituisce righe da entrambe le tabelle che soddisfano determinate condizioni.

INNER JOIN

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

L'esecuzione dello script precedente dà

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

Nota che lo script dei risultati sopra può anche essere scritto come segue per ottenere gli stessi risultati.

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

JOIN esterni

MySQL I JOIN esterni restituiscono tutti i record corrispondenti da entrambe le tabelle.

Può rilevare i record che non hanno corrispondenza nella tabella unita. Ritorna NULL valori per i record della tabella unita se non viene trovata alcuna corrispondenza.

Sembra confuso? Diamo un'occhiata a un esempio:

LEFT JOIN

Supponiamo ora di voler ottenere i titoli di tutti i film insieme ai nomi dei membri che li hanno noleggiati. È chiaro che alcuni film non sono stati noleggiati da nessuno. Possiamo semplicemente usare LEFT JOIN allo scopo.

JOIN esterni

Il LEFT JOIN restituisce tutte le righe della tabella a sinistra anche se non è stata trovata alcuna riga corrispondente nella tabella a destra. Se non è stata trovata alcuna corrispondenza nella tabella a destra, viene restituito NULL.

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

Eseguendo lo script precedente in MySQL workbench fornisce. Puoi vedere che nel risultato restituito, elencato di seguito, per i film non noleggiati, i campi del nome membro hanno valori NULL. Ciò significa che nessun membro corrispondente ha trovato la tabella dei membri per quel particolare film.

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

GIUSTO UNISCITI

RIGHT JOIN è ovviamente l'opposto di LEFT JOIN. Il RIGHT JOIN restituisce tutte le colonne della tabella a destra anche se non sono state trovate righe corrispondenti nella tabella a sinistra. Se non è stata trovata alcuna corrispondenza nella tabella a sinistra, viene restituito NULL.

Nel nostro esempio, supponiamo che tu abbia bisogno di ottenere i nomi dei membri e i film da loro noleggiati. Ora abbiamo un nuovo membro che non ha ancora noleggiato nessun film

GIUSTO UNISCITI

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

Eseguendo lo script precedente in MySQL workbench fornisce i seguenti risultati.

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

Clausole “ON” e “USING”.

Negli esempi di query JOIN precedenti, abbiamo utilizzato la clausola ON per abbinare i record nella tabella.

Anche la clausola USING può essere utilizzata per lo stesso scopo. La differenza con UTILIZZO è deve avere nomi identici per le colonne corrispondenti in entrambe le tabelle.

Nella tabella “film” finora abbiamo utilizzato la sua chiave primaria con il nome “id”. Abbiamo fatto riferimento allo stesso nella tabella "membri" con il nome "movie_id".

Rinominiamo il campo "id" delle tabelle "film" con il nome "movie_id". Lo facciamo per avere nomi di campi corrispondenti identici.

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

Successivamente utilizziamo USING con l'esempio LEFT JOIN sopra.

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

Oltre all'utilizzo ON e UTILIZZO con JOIN puoi usarne molti altri MySQL clausole come GRUPPO PER, DOVE e funziona anche come SUM, AVG, ecc.

Perché dovremmo usare i join?

Ora potresti pensare, perché utilizziamo i JOIN quando possiamo svolgere la stessa attività eseguendo query. Soprattutto se hai una certa esperienza nella programmazione di database, sai che possiamo eseguire le query una per una e utilizzare l'output di ciascuna in query successive. Naturalmente, questo è possibile. Ma utilizzando i JOIN, puoi portare a termine il lavoro utilizzando solo una query con qualsiasi parametro di ricerca. D'altra parte MySQL può ottenere prestazioni migliori con JOIN in quanto può utilizzare l'indicizzazione. Il semplice utilizzo di una singola query JOIN invece dell'esecuzione di più query riduce il sovraccarico del server. L'utilizzo di più query comporta invece più trasferimenti di dati tra MySQL e applicazioni (software). Inoltre richiede anche più manipolazioni dei dati nella parte finale dell'applicazione.

È chiaro che possiamo ottenere risultati migliori MySQL e prestazioni dell'applicazione mediante l'uso di JOIN.

Sommario

  • I JOINS ci consentono di combinare i dati di più tabelle in un unico set di risultati.
  • I JOINS hanno prestazioni migliori rispetto alle sottoquery
  • Gli INNER JOINS restituiscono solo le righe che soddisfano i criteri specificati.
  • OUTER JOINS può anche restituire righe in cui non sono state trovate corrispondenze. Le righe senza corrispondenza vengono restituite con la parola chiave NULL.
  • I principali tipi di JOIN includono Inner, Left Outer, Right Outer, Cross JOINS ecc.
  • La clausola utilizzata frequentemente nelle operazioni JOIN è "ON". La clausola "USING" richiede che le colonne corrispondenti abbiano lo stesso nome.
  • JOINS può essere utilizzato anche in altre clausole come GROUP BY, WHERE, SUB QUERIES, AGGREGATE FUNCTIONS ecc.

Newsletter quotidiana di Guru99

Inizia la giornata con le ultime e più importanti notizie sull'intelligenza artificiale, pubblicate in questo momento.