sql >> Database >  >> RDS >> Mysql

Hoe u twee tabellen samenvoegt in MySQL

In de vorige aflevering van deze MySQL-serie heb ik laten zien hoe u gegevens kunt ophalen met behulp van MySQL-clausules. In dit deel zullen we leren over de Joins-functie in MySQL, waarom ze worden gebruikt en hoe ze te gebruiken. Laten we beginnen.

Hoe kan ik twee tabellen koppelen in MySQL

Met MySQL-joins krijgt u toegang tot gegevens uit meerdere tabellen. Een MySQL Join wordt uitgevoerd wanneer twee of meer tabellen worden samengevoegd in een SQL-instructie. MySQL-joins omvatten:de MySQL Inner Join (ook bekend als de Simple Join), de MySQL Left Outer Join (ook wel de Left Join genoemd, het retourneert overeenkomende records uit de linkertabel), de Right Join (dit retourneert de overeenkomende records van de rechtertabel), en de Full Join (dit retourneert overeenkomende records van alle tabellen). Met MySQL JOINs kun je aan meer dan twee tafels deelnemen.

In MySQL is de Inner Join de standaard Join. Op gegeven trefwoorden kiest het op dat moment alle rijen uit beide tabellen, zolang er een coördinaat is tussen de kolommen in beide tabellen.

In tegenstelling tot SQL beschouwt MySQL de Outer Join niet als een apart Join-type. Om dezelfde resultaten te krijgen als de Outer Join, moet je de Left Outer Join en Right Outer Join toevoegen.

Hoeveel tabellen kunnen worden samengevoegd in MySQL

Volgens de officiële documentatie van MySQL 8.0 is het maximum aantal tabellen in een JOIN-statement 61. Houd er echter rekening mee dat JOIN-statements veel serverbronnen kunnen vergen naarmate het aantal tabellen toeneemt. Als dit het geval is met uw zoekopdracht, raad ik u ten zeerste aan om deze op te splitsen in meerdere zoekopdrachten om de belasting van de server te verminderen.

Laten we beginnen met het toevoegen van een nieuwe tabel in onze database die het bericht zal bevatten samen met de gebruikers-ID die dit bericht heeft verzonden, we zullen het berichten noemen. Het schema van onze tabel is:

CREER TABEL `berichten` (

 `id` int(11) NIET NULL,

 `bericht` varchar(255) NIET NULL

)

We gebruiken dezelfde selectdata-functie die we hebben gemaakt in onze crud.php het dossier. Laten we nu beginnen door deze twee tabellen samen te voegen. Je kunt ook je tafel vullen, zodat je het kunt oefenen.


Stop met het verspillen van tijd aan servers

Cloudways regelt het serverbeheer voor u, zodat u zich kunt concentreren op het maken van geweldige apps en het tevreden houden van uw klanten.

Begin gratis

Innerlijke deelname

Inner Join voegt tabel toe op een zodanige manier dat alleen die resultaten worden weergegeven die overeenkomen met de gegeven voorwaarde en andere verbergen. De structuur van Inner Join-query's zijn:

SELECTEER kolomnaam(en)

VAN tabel1

INNER JOIN-tabel2

AAN table1.column_name=table2.column_name;

Inner Join en simple join zijn beide hetzelfde. U kunt uw vraag ook als volgt schrijven:

SELECTEER kolomnaam(en)

VAN tabel1

DOEN AAN tabel2

AAN table1.column_name=table2.column_name;

Laten we nu de naam en het bericht uit onze database halen met behulp van Inner join. De zoekopdracht ziet er zo uit

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

De CONCAT functie wordt gebruikt om twee strings-kolommen samen te voegen in MySQL. Open nu uw index.php die we eerder hebben gemaakt, kopieer de volgende code erin.

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

?>

Wanneer u deze pagina op uw PHP-webhostingserver uitvoert, ziet uw resultaat er als volgt uit:

Zoals je duidelijk kunt zien, heeft het alleen die resultaten geretourneerd die overeenkomen met user_id en waar berichten is niet nul.

RECHTS AANMELDEN

RIGHT JOIN voegt de twee tabellen samen op een zodanige manier dat het alle waarde van de rechter en overeenkomende waarde van linker tabellen retourneert en ook null retourneert op de linker tabel als er geen overeenkomst is gevonden. De structuur voor RIGHT JOIN is:

SELECTEER kolomnaam(en)

VAN tabel1

RIGHT JOIN tabel2

AAN table1.column_name=table2.column_name;

Laten we nu de naam en het bericht uit onze database halen en berichten maken in onze rechtertabel en mijngasten in onze linkertafel.

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

Open nu index.php en vervang $sql vraag met bovenstaande. Als je het uitvoert, is je resultaat:

Als je berichten . bekijkt tabel ziet u enkele ID's die niet overeenkomen met gebruikers-ID's. Daarom retourneert deze zoekopdracht null in de naam en e-mailkolom waar er geen overeenkomst wordt gevonden in de linkerkolom.

LEFT JOIN

LEFT Joins voegt de twee tabellen samen op een zodanige manier dat het alle waarde van de linker en overeenkomende waarde van rechter tabellen retourneert en ook null retourneert in de rechter tabel als er geen overeenkomst is gevonden. De structuur voor LEFT JOIN is:

SELECTEER kolomnaam(en)

VAN tabel1

LEFT JOIN-tabel2

AAN table1.column_name=table2.column_name;

Laten we nu de naam en het bericht uit onze database halen en berichten maken in onze rechtertafel en mijn gasten in onze linkertafel.

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

Open nu index.php en zoek in plaats van $sql met bovenstaande. Als je het uitvoert, is je resultaat:

Als je berichten . bekijkt tabel, zult u enkele ID's vinden die niet overeenkomen met gebruikers-ID's. Daarom retourneert deze zoekopdracht null in de kolom Bericht waar geen overeenkomst wordt gevonden in de rechterkolom.

UNIE

UNION in MySQL wordt gebruikt om meerdere kolommen uit verschillende tabellen samen te voegen tot een enkele kolom. De structuur van de UNION-query voor het selecteren van unieke waarden is:

SELECTEER column_name(s) FROM table1

UNIE

SELECTEER column_name(s) FROM table2;

En voor het selecteren van herhaalde waarden uit kolommen is:

SELECTEER column_name(s) FROM table1

ALLES UNIE

SELECTEER column_name(s) FROM table2;

Laten we nu de ID's uit onze tabellen halen.

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

Open nu index.php en vervang $sql vraag met bovenstaande. Als je het uitvoert, is je resultaat:

De zoekopdracht heeft ons alle unieke ID's opgeleverd die in beide tabellen worden gevonden.

Cross JOIN of cartesiaans product

Dit type JOIN retourneert het cartesiaanse product van rijen uit de tabellen in Join. Het retourneert een tabel die bestaat uit records die elke rij uit de eerste tabel combineren met elke rij van de tweede tabel.

Cross JOIN-syntaxis is,

SELECT column-name-list

from table-name1

CROSS JOIN

table-name2;

Self JOIN

Een self JOIN is een gewone join, maar de tafel is samengevoegd met zichzelf.

SELECT column_name(s)

FROM table1 T1, table1 T2

WHERE condition;

VOLLEDIGE OUTER JOIN

Het sleutelwoord FULL OUTER JOIN retourneert alle records wanneer er een overeenkomst is in de linker (tabel1) of rechter (tabel2) tabelrecords.

Opmerking:FULL OUTER JOIN kan mogelijk zeer grote resultaatsets opleveren!

SELECT column_name(s)

FROM table1

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

Deelnemen aan meerdere tabellen

In de vorige blogs heb je geleerd hoe je twee tabellen samenvoegt met behulp van verschillende SQL-joinquery's. Maar als je aan een grote applicatie werkt, d.w.z. het bouwen van een e-commerce winkel en het creëren van meerdere tabellen daarin zoals klanten, bestellingen en producten, kan de complexiteit bij het samenvoegen van tabellen zeker ontstaan. Om dit op te lossen, moet u alle producten bestellen die door specifieke klanten zijn besteld. Het schema is hetzelfde, dus ik verklaar het hier niet. Laten we eens kijken naar de vraag:

SELECT * FROM table1

LEFT JOIN table2

ON table2.id = table1.id

LEFT JOIN table3

ON table3.id = table1.id

We voegen eerst tabel 1 en tabel 2 samen, die een tijdelijke tabel opleveren met gecombineerde gegevens uit tabel1 en tabel2, die op dat moment wordt samengevoegd met tabel3. Deze vergelijking kan worden uitgebreid tot meer dan 3 tabellen tot N tabellen. U moet er alleen voor zorgen dat de SQL-query N-1 join-instructie moet hebben om N tabellen samen te voegen.

Met de bovenstaande query kunt u de rijen van tabel1 (in ieder geval) matchen met de rijen van andere twee tabellen. Door LEFT JOIN te gebruiken, kun je table2 en table3 samenvoegen met table1 (niet alleen table2 met table1 en table3 met table2).
Je kunt ook voorwaarden toevoegen zoals WHERE, AND en 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

Conclusie:

In deze tutorial hebben we geleerd over joins die veel worden gebruikt in relationele databases. Joins worden niet alleen voor twee tabellen gebruikt en u kunt met dezelfde techniek meer dan twee tabellen samenvoegen. In de achtste en laatste aflevering van deze MySQL-serie, bespreek ik hoe je reguliere expressies (REGEX) kunt gebruiken voor het ophalen en sorteren van gegevens in MySQL. Schrijf je daarvoor in op onze blognieuwsbrief en je kunt je ook aanmelden voor onze Managed PHP Stack en beginnen met het testen van deze tutorials op onze voor PHP geoptimaliseerde servers.

Veel Gestelde Vragen

V. Hoe voeg ik twee tabellen samen?

Antwoord: Het samenvoegen van twee tabellen in SQL kan op vier belangrijke manieren:Inner Join (retourneert rijen met overeenkomende kolommen), Left Join (ALLE records in de linkertabel en overeenkomende records in de rechtertabel), Right Join (ALLE records in de rechtertabel en overeenkomende records in de linkertabel), en Union (verwijdert duplicaten).

V. Welk SQL-commando kun je gebruiken om twee tabellen samen te voegen?

Antwoord: Twee tabellen kunnen worden samengevoegd met behulp van de INNER JOIN-instructie die overeenkomende records uit beide tabellen retourneert.

V. Hoe voeg ik twee tabellen in SQL samen zonder joins?

Antwoord: U kunt de volgende instructie gebruiken om tabellen samen te voegen zonder de JOIN-instructie te gebruiken

SELECT *

FROM TableA a, TableB b


  1. n-percentielberekeningen in postgresql

  2. Inleiding tot PL/SQL-functies in Oracle Database

  3. MMO-games en database-ontwerp

  4. SQL Server Besturingssysteemfout 5:5 (Toegang is geweigerd.)