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

Sådan forbinder du to borde i MySQL

I den forrige del af denne MySQL-serie demonstrerede jeg, hvordan du kan hente data ved hjælp af MySQL-klausuler. I denne del vil vi lære om Joins-funktionen i MySQL, hvorfor de bruges og hvordan man bruger dem. Lad os komme i gang.

Hvordan kan jeg sammenkæde to tabeller i MySQL

MySQL Joins giver dig adgang til data fra flere tabeller. En MySQL Join udføres, når to eller flere tabeller er forbundet i en SQL-sætning. MySQL Joins inkluderer:MySQL Inner Join (også kendt som Simple Join), MySQL Left Outer Join (også kaldet Left Join, det returnerer matchende poster fra den venstre tabel), Right Join (dette returnerer de matchende poster fra højre tabel), og Full Join (dette returnerer matchende poster fra alle tabeller). Ved at bruge MySQL JOINs, vil du være i stand til at deltage i mere end to borde.

I MySQL er Inner Join Standard Join. På givne søgeord på det tidspunkt vælger den alle rækker fra begge tabeller, så længe der er en koordinat mellem kolonnerne i begge tabeller.

I modsætning til SQL betragter MySQL ikke Outer Join som en separat Join-type. For at få de samme resultater som Outer Join, skal du slutte dig til Left Outer Join og Right Outer Join.

Hvor mange borde kan samles i MySQL

Ifølge den officielle dokumentation for MySQL 8.0 er det maksimale antal tabeller i en JOIN-sætning 61. Bemærk dog, at JOIN-sætninger kan kræve mange serverressourcer, efterhånden som antallet af tabeller stiger. Hvis dette er tilfældet med din forespørgsel, anbefaler jeg stærkt at dele den op i flere forespørgsler for at reducere belastningen på serveren.

Lad os starte med at tilføje en ny tabel i vores database, som vil indeholde meddelelsen sammen med bruger-id'et, som har sendt denne meddelelse, vi vil navngive den meddelelser. Skemaet for vores tabel er:

OPRET TABEL `meddelelser` (

 `id` int(11) IKKE NULL,

 `meddelelse` varchar(255) IKKE NULL

)

Vi vil bruge den samme selectdata-funktion som vi har oprettet i vores crud.php fil. Lad os nu komme i gang med at samle disse to borde. Du kan også fylde dit bord, så du kan øve det.


Stop med at spilde tid på servere

Cloudways håndterer serveradministration for dig, så du kan fokusere på at skabe fantastiske apps og holde dine kunder glade.

Start gratis

Indre deltagelse

Inner Join forbinder tabellen på en sådan måde, at den kun viser de resultater, der matcher den betingelse, der er givet, og skjuler andre. Strukturen af ​​Inner Join-forespørgsler er:

VÆLG kolonnenavn(e)

FRA tabel 1

INNER JOIN tabel2

ON table1.column_name=table2.column_name;

Inner Join og simple join er begge ens. Du kan også skrive din forespørgsel sådan her:

VÆLG kolonnenavn(e)

FRA tabel 1

JOIN table2

ON table1.column_name=table2.column_name;

Lad os nu hente navnet og beskeden fra vores database ved hjælp af Inner join. Forespørgslen vil være sådan her

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

CONCAT funktion bruges til at forbinde to strenge kolonner i MySQL. Åbn nu din index.php, som vi tidligere har oprettet, kopier følgende kode i den.

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

?>

Når du kører denne side på din PHP-webhostingserver, vil dit resultat se sådan ud:

Som du tydeligt kan se, har det kun returneret de resultater, der matcher user_id og hvor meddelelser er ikke nul.

RET JOIN

RIGHT JOIN forbinder de to tabeller på en sådan måde, at den returnerer al værdien fra højre og matchende værdi fra venstre tabeller og også returnerer null på venstre tabel, når der ikke er nogen match fundet. Strukturen for RIGHT JOIN er:

VÆLG kolonnenavn(e)

FRA tabel 1

HØJRE JOIN tabel2

ON table1.column_name=table2.column_name;

Lad os nu hente navnet og beskeden fra vores database og lave meddelelser i vores højre tabel og mine gæster i vores venstre tabel.

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

Åbn nu index.php og erstat $sql forespørgsel med ovenstående. Når du kører det, vil dit resultat være:

Hvis du kigger på beskeder tabel, vil du se nogle id'er, som ikke matcher nogen bruger-id'er, det er derfor denne forespørgsel returnerer null i navn og e-mail-kolonne, hvor den ikke finder nogen match i venstre kolonne.

LEFT JOIN

LEFT Joins forbinder de to tabeller på en sådan måde, at den returnerer al værdien fra venstre og matchende værdi fra højre tabeller og også returnerer null på højre tabel, når der ikke er nogen match fundet. Strukturen for LEFT JOIN er:

VÆLG kolonnenavn(e)

FRA tabel 1

LEFT JOIN table2

ON table1.column_name=table2.column_name;

Lad os nu hente navnet og beskeden fra vores database og lave beskeder i vores højre bord og mine gæster i vores venstre bord.

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

Åbn nu index.php og forespørg i stedet for $sql med ovenstående. Når du kører det, vil dit resultat være:

Hvis du kigger på beskeder tabel, vil du finde nogle id'er, der ikke matcher nogen bruger-id'er, derfor returnerer denne forespørgsel null i kolonnen Besked, hvor den ikke finder nogen match i højre kolonne.

UNION

UNION i MySQL bruges til at samle flere kolonner fra forskellige tabeller til en enkelt kolonne. Strukturen af ​​UNION-forespørgslen til valg af unikke værdier er:

VÆLG kolonnenavn(e) FRA tabel1

UNION

VÆLG kolonnenavn(e) FRA tabel2;

Og for at vælge gentagne værdier fra kolonner er:

VÆLG kolonnenavn(e) FRA tabel1

UNION ALLE

VÆLG kolonnenavn(e) FRA tabel2;

Lad os nu hente ID'erne fra vores borde.

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

Åbn nu index.php og erstat $sql forespørgsel med ovenstående. Når du kører det, vil dit resultat være:

Forespørgslen har hentet os alle de unikke ID'er, som findes i begge tabeller.

Cross JOIN eller kartesisk produkt

Denne type JOIN returnerer det kartesiske produkt af rækker fra tabellerne i Join. Det vil returnere en tabel, der består af poster, der kombinerer hver række fra den første tabel med hver række i den anden tabel.

Cross JOIN-syntaks er,

SELECT column-name-list

from table-name1

CROSS JOIN

table-name2;

Selv JOIN

En self JOIN er en regulær joinforbindelse, men bordet er forbundet med sig selv.

SELECT column_name(s)

FROM table1 T1, table1 T2

WHERE condition;

FULD YDRE JOIN

Nøgleordet FULL OUTER JOIN returnerer alle poster, når der er et match i enten venstre (tabel1) eller højre (tabel2) tabelposter.

Bemærk:FULD YDRE JOIN kan potentielt returnere meget store resultatsæt!

SELECT column_name(s)

FROM table1

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

Deltag flere tabeller

I de tidligere blogs har du lært, hvordan du forbinder to tabeller ved hjælp af forskellige SQL join-forespørgsler. Men hvis du arbejder på en stor applikation, det vil sige at bygge en e-handelsbutik og oprette flere tabeller i den, såsom kunder, ordrer og produkter, kan kompleksiteten i at samle tabeller helt sikkert opstå. For at ordne dette, skal du få alle produkterne bestilt af specifikke kunder. Skemaet er det samme, så jeg erklærer det ikke her. Lad os se forespørgslen:

SELECT * FROM table1

LEFT JOIN table2

ON table2.id = table1.id

LEFT JOIN table3

ON table3.id = table1.id

Vi forbinder først tabel 1 og tabel 2, som leverer en midlertidig tabel med kombinerede data fra tabel1 og tabel2, som på det tidspunkt er forbundet med tabel3. Denne ligning kan udvides til mere end 3 tabeller til N tabeller. Du skal blot sørge for, at SQL-forespørgslen skal have N-1 join-sætning til at forbinde N tabeller.

Ovenstående forespørgsel giver dig mulighed for at matche rækkerne fra tabel1 (i alle tilfælde) med rækkerne i de to andre tabeller. Brug af LEFT JOIN giver dig mulighed for at forbinde tabel2 og tabel3 med tabel1 (ikke kun tabel2 med tabel1 og tabel3 med tabel2).
Du kan også tilføje betingelser som WHERE, AND og 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

Konklusion:

I denne tutorial lærte vi om joinforbindelser, som bruges meget i relationelle databaser. Sammenføjninger bruges ikke kun til to borde, og du kan tilslutte mere end to borde ved hjælp af den samme teknik. I den otte og sidste del af denne MySQL-serie vil jeg diskutere, hvordan man bruger Regular Expressions (REGEX) til at hente og sortere data i MySQL. For det, abonner på vores blog-nyhedsbrev, og du kan også tilmelde dig vores Managed PHP Stack og begynde at teste disse tutorials på vores PHP-optimerede servere.

Ofte stillede spørgsmål

Sp. Hvordan forbinder jeg to borde?

Svar: Sammenkædning af to tabeller i SQL kan gøres på fire hovedmåder:Inner Join (returnerer rækker med matchende kolonner), Left Join (ALLE poster i venstre tabel og matchende poster i højre tabel), Right Join (ALLE poster i højre tabel). og matchende poster i den venstre tabel) og Union (fjerner dubletter).

Sp. Hvilken SQL-kommando kan du bruge til at forbinde to tabeller?

Svar: To tabeller kan sammenføjes ved hjælp af INNER JOIN-sætningen, der returnerer matchende poster fra begge tabeller.

Sp. Hvordan forbinder jeg to tabeller i SQL uden joinforbindelser?

Svar: Du kan bruge følgende sætning til at forbinde tabeller uden faktisk at bruge JOIN-sætningen

SELECT *

FROM TableA a, TableB b


  1. Træk timer fra nu()-funktionen

  2. Er der en Oracle SQL-forespørgsel, der samler flere rækker i én række?

  3. Sådan formateres tal i SQL Server

  4. Fejl 404 ikke fundet med EM 12c