JOIN — Учебник SQL — Schoolsw3.com
schoolsw3.com
САМОСТОЯТЕЛЬНОЕ ОБУЧЕНИЕ ДЛЯ ВЕБ РАЗРАБОТЧИКОВ
❮ Назад Далее ❯
JOIN
Предложение JOIN используется для объединения строк из двух или более таблиц на основе связанного столбца между ними.
Давайте рассмотрим выборку из таблицы «Orders»:
OrderID | CustomerID | OrderDate |
---|---|---|
10308 | 2 | 1996-09-18 |
10309 | 37 | 1996-09-19 |
10310 | 77 | 1996-09-20 |
Затем посмотрите на выборку из таблицы «Customers»:
CustomerID | CustomerName | ContactName | Country |
---|---|---|---|
1 | Alfreds Futterkiste | Maria Anders | Germany |
2 | Ana Trujillo Emparedados y helados | Ana Trujillo | Mexico |
3 | Antonio Moreno Taquería | Antonio Moreno |
Обратите внимание, что столбец «CustomerID» в таблице «Orders» ссылается на «CustomerID» в таблице «Customers». Связь между двумя приведенными выше таблицами представляет собой столбец «CustomerID».
Затем мы можем создать следующий заявление SQL (содержащий внутреннее соединение), который выбирает записи, имеющие совпадающие значения в обеих таблицах:
Пример
SELECT Orders.OrderID, Customers.CustomerName, Orders.OrderDate
FROM Orders
INNER JOIN Customers ON Orders.CustomerID=Customers.CustomerID;
Попробуйте сами »
и он будет производить что-то вроде этого:
OrderID | CustomerName | OrderDate |
---|---|---|
10308 | Ana Trujillo Emparedados y helados | 9/18/1996 |
10365 | Antonio Moreno Taquería | 11/27/1996 |
10383 | Around the Horn | 12/16/1996 |
10355 | Around the Horn | 11/15/1996 |
10278 | Berglunds snabbköp | 8/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 — на основе двух таблиц, указанных в предложении соединения, все данные возвращаются из обеих таблиц независимо от совпадающих данных.
Давайте рассмотрим примеры из демонстрационной базы данных
Пример 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 для получения дополнительной информации.
- SQL DATEADD()
- Таблица переименования SQL
- SQL NULLIF()
- 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 как с точки зрения опыта, так и с точки зрения интервью.
Ниже приведен общий синтаксис запроса 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 запроса в любой другой базе данных.