sql >> Databasteknik >  >> RDS >> Mysql

Hur man går med två tabeller i MySQL

I den tidigare delen av denna MySQL-serie demonstrerade jag hur du kan hämta data med hjälp av MySQL-klausuler. I den här delen kommer vi att lära oss om Joins-funktionen i MySQL, varför de används och hur man använder dem. Låt oss komma igång.

Hur kan jag länka två tabeller i MySQL

MySQL Joins låter dig komma åt data från flera tabeller. En MySQL Join utförs när två eller flera tabeller sammanfogas i en SQL-sats. MySQL Joins inkluderar:MySQL Inner Join (även känd som Simple Join), MySQL Left Outer Join (även kallad Left Join, den returnerar matchande poster från den vänstra tabellen), Right Join (detta returnerar de matchande posterna från höger tabell) och Full Join (detta returnerar matchande poster från alla tabeller). Genom att använda MySQL JOINs kommer du att kunna gå med i fler än två bord.

I MySQL är Inner Join Standard Join. På givna sökord vid den tidpunkten väljer den alla rader från båda tabellerna, så länge det finns en koordinat mellan kolumnerna i båda tabellerna.

Till skillnad från SQL betraktar MySQL inte Outer Join som en separat Join-typ. För att få samma resultat som Outer Join måste du gå med i Left Outer Join och Right Outer Join.

Hur många tabeller kan anslutas i MySQL

Enligt den officiella dokumentationen för MySQL 8.0 är det maximala antalet tabeller i en JOIN-sats 61. Observera dock att JOIN-satser kan kräva mycket serverresurser när antalet tabeller ökar. Om detta är fallet med din fråga rekommenderar jag starkt att dela upp den i flera frågor för att minska belastningen på servern.

Låt oss börja med att lägga till en ny tabell i vår databas som kommer att innehålla meddelandet tillsammans med användar-ID som har skickat detta meddelande, vi kommer att namnge det meddelanden. Schemat för vår tabell är:

SKAPA TABELL `meddelanden` (

 `id` int(11) NOT NULL,

 `meddelande` varchar(255) INTE NULL

)

Vi kommer att använda samma selectdata-funktion som vi har skapat i vår crud.php fil. Låt oss nu börja genom att slå samman dessa två bord. Du kan också fylla ditt bord så att du kan träna på det.


Sluta slösa tid på servrar

Cloudways hanterar serverhantering åt dig så att du kan fokusera på att skapa fantastiska appar och hålla dina kunder nöjda.

Börja gratis

Inner Join

Inner Join sammanfogar tabellen på ett sådant sätt att den bara visar de resultat som matchar villkoret som ges och döljer andra. Strukturen för Inner Join-frågor är:

VÄLJ kolumnnamn

FRÅN tabell1

INNER JOIN-tabell2

PÅ table1.column_name=table2.column_name;

Inner Join och Simple Join båda är samma. Du kan också skriva din fråga så här:

VÄLJ kolumnnamn

FRÅN tabell1

GÅ MED tabell 2

PÅ table1.column_name=table2.column_name;

Låt oss nu hämta namnet och meddelandet från vår databas med hjälp av Inner join. Frågan blir så här

$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 används för att sammanfoga två strängkolumner i MySQL. Öppna nu din index.php som vi har skapat tidigare, kopiera följande kod 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ör den här sidan på din PHP-webbhotellserver kommer ditt resultat att se ut så här:

Som du tydligt kan se har det bara returnerat de resultat som matchar user_id och där meddelanden är inte null.

RÄTT GÅ MED

RIGHT JOIN förenar de två tabellerna på ett sådant sätt att det returnerar allt värde från höger och matchat värde från vänster tabeller och även returnerar null på vänster tabell när det inte finns någon matchning. Strukturen för RIGHT JOIN är:

VÄLJ kolumnnamn

FRÅN tabell1

RIGHT JOIN table2

PÅ table1.column_name=table2.column_name;

Låt oss nu hämta namnet och meddelandet från vår databas som gör meddelanden i vår högra tabell och myguests i vårt vänstra bord.

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

Öppna nu index.php och ersätt $sql fråga med ovanstående. När du kör det blir resultatet:

Om du tittar på meddelanden tabell, kommer du att se några ID:n som inte matchar något användar-ID, det är därför den här frågan returnerar null i namn- och e-postkolumnen där den inte hittar någon matchning i vänstra kolumnen.

LEFT JOIN

LEFT Joins förenar de två tabellen på ett sådant sätt att den returnerar allt värde från vänster och matchat värde från höger tabeller och även returnerar null på höger tabell när det inte finns någon matchning. Strukturen för LEFT JOIN är:

VÄLJ kolumnnamn

FRÅN tabell1

LEFT JOIN table2

PÅ table1.column_name=table2.column_name;

Låt oss nu hämta namnet och meddelandet från vår databas som gör meddelanden i vårt högra bord och myguests in vårt vänstra bord.

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

Öppna nu index.php och fråga istället för $sql med ovanstående. När du kör det blir resultatet:

Om du tittar på meddelanden tabell, hittar du några ID:n som inte matchar något användar-ID, det är därför den här frågan returnerar null i meddelandekolumnen där den inte hittar någon matchning i höger kolumn.

UNION

UNION i MySQL används för att sammanföra flera kolumner från olika tabeller till en enda kolumn. Strukturen för UNION-frågan för att välja unika värden är:

VÄLJ kolumnnamn(n) FRÅN tabell1

UNION

VÄLJ kolumnnamn(n) FRÅN tabell2;

Och för att välja upprepade värden från kolumner är:

VÄLJ kolumnnamn(n) FRÅN tabell1

UNION ALLA

VÄLJ kolumnnamn(n) FRÅN tabell2;

Låt oss nu hämta ID:n från våra bord.

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

Öppna nu index.php och ersätt $sql fråga med ovanstående. När du kör det blir resultatet:

Frågan har hämtat oss alla unika ID:n som finns i båda tabellerna.

Cross JOIN eller kartesisk produkt

Denna typ av JOIN returnerar den kartesiska produkten av rader från tabellerna i Join. Den returnerar en tabell som består av poster som kombinerar varje rad från den första tabellen med varje rad i den andra tabellen.

Cross JOIN Syntax är,

SELECT column-name-list

from table-name1

CROSS JOIN

table-name2;

Själv JOIN

En self JOIN är en vanlig join, men tabellen är sammanfogad med sig själv.

SELECT column_name(s)

FROM table1 T1, table1 T2

WHERE condition;

FULLSTÄNDIG YTTRE JOIN

Nyckelordet FULL OUTER JOIN returnerar alla poster när det finns en matchning i antingen vänster (tabell1) eller höger (tabell2) tabellposter.

Notera:FULLSTÄNDIG YTTRE JOIN kan potentiellt returnera mycket stora resultat!

SELECT column_name(s)

FROM table1

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

Slå ihop flera tabeller

I de tidigare bloggarna har du lärt dig hur du sammanfogar två tabeller med hjälp av olika SQL-anslutningsfrågor. Men om du arbetar med en stor applikation, det vill säga att bygga en e-handelsbutik och skapa flera tabeller i den som kunder, beställningar och produkter, kan komplexiteten i att slå samman tabeller definitivt uppstå. För att reda ut detta måste du få alla produkter beställda av specifika kunder. Schemat är detsamma, så jag förklarar det inte här. Låt oss se frågan:

SELECT * FROM table1

LEFT JOIN table2

ON table2.id = table1.id

LEFT JOIN table3

ON table3.id = table1.id

Vi förenar först tabell 1 och tabell 2 som levererar en temporär tabell med kombinerad data från tabell1 och tabell2, som vid den tidpunkten är sammanfogad med tabell3. Den här ekvationen kan utökas till fler än 3 tabeller till N tabeller. Du behöver bara se till att SQL-frågan borde ha N-1 join-sats för att förena N tabeller.

Ovanstående fråga låter dig matcha raderna från tabell1 (i alla fall) med raderna i andra två tabeller. Genom att använda LEFT JOIN kan du sammanfoga tabell2 och tabell3 med tabell1 (inte bara tabell2 med tabell1 och tabell3 med tabell2).
Du kan också lägga till villkor som WHERE, AND och 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

Slutsats:

I den här handledningen lärde vi oss om kopplingar som används mycket i relationsdatabaser. Joins används inte bara för bara två bord och du kan slå samman fler än två bord med samma teknik. I den åtta och sista delen av den här MySQL-serien kommer jag att diskutera hur man använder Regular Expressions (REGEX) för att hämta och sortera data i MySQL. För det, prenumerera på vårt bloggnyhetsbrev så kan du också registrera dig för vår Managed PHP Stack och börja testa dessa handledningar på våra PHP-optimerade servrar.

Vanliga frågor

F. Hur sammanfogar jag två bord?

Svar: Att sammanfoga två tabeller i SQL kan göras på fyra huvudsakliga sätt:Inner Join (returnerar rader med matchande kolumner), Left Join (ALLA poster i den vänstra tabellen och matchande poster i den högra tabellen), Right Join (ALLA poster i den högra tabellen). och matchande poster i den vänstra tabellen), och Union (tar bort dubbletter).

F. Vilket SQL-kommando kan du använda för att sammanfoga två tabeller?

Svar: Två tabeller kan sammanfogas med INNER JOIN-satsen som returnerar matchande poster från båda tabellerna.

F. Hur sammanfogar jag två tabeller i SQL utan joins?

Svar: Du kan använda följande sats för att sammanfoga tabeller utan att faktiskt använda JOIN-satsen

SELECT *

FROM TableA a, TableB b


  1. SQL*Plus kör inte SQL-skript som SQL Developer gör

  2. Ställer du in främmande nycklar i phpMyAdmin?

  3. Förstå Amazon Auroras Multi-AZ-distribution

  4. Hur man utför rullande uppgraderingar för MySQL