Привет, ребята, когда дело доходит до объединения двух таблиц в SQL, многие программисты не знают, что они могут использовать предложение JOIN. На самом деле JOIN существует для того, чтобы извлекать данные из нескольких таблиц вместе. Существует в основном два типа соединений: внутреннее соединение и внешнее соединение. При внутреннем соединении, выбираются только те записи, которые имеют совпадающие значения в обеих таблицах, в то время как при внешнем соединении все записи из одной таблицы выбираются в дополнение к совпадающим записям из других таблиц. В SQL существует два вида внешнего соединения: левое внешнее соединение и правое внешнее соединение. На самом деле это одно и то же, а значит, вы можете получить один и тот же результат, используя любое из внешних соединений, просто изменив положение таблицы слева направо.
Есть две таблицы человека и адреса, как показано ниже :
таблица: Person
+——————+———+
| Column Name | Type |
+——————+———+
| PersonId | int |
| FirstName | varchar |
| LastName | varchar |
+——————+———+
PersonId — это столбец первичного ключа для этой таблицы.
Таблица: Address
+——————+———+
| Column Name | Type |
+——————+———+
| AddressId | int |
| PersonId | int |
| City | varchar |
| State | varchar |
+——————+———+
AddressId-это столбец первичного ключа для этой таблицы.
Проблема-напишите SQL-запрос для отчета, который предоставляет следующую информацию для каждого человека в таблице Person, независимо от того, есть ли адрес для каждого из этих людей:
FirstName, LastName, City, State
Вы можете решить эту проблему, используя левое или правое внешнее соединение, потому что вам нужно объединить здесь две таблицы, чтобы получить как имена, так и адресную информацию.
SQL Joins — это одна из сложных, но важных концепций для изучения, и прохождение этого курса поможет вам научиться более структурированно, что в конечном итоге поможет вам быстро решить такого рода проблемы, как на работе, так и на собеседованиях по кодированию.
Как мы уже говорили, мы можем решить эту проблему, объединив как таблицу Person, так и таблицу Address. Вы можете использовать либо внутреннее соединение, либо внешнее соединение, чтобы объединить таблицу, но здесь важно отметить, что вам нужно распечатать записи для каждого человека в таблице Person, независимо от того, есть ли адрес или нет.
Это означает, что вы не можете решить эту проблему с помощью INNER join, потому что если вы использовали INNER join, то будут напечатаны только люди с адресом. Если нам нужно напечатать всех людей с адресом или без адреса, то нам нужно использовать левое соединение (Person LEFT JOIN Address) или правое соединение (Address RIGHT JOIN Person).
В этом примере мы будем использовать левое соединение, потому что это гораздо легче читать
Вот решение этой проблемы SQL :
SELECT FirstName, LastName, City, State FROM Person p LEFT JOIN Address a ON p.PersonId = a.PersonId
Вы также можете написать этот запрос, как показано на слове OUTER, это необязательно в MySQL, что означает, что будет работать как LEFT JOIN, так и LEFT OUTER JOIN.
SELECT FirstName, LastName, City, State FROM Person p LEFT OUTER JOIN Address a ON p.PersonId = a.PersonId
Тот же самый запрос можно написать и с помощью правого внешнего соединения. Вот как вы это делаете:
SELECT FirstName, LastName, City, State FROM Address a RIGHT OUTER JOIN Person p ON a.PersonId = p.PersonId
Этот запрос выдаст тот же результат, что и два предыдущих запроса. Если вы посмотрите внимательно, то мы поменялись позицией персоны и адресной таблицей в этом запросе. Раньше Person был на левой стороне, но теперь из-за правого соединения он находится на правой стороне.
Соединения — это трюк, и их так много, что их нужно выучить, но эта диаграмма хороший способ выучить их, ведь SQL — это один из основных навыков как для программистов, так и для специалистов по обработке данных.
Это все о том, как объединить таблицы в SQL с помощью левого и правого внешних соединений. Просто помните, что если вам нужны только совпадающие записи из обеих таблиц, то используйте внутреннее соединение, если вам нужны все записи из одной таблицы в дополнение к совпадающим записям из другой таблицы, то, пожалуйста, используйте внешнее соединение в SQL.
Вы можете использовать левые или правые соединения по своему усмотрению, но если вы используете LEFT OUTER JOIN, убедитесь, что вы поместили правую таблицу на левую сторону предложения JOIN, как таблицу, из которой вам нужны все записи.