Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да обедините две таблици в MySQL

В предишната част от тази серия MySQL демонстрирах как можете да извличате данни с помощта на MySQL клаузи. В тази част ще научим за функцията Joins в MySQL, защо се използват и как да ги използваме. Да започваме.

Как мога да свържа две таблици в MySQL

MySQL Joins ви позволява да получите достъп до данни от множество таблици. MySQL Join се извършва всеки път, когато две или повече таблици се обединят в SQL израз. MySQL Join включва:MySQL Inner Join (известен също като Simple Join), MySQL Left Outer Join (наричан още Left Join, връща съвпадащи записи от лявата таблица), Right Join (това връща съвпадащите записи от дясна таблица) и пълното присъединяване (това връща съвпадащи записи от всички таблици). С помощта на MySQL JOIN ще можете да се присъедините към повече от две таблици.

В MySQL, Inner Join е присъединяването по подразбиране. При дадени ключови думи в този момент той избира всички редове от двете таблици, стига да има координата между колоните и в двете таблици.

За разлика от SQL, MySQL не разглежда Outer Join като отделен тип Join. За да получите същите резултати като Outer Join, трябва да се присъедините към Left Outer Join и Right Outer Join.

Колко таблици могат да бъдат обединени в MySQL

Според официалната документация на MySQL 8.0, максималният брой таблици в оператор JOIN е 61. Обърнете внимание обаче, че JOIN операторите може да изискват много сървърни ресурси, тъй като броят на таблиците се увеличава. Ако случаят с вашата заявка е такъв, силно препоръчвам да я разделите на няколко заявки, за да намалите натоварването на сървъра.

Нека започнем с добавяне на нова таблица в нашата база данни, която ще съдържа съобщението заедно с потребителския идентификатор, който е изпратил това съобщение, ще го наречем съобщения. Схемата на нашата таблица е:

СЪЗДАВАНЕ НА ТАБЛИЦА `съобщения` (

 `id` int(11) НЕ НУЛЕВО,

 `съобщение` varchar(255) НЕ НУЛЕВО

)

Ще използваме същата функция selectdata който създадохме в нашия crud.php файл. Сега нека започнем, като обединим тези две таблици. Можете също да попълните масата си, за да можете да я практикувате.


Спрете да губите време на сървъри

Cloudways се занимава с управлението на сървъра вместо вас, за да можете да се съсредоточите върху създаването на страхотни приложения и да поддържате клиентите си щастливи.

Започнете безплатно

Вътрешно присъединяване

Inner Join свързва таблицата по такъв начин, че показва само онези резултати, които отговарят на даденото условие и скрива други. Структурата на заявките за вътрешно присъединяване е:

ИЗБЕРЕТЕ име(я) на колона

ОТ таблица1

INNER JOIN таблица2

ВКЛЮЧЕНО table1.column_name=table2.column_name;

Inner Join и простото присъединяване и двете са еднакви. Можете също да напишете вашата заявка по следния начин:

ИЗБЕРЕТЕ име(я) на колона

ОТ таблица1

Присъединете се към таблица 2

ВКЛЮЧЕНО table1.column_name=table2.column_name;

Сега нека извлечем името и съобщението от нашата база данни, използвайки Inner join. Заявката ще бъде така

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

CONCAT функцията се използва за свързване на две колони низове в MySQL. Сега отворете вашия index.php, който създадохме преди, копирайте в него следния код.

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

?>

Когато стартирате тази страница на вашия PHP уеб хостинг сървър, резултатът ви ще изглежда така:

Както можете ясно да видите, той е върнал само онези резултати, които съответстват на user_id и където съобщения не е нула.

ДЯСНО ПРИСЪЕДИНЕНЕ

RIGHT JOIN свързва двете таблици по такъв начин, че връща цялата стойност от дясната и съвпадащата стойност от левите таблици и също така връща null в лявата таблица, когато няма намерено съвпадение. Структурата на DIGHT JOIN е:

ИЗБЕРЕТЕ име(я) на колона

ОТ таблица1

ДЯСНО ПРИСЪЕДИНЯВАНЕ таблица2

ВКЛЮЧЕНО table1.column_name=table2.column_name;

Сега нека извлечем името и съобщението от нашата база данни, като правим съобщения в дясната ни маса и моите гости в лявата ни маса.

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

Сега отворете index.php и заменете $sql запитване с горното. Когато го стартирате, резултатът ви ще бъде:

Ако погледнете съобщенията таблицата, ще видите някои идентификатори, които няма да съвпадат с нито един потребителски идентификатор, затова тази заявка връща нула в колоната за име и имейл, където няма да намери съвпадение в лявата колона.

ЛЯВО ПРИСЪЕДИНЯВАНЕ

LEFT Joins свързва двете таблици по такъв начин, че връща цялата стойност от лявата и съвпадащата стойност от десните таблици и също така връща null в дясната таблица, когато няма намерено съвпадение. Структурата на LEFT JOIN е:

ИЗБЕРЕТЕ име(я) на колона

ОТ таблица1

LEFT JOIN table2

ВКЛЮЧЕНО table1.column_name=table2.column_name;

Сега нека да извлечем името и съобщението от нашата база данни, като правим съобщения в дясната ни маса и моите гости в лявата ни маса.

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

Сега отворете index.php и направете заявка на мястото на $sql с горното. Когато го стартирате, резултатът ви ще бъде:

Ако погледнете съобщенията ще намерите някои идентификатори, които няма да съвпадат с нито един потребителски идентификатор, поради което тази заявка връща null в колоната Message, където няма да намери съвпадение в дясната колона.

СЪЮЗ

UNION в MySQL се използва за обединяване на множество колони от различна таблица в една колона. Структурата на заявката UNION за избор на уникални стойности е:

ИЗБЕРЕТЕ имена на колони ОТ таблица1

СЪЮЗ

ИЗБЕРЕТЕ име(я) на колона ОТ таблица 2;

А за избор на повтарящи се стойности от колони е:

ИЗБЕРЕТЕ имена на колони ОТ таблица1

СЪЮЗ ВСИЧКИ

ИЗБЕРЕТЕ име(я) на колона ОТ таблица 2;

Сега нека извлечем идентификационните номера от нашите таблици.

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

Сега отворете index.php и заменете $sql запитване с горното. Когато го стартирате, резултатът ви ще бъде:

Заявката ни извлече всички уникални идентификатори, които се намират и в двете таблици.

Кръстосано присъединяване или декартов продукт

Този тип JOIN връща декартовото произведение на редовете от таблиците в Join. Той ще върне таблица, която се състои от записи, които комбинират всеки ред от първата таблица с всеки ред от втората таблица.

Синтаксисът на кръстосано JOIN е,

SELECT column-name-list

from table-name1

CROSS JOIN

table-name2;

Самоприсъединяване

Самоприсъединяването е редовно присъединяване, но таблицата се присъединява към себе си.

SELECT column_name(s)

FROM table1 T1, table1 T2

WHERE condition;

ПЪЛНО ВЪНШНО ПРИСЪЕДИНЕНЕ

Ключовата дума FULL OUTER JOIN връща всички записи, когато има съвпадение в записите на таблицата вляво (таблица1) или вдясно (таблица2).

Забележка:FULL OUTER JOIN може потенциално да върне много големи набори от резултати!

SELECT column_name(s)

FROM table1

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

Присъединете се към няколко таблици

В предишните блогове научихте как да обедините две таблици заедно, като използвате различни SQL заявки за присъединяване. Но ако работите върху голямо приложение, т.е. изграждате магазин за електронна търговия и създавате множество таблици в него, като клиенти, поръчки и продукти, определено може да възникне сложността при свързването на таблици. За да разрешите това, трябва да получите всички продукти, поръчани от конкретни клиенти. Схемата е същата, така че не я декларирам тук. Нека видим заявката:

SELECT * FROM table1

LEFT JOIN table2

ON table2.id = table1.id

LEFT JOIN table3

ON table3.id = table1.id

Първо се присъединяваме към таблица 1 и таблица 2, които доставят временна таблица с комбинирани данни от таблица 1 и таблица 2, която в този момент е присъединена към таблица 3. Това уравнение може да бъде разширено до повече от 3 таблици до N таблици. Просто трябва да се уверите, че SQL заявката трябва да има N-1 оператор за присъединяване в подреждане за присъединяване на N таблици.

Горната заявка ще ви позволи да съпоставите редовете от table1 (във всеки случай) с редовете на други две таблици. Използването на LEFT JOIN ви позволява да свържете таблица2 и таблица3 с таблица1 (не само таблица2 с таблица1 и таблица3 с таблица2).
Можете също да добавите условия като WHERE, AND и 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

Заключение:

В този урок научихме за съединенията, които се използват много в релационни бази данни. Съединенията не се използват само за две маси и можете да се присъедините към повече от две маси, като използвате една и съща техника. В осмата и последна част от тази серия MySQL ще обсъдя как да използвам регулярни изрази (REGEX) за извличане и сортиране на данни в MySQL. За целта се абонирайте за нашия бюлетин на блога и можете да се регистрирате и за нашия управляван PHP стек и да започнете да тествате тези уроци на нашите PHP оптимизирани сървъри.

често задавани въпроси

В. Как да съединя две маси заедно?

Отговор: Обединяването на две таблици в SQL може да се извърши по четири основни начина:Inner Join (връща редове със съвпадащи колони), Left Join (ВСИЧКИ записи в лявата таблица и съвпадащи записи в дясната таблица), Right Join (ВСИЧКИ записи в дясната таблица и съвпадащи записи в лявата таблица) и Union (премахва дубликати).

В. Каква SQL команда можете да използвате за свързване на две таблици?

Отговор: Две таблици могат да бъдат обединени с помощта на оператора INNER JOIN, който връща съвпадащи записи от двете таблици.

В. Как да съединя две таблици в SQL без обединения?

Отговор: Можете да използвате следния израз, за ​​да обедините таблици, без всъщност да използвате оператора JOIN

SELECT *

FROM TableA a, TableB b


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. DAY() Примери – MySQL

  2. Кумулативна сума за набор от редове в mysql

  3. Как да се свържете с MySQL източник на данни във Visual Studio

  4. Изтрийте с Join в MySQL

  5. Типове в MySQL:BigInt(20) срещу Int(20)