Mysql
 sql >> Database >  >> RDS >> Mysql

Come unire due tabelle in MySQL

Nella puntata precedente di questa serie MySQL, ho dimostrato come recuperare i dati utilizzando le clausole MySQL. In questa parte impareremo a conoscere la funzione Join in MySQL, perché vengono utilizzate e come usarle. Iniziamo.

Come posso collegare due tabelle in MySQL

I join MySQL ti consentono di accedere ai dati da più tabelle. Un MySQL Join viene eseguito ogni volta che due o più tabelle vengono unite in un'istruzione SQL. I MySQL Join includono:MySQL Inner Join (noto anche come Simple Join), MySQL Left Outer Join (chiamato anche Left Join, restituisce i record corrispondenti dalla tabella di sinistra), il Right Join (questo restituisce i record corrispondenti dal tabella di destra) e il Full Join (questo restituisce i record corrispondenti da tutte le tabelle). Utilizzando MySQL JOIN, sarai in grado di unire più di due tabelle.

In MySQL, l'Inner Join è il Default Join. Su determinate parole chiave a quel punto, sceglie tutte le righe da entrambe le tabelle, purché ci sia una coordinata tra le colonne in entrambe le tabelle.

A differenza di SQL, MySQL non considera l'Outer Join come un tipo di join separato. Per ottenere gli stessi risultati del join esterno, devi unirti al join esterno sinistro e al join esterno destro.

Quante tabelle possono essere unite in MySQL

Secondo la documentazione ufficiale di MySQL 8.0, il numero massimo di tabelle in un'istruzione JOIN è 61. Tuttavia, si noti che le istruzioni JOIN potrebbero richiedere molte risorse del server all'aumentare del numero di tabelle. Se questo è il caso della tua query, ti consiglio vivamente di suddividerla in più query per ridurre il carico sul server.

Iniziamo aggiungendo una nuova tabella nel nostro database che conterrà il messaggio insieme all'ID utente che ha inviato questo messaggio, lo chiameremo messaggi. Lo schema della nostra tabella è:

CREA TABELLA `messaggi` (

 `id` int(11) NON NULL,

 `messaggio` varchar(255) NON NULL

)

Utilizzeremo la stessa funzione selectdata che abbiamo creato nel nostro crud.php file. Ora iniziamo unendo queste due tabelle. Puoi anche riempire il tuo tavolo per esercitarti.


Smetti di perdere tempo con i server

Cloudways gestisce per te la gestione dei server in modo che tu possa concentrarti sulla creazione di fantastiche app e sulla soddisfazione dei tuoi clienti.

Inizia gratis

Inner Join

Inner Join unisce la tabella in modo tale da mostrare solo i risultati che corrispondono alla condizione data e nascondere gli altri. La struttura delle query di Inner Join è:

SELECT nome_colonna/i

DALLA tabella1

Tabella INNER JOIN2

ON table1.column_name=table2.column_name;

Inner Join e Simple Join sono entrambi uguali. Puoi anche scrivere la tua domanda in questo modo:

SELECT nome_colonna/i

DALLA tabella1

ISCRIVITI al tavolo2

ON table1.column_name=table2.column_name;

Ora prendiamo il Nome e il messaggio dal nostro database usando Inner Join. La query sarà così

$sql = "SELECT CONCAT(myguests.firstname,' ',myguests.lastname) AS name, myguests.email, messages.message 
From myguests 
INNER JOIN messages 
ON myguests.id = messages.id";

Il CONCAT la funzione viene utilizzata per unire due colonne di stringhe in MySQL. Ora apri il tuo index.php che abbiamo creato in precedenza, copia al suo interno il seguente codice.

<table>

	<tr>

		<td> &nbsp;&nbsp;Name</td>

		<td> &nbsp;&nbsp;Email</td>

		<td> &nbsp;&nbsp;Message</td>

		<!-- <td> &nbsp;&nbsp;Message</td>

		<td> &nbsp;&nbsp;Date</td>!-->

	</tr>

<?php

include 'crud.php';

$sql = "SELECT CONCAT(myguests.firstname,' ',myguests.lastname) AS name, myguests.email, messages.message 
		From myguests 
		INNER JOIN messages 
		ON myguests.id = messages.id";

$result = selectdata($sql);

	if($result != "zero")

	{

		while($row = $result->fetch_assoc())

		{

			echo "<tr>";

			echo "<td>" . $row['name'] . "</td>";

			echo "<td>" . $row['email'] . "</td>";

			if($row['message'] === null){echo "<td>" . &nbsp;'null'. "</td>";} else { echo "<td>" . &nbsp;$row['message']. "</td>"; } ;

			echo "</tr>";

		}

	}

	else

		{

			echo $result;

	}

?>

</table>

?>

Quando esegui questa pagina sul tuo server di hosting Web PHP, il risultato sarà simile al seguente:

Come puoi vedere chiaramente ha restituito solo quei risultati che corrispondono a user_id e dove messaggi non è nullo.

ACCEDI A DESTRA

RIGHT JOIN unisce le due tabelle in modo tale che restituisca tutto il valore da destra e il valore abbinato dalle tabelle di sinistra e restituisca anche null sulla tabella di sinistra quando non viene trovata alcuna corrispondenza. La struttura per RIGHT JOIN è:

SELECT nome_colonna/i

DALLA tabella1

RIGHT JOIN table2

ON table1.column_name=table2.column_name;

Ora prendiamo il Nome e il messaggio dal nostro database facendo messaggi nella nostra tabella di destra e i miei ospiti nella nostra tabella di sinistra.

$sql = "SELECT CONCAT(myguests.firstname,' ',myguests.lastname) AS name, myguests.email, messages.message 
From myguests 
RIGHT JOIN messages 
ON messages.id = myguests.id";

Ora apri index.php e sostituisci $sql interrogare con quanto sopra. Quando lo esegui, il tuo risultato sarà:

Se dai un'occhiata ai messaggi tabella, vedrai alcuni ID che non corrispondono a nessun ID utente, ecco perché questa query restituisce null nel nome e nella colonna e-mail dove non troverà alcuna corrispondenza nella colonna di sinistra.

UNISCI A SINISTRA

LEFT Joins unisce le due tabelle in modo tale che restituisca tutto il valore da sinistra e il valore abbinato dalle tabelle di destra e restituisca anche null sulla tabella di destra quando non viene trovata alcuna corrispondenza. La struttura per LEFT JOIN è:

SELECT nome_colonna/i

DALLA tabella1

LEFT JOIN table2

ON table1.column_name=table2.column_name;

Ora prendiamo il Nome e il messaggio dal nostro database facendo messaggi in il nostro tavolo di destra e i miei ospiti il nostro tavolo a sinistra.

$sql = "SELECT CONCAT(myguests.firstname,' ',myguests.lastname) AS name, myguests.email, messages.message 
From myguests 
LEFT JOIN messages 
ON messages.id = myguests.id";

Ora apri index.php ed esegui una query al posto di $sql con quanto sopra. Quando lo esegui, il tuo risultato sarà:

Se dai un'occhiata ai messaggi tabella, troverai alcuni ID che non corrispondono a nessun ID utente, ecco perché questa query restituisce null nella colonna Messaggio dove non troverà alcuna corrispondenza nella colonna di destra.

UNIONE

UNION in MySQL viene utilizzato per unire più colonne di tabelle diverse in un'unica colonna. La struttura della query UNION per la selezione di valori univoci è:

SELEZIONARE nome_colonna(i) DALLA tabella1

UNIONE

SELECT nome_colonna(i) DA tabella2;

E per selezionare valori ripetuti dalle colonne è:

SELEZIONARE nome_colonna(i) DALLA tabella1

UNION TUTTI

SELECT nome_colonna(i) DA tabella2;

Ora prendiamo gli ID dalle nostre tabelle.

$sql = "SELECT id FROM myguests 
UNION 
SELECT id FROM messages";

Ora apri index.php e sostituisci $sql interrogare con quanto sopra. Quando lo esegui il tuo risultato sarà:

La query ci ha recuperato tutti gli ID univoci che si trovano in entrambe le tabelle.

Cross JOIN o Prodotto cartesiano

Questo tipo di JOIN restituisce il prodotto cartesiano delle righe delle tabelle in Join. Restituirà una tabella composta da record che combinano ogni riga della prima tabella con ogni riga della seconda tabella.

La sintassi Cross JOIN è,

SELECT column-name-list

from table-name1

CROSS JOIN

table-name2;

Unisciti automaticamente

Un self JOIN è un join normale, ma la tabella è unita a se stessa.

SELECT column_name(s)

FROM table1 T1, table1 T2

WHERE condition;

UNIONE ESTERNA COMPLETA

La parola chiave FULL OUTER JOIN restituisce tutti i record quando è presente una corrispondenza nei record della tabella di sinistra (tabella1) o di destra (tabella2).

Nota:FULL OUTER JOIN può potenzialmente restituire set di risultati molto grandi!

SELECT column_name(s)

FROM table1

FULL OUTER JOIN table2 ON table1.column_name = table2.column_name;

Unisciti a più tavoli

Nei blog precedenti, hai imparato come unire due tabelle insieme usando diverse query di join SQL. Ma se stai lavorando su un'applicazione di grandi dimensioni, ad esempio la costruzione di un negozio di e-commerce e la creazione di più tabelle al suo interno come clienti, ordini e prodotti, la complessità nell'unire le tabelle può sicuramente sorgere. Per risolvere questo problema, devi ottenere tutti i prodotti ordinati da clienti specifici. Lo schema è lo stesso, quindi non lo dichiaro qui. Vediamo la query:

SELECT * FROM table1

LEFT JOIN table2

ON table2.id = table1.id

LEFT JOIN table3

ON table3.id = table1.id

Per prima cosa uniamo la tabella 1 e la tabella 2 che forniscono una tabella temporanea con dati combinati da tabella1 e tabella2, che a quel punto è unita a tabella3. Questa equazione può essere estesa a più di 3 tabelle a N tabelle, devi solo assicurarti che la query SQL debba avere N-1 istruzione join per organizzare per unire N tabelle.

La query precedente ti consentirà di abbinare le righe di table1 (in ogni caso) alle righe di altre due tabelle. L'utilizzo di LEFT JOIN ti consente di unire table2 e table3 con table1 (non solo table2 con table1 e table3 con table2).
Puoi anche aggiungere condizioni come WHERE, AND e ORDERBY

SELECT * FROM table1

LEFT JOIN table2

   ON table2.id = table1.id

LEFT JOIN table3

   ON table3.id = table2.id

WHERE month = 'numberHere'

   AND (table2.email IS NOT NULL OR table3.email IS NOT NULL)

ORDER BY submitdate DESC

Conclusione:

In questo tutorial, abbiamo appreso dei join che vengono utilizzati molto nei database relazionali. I join non vengono utilizzati solo per due tabelle e puoi unire più di due tabelle usando la stessa tecnica. Nell'ottava e ultima puntata di questa serie MySQL, parlerò di come usare le espressioni regolari (REGEX) per recuperare e ordinare i dati in MySQL. Per questo, iscriviti alla newsletter del nostro blog e puoi anche iscriverti al nostro Stack PHP gestito e iniziare a testare questi tutorial sui nostri server ottimizzati per PHP.

Domande frequenti

D. Come faccio a unire due tavoli insieme?

Ris: L'unione di due tabelle in SQL può essere eseguita in quattro modi principali:Inner Join (restituisce le righe con colonne corrispondenti), Left Join (TUTTI i record nella tabella di sinistra e i record corrispondenti nella tabella di destra), Right Join (TUTTI i record nella tabella di destra e record corrispondenti nella tabella a sinistra) e Unione (rimuove i duplicati).

D. Quale comando SQL puoi usare per unire due tabelle?

Ris: È possibile unire due tabelle utilizzando l'istruzione INNER JOIN che restituisce i record corrispondenti da entrambe le tabelle.

D. Come faccio a unire due tabelle in SQL senza join?

Ris: È possibile utilizzare la seguente istruzione per unire tabelle senza utilizzare effettivamente l'istruzione JOIN

SELECT *

FROM TableA a, TableB b