Join sql примеры: JOIN (SQL) — что это за оператор, примеры использования

JOIN — Учебник SQL — Schoolsw3.com

schoolsw3.com

САМОСТОЯТЕЛЬНОЕ ОБУЧЕНИЕ ДЛЯ ВЕБ РАЗРАБОТЧИКОВ


❮ Назад Далее ❯


JOIN

Предложение JOIN используется для объединения строк из двух или более таблиц на основе связанного столбца между ними.

Давайте рассмотрим выборку из таблицы «Orders»:

OrderIDCustomerIDOrderDate
1030821996-09-18
10309371996-09-19
10310771996-09-20

Затем посмотрите на выборку из таблицы «Customers»:

CustomerIDCustomerNameContactNameCountry
1Alfreds FutterkisteMaria AndersGermany
2Ana Trujillo Emparedados y heladosAna TrujilloMexico
3Antonio Moreno TaqueríaAntonio Moreno
Mexico

Обратите внимание, что столбец «CustomerID» в таблице «Orders» ссылается на «CustomerID» в таблице «Customers». Связь между двумя приведенными выше таблицами представляет собой столбец «CustomerID».

Затем мы можем создать следующий заявление SQL (содержащий внутреннее соединение), который выбирает записи, имеющие совпадающие значения в обеих таблицах:

Пример

SELECT Orders.OrderID, Customers.CustomerName, Orders.OrderDate
FROM Orders
INNER JOIN Customers ON Orders.CustomerID=Customers.CustomerID;

Попробуйте сами »

и он будет производить что-то вроде этого:

OrderIDCustomerNameOrderDate
10308Ana Trujillo Emparedados y helados9/18/1996
10365Antonio Moreno Taquería11/27/1996
10383Around the Horn12/16/1996
10355Around the Horn11/15/1996
10278Berglunds snabbköp8/12/1996

Различные типы соединений SQL

Вот различные типы соединений в SQL:

  • (INNER) JOIN: Возвращает записи, имеющие совпадающие значения в обеих таблицах
  • LEFT (OUTER) JOIN: Возвращает все записи из левой таблицы и совпадающие записи из правой таблицы
  • RIGHT (OUTER) JOIN: Возвращает все записи из правой таблицы и совпадающие записи из левой таблицы
  • FULL (OUTER) JOIN: Возвращает все записи при наличии совпадения в левой или правой таблице

     


Проверьте себя с помощью упражнений

Упражнение:

Вставьте недостающие части в предложение JOIN, чтобы объединить две таблицы Orders и Customers, используя поле CustomerID в обеих таблицах в качестве отношения между двумя таблицами.

SELECT *
FROM Orders
LEFT JOIN Customers
=
;

Начните упражнение

❮ Назад Далее ❯

ВЫБОР ЦВЕТА



ТОП Учебники
HTML Учебник
CSS Учебник
JavaScript Учебник
КАК Учебник
SQL Учебник
Python Учебник
W3.CSS Учебник
Bootstrap Учебник
PHP Учебник
Java Учебник
C++ Учебник
jQuery Учебник
ТОП Справочники
HTML Справочник
CSS Справочник
JavaScript Справочник
SQL Справочник
Python Справочник
W3.CSS Справочник
Bootstrap Справочник
PHP Справочник
HTML Цвета
Java Справочник
Angular Справочник
jQuery Справочник
ТОП Примеры
HTML Примеры
CSS Примеры
JavaScript Примеры
КАК Примеры
SQL Примеры
Python Примеры
W3.CSS Примеры
Bootstrap Примеры
PHP Примеры
Java Примеры
XML Примеры
jQuery Примеры

Форум | О SchoolsW3

SchoolsW3 оптимизирован для бесплатного обучения, проверки и подготовки знаний.

Примеры в редакторе упрощают и улучшают чтение и базовое понимание. Учебники, ссылки, примеры постоянно пересматриваются, чтобы избежать ошибок, но не возможно гарантировать полную правильность всего содержания. Некоторые страницы сайта могут быть не переведены на РУССКИЙ язык, можно отправить страницу как ошибку, так же можете самостоятельно заняться переводом. Используя данный сайт, вы соглашаетесь прочитать и принять Условия к использованию, Cookies и политика конфиденциальности.

Авторское право 1999- Все права защищены.
SchoolsW3 работает на площадке от SW3.CSS.

Примеры использования SQL Server JOIN

Данный материал является переводом оригинальной статьи «MSSQLTips : Jeremy Kadlec : SQL Server Join Example».

Вы новичок в Microsoft SQL Server и хотите узнать о параметрах JOIN для реляционной базы данных? Каковы все параметры JOIN в SQL Server и в чем значение каждого из них? Вы хотите получить несколько примеров и объяснений? Ознакомьтесь с этой небольшой статьёй, чтобы получить ответы на некоторые вопросы и узнать о синтаксисе SQL Server JOIN.

Объединение таблиц для получения необходимых данных для запроса, скрипта или хранимых процедур является ключевым понятием в разработке на базе SQL Server. Кратко обозначим, что соединения JOIN обычно выполняются в предложении FROM таблицы или представления для выражений SELECT, INSERT…SELECT, SELECT…INTO, UPDATE и DELETE . В предыдущих версиях SQL Server, логику соединения также можно было включить в выражение WHERE с синтаксисом = (INNER JOIN), = (LEFT OUTER JOIN), = (RIGHT OUTER JOIN), и т.д., но поддержка была сокращена, и лучшая практика в SQL Server — использовать синтаксис, описанный в примерах ниже.

Прежде чем мы перейдем к коду, давайте предоставим некоторую базовую информацию о типах JOIN в SQL Server:

  • INNER JOIN — сопоставление строки между двумя таблицами, указанными в операторе INNER JOIN, на основе одного или нескольких столбцов, имеющих совпадающие данные — Equi Join. Предпочтительно соединение основано на ссылочной целостности, обеспечивающей взаимосвязь между таблицами для обеспечения целостности данных.
    • В целом параметр INNER JOIN считается наиболее распространенным соединением, необходимым в приложениях и/или запросах. Хотя это так в некоторых средах, это действительно зависит от дизайна базы данных, ссылочной целостности и данных, необходимых для приложения. Таким образом, найдите время, чтобы понять запрашиваемые данные, а затем выберите правильный вариант соединения.
    • Хотя большая часть логики соединения основана на сопоставлении значений между двумя указанными столбцами, можно также включить логику с использованием больше, меньше, не равно и т. д.
  • LEFT OUTER JOIN – на основе двух таблиц, указанных в предложении соединения, все данные возвращаются из левой таблицы. В правой таблице соответствующие данные возвращаются в дополнение к значениям NULL, если запись существует в левой таблице, но не в правой таблице.
    • Еще один момент, о котором следует помнить, это то, что логика LEFT и RIGHT OUTER JOIN противоположна друг другу. Таким образом, вы можете изменить либо порядок таблиц в конкретном операторе соединения, либо изменить JOIN слева направо или наоборот и получить те же результаты.
  • RIGHT OUTER JOIN — на основе двух таблиц, указанных в предложении соединения, все данные возвращаются из правой таблицы. В левой таблице соответствующие данные возвращаются в дополнение к значениям NULL, если запись существует в правой таблице, но не в левой таблице.
  • SELF JOIN — в этом случае одна и та же таблица указывается дважды с двумя разными псевдонимами для сопоставления данных в одной и той же таблице.
  • CROSS JOIN — на основе двух таблиц, указанных в предложении соединения, создается декартово произведение, если предложение WHERE фильтрует строки. Размер декартова произведения основан на умножении количества строк из левой таблицы на количество строк в правой таблице. Будьте осторожны при использовании CROSS JOIN.
  • FULL JOIN — на основе двух таблиц, указанных в предложении соединения, все данные возвращаются из обеих таблиц независимо от совпадающих данных.

Давайте рассмотрим примеры из демонстрационной базы данных

AdventureWorks, доступной для SQL Server, чтобы предоставить примеры операторов SQL для каждого типа JOIN, а затем дать некоторое представление об использовании и примерах наборов результатов.

 

Пример SQL Server INNER JOIN

В следующем запросе у нас есть предложение INNER JOIN между таблицами Sales.SalesOrderDetail и Production.Product. Таблицы имеют следующие псевдонимы: SOD для Sales.SalesOrderDetail и P для Production.Product. Условие JOIN основано на совпадении строк в столбцах SOD.ProductID и P.ProductID. Записи фильтруются, возвращая только записи с SOD.UnitPrice (имя столбца) больше 1000. Наконец, набор результатов возвращается в порядке, начиная с самого дорогого на основе предложения ORDER BY и только самых высоких 100 продуктов на основе предложения TOP.

USE MSSQLTips; 
GO 
SELECT TOP 100 P.ProductID, 
 P.Name, 
 P.ListPrice, 
 P.Size, 
 P.ModifiedDate, 
 SOD.UnitPrice, 
 SOD.
UnitPriceDiscount, SOD.OrderQty, SOD.LineTotal FROM Sales.SalesOrderDetail SOD INNER JOIN Production.Product P ON SOD.ProductID = P.ProductID WHERE SOD.UnitPrice > 1000 ORDER BY SOD.UnitPrice DESC GO

 

Пример SQL Server LEFT OUTER JOIN

В следующем запросе мы покажем то, что в одном операторе SELECT можно объединить более двух таблиц и можно использовать более одного типа JOIN. В приведенном ниже примере кода мы получаем совпадающие строки между таблицами Person.Contact и Sales.SalesPerson вместе со всеми данными из таблицы Sales.SalesPerson и совпадающими строками в таблице Sales.SalesTerritory. Для записей, которые существуют в таблице Sales.SalesPerson, а не в таблице Sales.SalesTerritory, для столбцов в Sales.SalesTerritory возвращаются значения NULL. Кроме того, этот код использует два столбца для упорядочивания данных, то есть ST.TerritoryID и C.LastName.

USE MSSQLTips;
GO
SELECT  C.ContactID,
 C.FirstName,
 C.LastName,
 SP.SalesPersonID,
 SP.
CommissionPct, SP.SalesYTD, SP.SalesLastYear, SP.Bonus, ST.TerritoryID, ST.Name, ST.[Group], ST.SalesYTD FROM Person.Contact C INNER JOIN Sales.SalesPerson SP ON C.ContactID = SP.SalesPersonID LEFT OUTER JOIN Sales.SalesTerritory ST ON ST.TerritoryID = SP.TerritoryID ORDER BY ST.TerritoryID, C.LastName GO

 

Пример SQL Server RIGHT OUTER JOIN

Чтобы показать то, как RIGHT OUTER JOIN и LEFT OUTER JOIN логически исключают друг друга, следующий запрос является переписанной версией LEFT OUTER JOIN, описанного выше. Как видите, порядок JOIN и таблицы различаются, но конечный набор результатов соответствует логике LEFT OUTER JOIN. В приведенном ниже примере кода мы получаем совпадающие строки между таблицами Person.Contact и Sales.SalesPerson вместе со всеми данными из таблицы Sales.SalesPerson и совпадающими строками в таблице Sales.SalesTerritory. Для записей, которые существуют в таблице Sales.SalesPerson, а не в таблице Sales.SalesTerritory, для столбцов в Sales. SalesTerritory возвращаются значения NULL.

USE MSSQLTips;
GO 
SELECT  C.ContactID, 
 C.FirstName, 
 C.LastName, 
 SP.SalesPersonID,
 SP.CommissionPct,
 SP.SalesYTD,
 SP.SalesLastYear,
 SP.Bonus,
 ST.TerritoryID,
 ST.Name, ST.[Group],
 ST.SalesYTD 
FROM Sales.SalesTerritory ST 
RIGHT OUTER JOIN Sales.SalesPerson SP 
 ON ST.TerritoryID = SP.TerritoryID 
INNER JOIN Person.Contact C 
 ON C.ContactID = SP.SalesPersonID 
ORDER BY ST.TerritoryID, C.LastName
GO

 

Пример SQL Server SELF JOIN

В этом примере мы фактически присоединяемся к таблице HumanResources.Employee. Мы делаем это, чтобы получить информацию об отношениях Employee и Manager в таблице HumanResources.Employee. В сочетании с этой логикой JOIN мы также дважды присоединяемся к Person.Contact, чтобы получить данные об имени и заголовке на основе исходных отношений Employee и Manager. Кроме того, еще одна новая концепция, представленная в этом запросе, — это псевдоним каждого из имен столбцов. Хотя мы могли сделать это в предыдущих примерах, мы сделали это в этом запросе, чтобы различать данные, связанные с сотрудником и менеджером.

USE MSSQLTips;
GO
SELECT  M.ManagerID AS 'ManagerID',
 M1.ContactID AS 'ManagerContactID',
 M1.FirstName AS 'ManagerFirstName',
 M1.LastName AS 'ManagerLastName',
 M.Title AS 'ManagerTitle',
 E.EmployeeID AS 'EmployeeID',
 E1.ContactID AS 'EmployeeContactID',
 E1.FirstName AS 'EmployeeFirstName',
 E1.LastName AS 'EmployeeLastName',
 E.Title AS 'EmployeeTitle'
FROM HumanResources.Employee E 
INNER JOIN HumanResources.Employee M 
 ON E.ManagerID = M.EmployeeID 
INNER JOIN Person.Contact E1 
 ON E1.ContactID = E.ContactID 
INNER JOIN Person.Contact M1 
 ON M1.ContactID = M.ContactID
ORDER BY M1.LastName
GO

 

Пример SQL Server CROSS JOIN

Как сказано ранее, следует соблюдать осторожность при выполнении или изменении этого запроса в любой среде базы данных SQL Server. Набор результатов намеренно ограничен предложением TOP 100 и предложением WHERE, чтобы предотвратить декартово произведение, которое является результатом умножения каждой из строк из левой таблицы на количество строк в правой таблице.

USE MSSQLTips; 
GO 
SELECT  TOP 100 P.ProductID, 
 P.Name, 
 P.ListPrice, 
 P.Size, 
 P.ModifiedDate, 
 SOD.UnitPrice, 
 SOD.UnitPriceDiscount,
 SOD.OrderQty,
 SOD.LineTotal 
FROM Sales.SalesOrderDetail SOD 
CROSS JOIN Production.Product P 
WHERE SOD.UnitPrice > 3500 
ORDER BY SOD.UnitPrice DESC
GO

 

Пример SQL Server FULL OUTER JOIN

В нашем последнем примере мы изменили логику из приведенного выше примера LEFT OUTER JOIN и преобразовали синтаксис в FULL OUTER JOIN. В этом случае набор результатов такой же, как LEFT OUTER JOIN, где мы возвращаем все данные между обеими таблицами, а данные, недоступные в Sales.SalesTerritory, возвращаются как NULL.

USE MSSQLTips;
GO
SELECT  C.ContactID,
 C.FirstName,
 C.LastName,
 SP.SalesPersonID,
 SP.CommissionPct,
 SP.SalesYTD,
 SP.SalesLastYear,
 SP.Bonus,
 ST.TerritoryID,
 ST.Name,
 ST.[Group],
 ST.SalesYTD
FROM Person.Contact C
INNER JOIN Sales.SalesPerson SP
 ON C.ContactID = SP.SalesPersonID
FULL OUTER JOIN Sales. SalesTerritory ST 
 ON ST.TerritoryID = SP.TerritoryID
ORDER BY ST.TerritoryID, C.LastName
GO

 

Следующие шаги

Когда вы начнете писать код на SQL Server, убедитесь, что у вас есть четкое представление о доступных параметрах JOIN, а также о связанных с ними данных, которые извлекаются. Обязательно выберите правильную логику JOIN на основе данных, которые необходимо получить.

После того, как вы твердо усвоите логику JOIN с помощью операторов SELECT, переходите к использованию логики с выражениями INSERT…SELECT, SELECT…INTO, UPDATE и DELETE.

В процессе обучения обязательно ознакомьтесь с некоторыми альтернативами JOIN, например:

  • Joining data and differences of using UNION and UNION ALL in SQL Server
  • Comparing Multiple SQL Server Datasets with the INTERSECT and EXCEPT operators

Полезными могут оказаться следующие заметки MSSQLTips:

  • SQL Server SELECT Tutorial
  • SQL Server Stored Procedure
  • SQL Server Cursor Examples
  • Getting started with SQL Server stored procedures
  • SQL Server SELECT Examples
  • SQL SELECT DISTINCT Examples
  • Using MERGE in SQL Server to insert, update and delete at the same time
  • SQL INSERT INTO SELECT Examples
  • SQL UPDATE Statement
  • SQL Update Statement with Join in SQL Server vs Oracle vs PostgreSQL
  • The T-SQL DELETE statement
  • Delete SQL Statement in SQL Server, Oracle and PostgreSQL

Запрос соединения в SQL | Как использовать запрос на соединение в SQL с примерами

В следующем разделе мы рассмотрим, что такое соединения и различные типы соединений с примерами.

Что такое соединения?

Соединения используются для получения данных из более чем одной таблицы. Чтобы объединить более одной таблицы, нам нужен хотя бы один столбец, общий для обеих таблиц. Таблицы объединяются на основе указанного условия. Используется ключевое слово «ON». В SQL существуют различные типы соединений, как показано ниже.

Различные типы соединений

  • ВНУТРЕННЕЕ соединение
  • ВЛЕВО Соединить
  • ПРАВО Присоединиться
  • ПОЛНОЕ соединение
1. INNER Join

Внутреннее объединение получает все строки, которые являются общими в обеих таблицах, на основе указанного условия. Возьмем пример внутреннего соединения.

Пример:

Ниже представлена ​​диаграмма Венна внутреннего соединения.

Здесь рассмотрим таблицу A и таблицу B. Поскольку внутреннее соединение рассматривает общие строки обеих таблиц. Заштрихованная область представляет собой общие строки обеих таблиц.

Синтаксис:

 SELECT * FROM TABLE_A A
ВНУТРЕННЕЕ СОЕДИНЕНИЕ TABLE_B B
НА A. Common_COLUMN =B. Common_COLUMN 
2. LEFT Join

Левое соединение получает все строки из левой таблицы и общие строки обеих таблиц. Возьмем пример левого соединения.

Пример:

Ниже представлена ​​диаграмма Венна левого соединения.

На приведенной ниже диаграмме таблица A слева присоединена к таблице B. Здесь учитываются все строки из таблицы A и общие строки из обеих таблиц.

Синтаксис:

 SELECT * FROM TABLE_A A
ВЛЕВО СОЕДИНИТЬ ТАБЛИЦУ_B B
НА A. Common_COLUMN =B. Common_COLUMN 
3. RIGHT Join

Right Join получает все строки из таблицы Right и общие строки обеих таблиц. Возьмем пример правильного соединения.

Пример:

Ниже представлена ​​диаграмма Венна правого соединения.

На приведенной ниже диаграмме таблица A соединена справа с таблицей B. Здесь рассматриваются все строки из таблицы B и общие строки из обеих таблиц.

Синтаксис:

 SELECT * FROM TABLE_A A
ПРАВОЕ ПРИСОЕДИНЕНИЕ К ТАБЛИЦЕ_B B
ON A.Common_COLUMN=B.Common_COLUMN 
4. FULL Join

Полное объединение получает все строки из обеих таблиц. Возьмем пример правильного соединения.

Пример:

Ниже представлена ​​диаграмма Венна для соединения FULL.

Синтаксис:

 SELECT * FROM TABLE_A A
ПОЛНОЕ СОЕДИНЕНИЕ ТАБЛИЦА_B B
НА A. Common_COLUMN =B. Common_COLUMN 

Набор результатов содержит значения NULL. Чтобы игнорировать значения NULL, можно использовать следующий синтаксис: –

 SELECT * FROM TABLE_A A
ТАБЛИЦА ПОЛНОГО СОЕДИНЕНИЯ B B
НА A. Common_COLUMN =B. Общий_COLUMN
ГДЕ A.Common_COLUMN НОЛЬ
AND A.Common_COLUMN IS NULL 

Как использовать запрос на соединение в SQL с примерами

Здесь мы обсудим использование запроса на соединение с примерами:

1.
Левое соединение

Левое соединение = все строки из левой таблицы + ВНУТРЕННЕЕ соединение

Пример:

Рассмотрим две таблицы и применим к ним левое соединение: –

Таблица ссуд :

Loan_no Состояние_кредита Государственный Сумма_кредита Ap_Date
12 Открыть Ранчи 30000 01-02-2015
23 закрыть Патна 50000 04.03.2017
31 В ожидании Калькутта 80000 07.09.2018
43 Сертификат Электронный город 54000 10-11-2019
11 Отклонено Бангалор 43000 04. 03.2017
33 Закрыть Патна

07.09.2018
44 Открыть Калькутта 67000 01-01-2020

Таблица заемщика:

Loan_no Имя_заемщика Дата_заемщика Bank_id
12 Баран 07.09.2014 А1
27 Сундар 19-06-2016 А2
43 Брауни 16-07-2019 А4
31 Блэки 07.09.2015 А2

Запрос для получения номера_займа, статуса и даты заемщика из двух таблиц: –

Запрос:

 ВЫБЕРИТЕ L.LOAN_NO, L.LOAN_STATUS,B. BORROWER_DATE
ИЗ КРЕДИТА L ВЫШЕЛ ПРИСОЕДИНИТЬСЯ К ЗАЕМЩИКУ B
ПО L.LOAN_NO=B.LOAN_NO 

Давайте проверим вывод приведенной выше таблицы после применения к ним левого соединения.

Вывод:

2. ПРАВОЕ соединение

ПРАВОЕ соединение = все строки из ПРАВОЙ таблицы + ВНУТРЕННЕЕ соединение

Запрос для получения номера ссуды, статуса и даты заемщика из двух таблиц: –

Запрос: 

 ВЫБЕРИТЕ L.LOAN_NO, L.LOAN_STATUS,B.BORROWER_DATE
ИЗ КРЕДИТА L ПРАВО ПРИСОЕДИНЯТЬСЯ К ЗАЕМЩИКУ B
ПО L.LOAN_NO=B.LOAN_NO 

Давайте проверим вывод приведенной выше таблицы после применения к ним правильного соединения.

Вывод:

3. ВНУТРЕННЕЕ Соединение

Внутреннее Соединение = Все общие строки из обеих таблиц. При объединении хотя бы один столбец должен иметь одинаковый тип данных и общий для таблиц.

Пример:

Рассмотрим две таблицы и применим ВНУТРЕННЕЕ соединение к таблицам: –

Давайте создадим запрос, чтобы получить номер ссуды, статус и дату заемщика из двух таблиц: –

Запрос:

 ВЫБЕРИТЕ L. LOAN_NO,L.LOAN_STATUS,B.BORROWER_DATE
ИЗ КРЕДИТА L ВНУТРЕННИЙ СОЕДИНИТЕЛЬНЫЙ ЗАЕМЩИК B
ON L.LOAN_NO=B.LOAN_NO 

Давайте проверим вывод приведенной выше таблицы после применения к ним внутреннего соединения.

Вывод:

Здесь в приведенном выше выводе мы получили общие строки обеих таблиц на основе условия «L.LOAN_NO=B.LOAN_NO».

4. ПОЛНОЕ ВНЕШНЕЕ Соединение

ПОЛНОЕ ВНЕШНЕЕ Соединение = Все строки из обеих таблиц. При объединении хотя бы один столбец должен иметь одинаковый тип данных и общий для таблиц.

Пример:

Рассмотрим две таблицы и применим к ним ПОЛНОЕ ВНЕШНЕЕ соединение: –

Создадим запрос для получения ap_date и даты заемщика из двух таблиц: –

Запрос: 

 ВЫБЕРИТЕ L.LOAN_NO,L.LOAN_STATUS,B.BORROWER_DATE
ИЗ КРЕДИТА L ПОЛНЫЙ ВНЕШНИЙ ЗАЕМЩИК B
ON L.LOAN_NO=B.LOAN_NO 

Давайте проверим вывод приведенной выше таблицы после применения к ним внутреннего соединения.

Вывод:

Здесь в приведенном выше выводе мы получили общие строки обеих таблиц на основе условия «L.LOAN_NO=B.LOAN_NO».

Заключение

Чтобы получить данные, относящиеся к требованию клиента, нам может понадобиться соединить таблицы, которые будут выполняться с помощью соединений. Как упоминалось ранее, соединения используются для получения данных из более чем одной таблицы. Чтобы объединить более одной таблицы, нам нужен хотя бы один столбец, общий для обеих таблиц. Таблицы объединяются на основе указанного условия.

Рекомендуемые статьи

Мы надеемся, что информация EDUCBA о «Объединении запросов в SQL» была вам полезна. Вы можете просмотреть рекомендуемые статьи EDUCBA для получения дополнительной информации.

  1. SQL DATEADD()
  2. Таблица переименования SQL
  3. SQL NULLIF()
  4. MySQL РАУНД

Как соединить три таблицы в SQL-запросе – пример MySQL

Три таблицы JOIN, пример SQL

Соединение трех таблиц в одном SQL-запросе может быть очень сложным, если вы плохо разбираетесь в концепции SQL Join. Соединения SQL всегда были сложными не только для новых программистов, но и для многих других, кто занимается программированием и SQL более 2-3 лет. Их достаточно, чтобы запутать кого-то в SQL JOIN, начиная от различных типов SQL JOIN, таких как соединение INNER и OUTER, внешнее соединение LEFT и RIGHT, соединение CROSS и т. д. Среди всех этих основ самое важное в соединении — это объединение нескольких таблиц. . Если вам нужны данные из нескольких таблиц в одном запросе SELECT, вам нужно использовать либо подзапрос, либо JOIN.

В большинстве случаев мы объединяем только две таблицы, такие как Employee и Department, но иногда может потребоваться объединение более двух таблиц, и популярным случаем является объединение трех таблиц в SQL.

В случае объединения трех таблиц таблица 1 связана с таблицей 2, а затем таблица 2 связана с таблицей 3. Если вы внимательно посмотрите, вы обнаружите, что таблица 2 – это объединяющая таблица, которая содержит первичный ключ как из таблицы 1, так и из таблицы. 2. Как я уже сказал, может быть очень сложно понять объединение трех или более таблиц.

Я обнаружил, что понимание отношений между таблицами как первичного ключа и внешнего ключа помогает избежать путаницы, чем классическая парадигма сопоставления строк.

Объединение SQL также является очень популярной темой на собеседованиях по SQL, и всегда были некоторые вопросы по объединениям, например, о разнице между ВНУТРЕННИМ и ВНЕШНИМ СОЕДИНЕНИЕМ, SQL-запросе с СОЕДИНЕНИЕМ, например, отношение отдела сотрудников и разница между ЛЕВЫМ и ПРАВЫМ ВНЕШНИМ СОЕДИНЕНИЕМ и т. д. Короче говоря, это одна из самых важных тем в SQL как с точки зрения опыта, так и с точки зрения интервью.

Синтаксис JOIN для трех таблиц в SQL

Ниже приведен общий синтаксис запроса SQL для объединения трех или более таблиц. Этот SQL-запрос должен работать во всех основных реляционных базах данных, таких как MySQL, Oracle, Microsoft SQLServer, Sybase и PostgreSQL:

SELECT t1. col, t3.col
FROM table1
JOIN table2 ON 1. table первичный ключ = таблица2.внешний ключ
ПРИСОЕДИНЯЙТЕСЬ таблица3 ON table2.primarykey = table3.foreignkey


Сначала мы объединяем таблицы 1 и 2, которые создают временную таблицу с объединенными данными из таблиц 1 и 2, которая затем соединяется с таблицей 3. Эта формула может быть расширена до более чем 3 таблиц до N таблиц. Вам просто нужно убедиться, что SQL-запрос должен иметь оператор соединения N-1, чтобы присоединиться к N таблицам. для соединения двух таблиц нам требуется 1 оператор соединения, а для соединения 3 таблиц нам нужны 2 оператора соединения.

Вот хорошая диаграмма, которая также показывает, как различные типы JOIN, например. внутренние, левые внешние, правые внешние и перекрестные соединения работают в SQL:


SQL-запрос для JOIN трех таблиц в MySQL

Чтобы лучше понять объединение трех таблиц в SQL-запросе , давайте рассмотрим пример. Рассмотрим популярный пример схемы Сотрудник и Отдел. В нашем случае мы использовали таблицу ссылок под названием «Реестр», которая связывает или связывает как сотрудника с отделом.

Первичный ключ таблицы «Сотрудник» (emp_id) является внешним ключом в таблице «Реестр», и аналогичным образом первичный ключ таблицы «Отдел» (dept_id) является внешним ключом в таблице «Реестр».

Кстати, единственный способ освоить SQL-соединение — делать как можно больше упражнений. Если бы вы могли решить большинство головоломок SQL из классической книги Джо Селко «Загадки SQL и ответы», 2-е издание, вы бы более уверенно справлялись с соединениями SQL, будь то две, три или четыре таблицы.

Чтобы написать SQL-запрос для печати имени сотрудника и названия отдела , нам нужно соединить 3 таблицы . Первый оператор JOIN соединит Employee и Register и создаст временную таблицу, которая будет иметь dept_id в качестве другого столбца. Теперь второй оператор JOIN соединит эту временную таблицу с таблицей отдела по dept_id, чтобы получить желаемый результат.

Вот полный пример SQL-запроса SELECT для объединения 3 таблиц, который можно расширить для объединения более 3 или N таблиц.



mysql> ВЫБЕРИТЕ * ИЗ Сотрудник;
+ ———+———-+———+
| emp_id | emp_name | зарплата |
+ ———+———-+———+
| 1      | Джеймс | 2000 |
| 2      | Джек     | 4000 |
| 3      | Генри | 6000 |
| 4      | Том      | 8000 |
+ ———+———-+———+
4 строки IN SET (0,00 сек)

mysql> ВЫБЕРИТЕ * ИЗ Отдел;
+ ———+————+
| dept_id | имя_отдела |
+ ———+————+
| 101     | Продажи     |
| 102     | Маркетинг |
| 103     | Финансы   |
+ ———+————+
3 ряда IN НАБОР (0,00 сек)

mysql> ВЫБРАТЬ * ИЗ Зарегистрировать;
+ ———+———+
| emp_id | dept_id |
+ ———+———+
| 1 | 101 |
| 2 | 102 |
| 3 | 103 |
| 4 | 102 |
+ ———+———+
4 строки IN SET (0,00 с)

mysql> SELECT emp_name, dept_name 9 0 F 2 4 90 Сотрудник е
       JOIN Регистр r ON e. emp_id=r.emp_id
       JOIN Отдел d ON r.dept_id=d.dept_id;
+ ———-+————+
| emp_name | имя_отдела |
+ ———-+————+
| Джеймс | Продажи     |
| Джек     | Маркетинг |
| Генри | Финансы   |
| Том      | Маркетинг |
+ ———-+————+
4 ряда IN НАБОР (0,01 сек)

Если вы хотите понять это еще лучше, попробуйте объединить столы шаг за шагом. Таким образом, вместо объединения 3 таблиц за один раз, сначала соедините 2 таблицы и посмотрите, как будет выглядеть таблица результатов. Это все о том, как соединить три таблицы одним SQL-запросом в реляционной базе данных.

Кстати, в этом примере SQL JOIN мы использовали ANSI SQL, и он будет работать в другой реляционной базе данных, а также в Oracle, SQL Server, Sybase, PostgreSQL и т. д. Сообщите нам, если у вас возникнут какие-либо проблемы при запуске этого 3 таблица JOIN запроса в любой другой базе данных.

Оставить комментарий

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *