что это, как работает, виды соединений таблиц, отличия LEFT, RIGHT JOIN, операторы и синтаксис
SQL — Simple Query Language, то есть «простой язык запросов». Его создали, чтобы работать с реляционными базами данных. В таких базах данные представлены в виде таблиц. Зависимости между несколькими таблицами задают с помощью связующих — реляционных столбцов.
Когда запрашиваем данные из одной таблицы, работа со связующими столбцами не нужна. Но если нужно агрегировать данные из нескольких, стоит описать правила: как будут связаны строки на основе значений связующих столбцов. Тогда на помощь и приходит оператор join.
Что такое оператор join в SQL
Join — оператор, который используют, чтобы объединять строки из двух или более таблиц на основе связующего столбца между ними. Такой столбец еще называют ключом.
Предположим, что у нас есть таблица заказов — Orders:
OrderID | CustomerID | OrderDate |
304101 | 21 | 10-05-2021 |
304102 | 34 | 20-06-2021 |
304103 | 22 | 25-07-2021 |
И таблица клиентов — Customers:
CustomerID | CustomerName | ContactName |
21 | Балалайка Сервис | Иван Иванов |
22 | Рога и копыта | Семён Семёнов |
23 | Редиска Менеджмент | Пётр Петров |
Столбец CustomerID в таблице заказов соотносится со столбцом CustomerID в таблице клиентов.
</p> <p>SELECT Orders.OrderID, Customers.CustomerName, Orders.OrderDate </p> <p>FROM Orders </p> <p>JOIN Customers </p> <p>ON Orders.CustomerID=Customers.CustomerID;</p> <p>Результат запроса будет выглядеть так:
OrderID | CustomerName | OrderDate |
304101 | Балалайка Сервис | 10-05-2021 |
304103 | Редиска Менеджмент | 25-07-2021 |
Общий синтаксис оператора join:
JOIN <Название таблицы для присоединения> ON <Условие присоединения на основе связующих столбцов>
Соединять можно и больше двух таблиц: к запросу добавьте еще один оператор join. Например, в дополнение к предыдущим двум таблицам у нас есть таблица продавцов — Managers:
OrderID | ManagerName | ContactDate |
304101 | Артём Лапин | 05-05-2021 |
304102 | Егор Орлов | 15-06-2021 |
304103 | Евгений Соколов | 20-07-2021 |
Таблица продавцов связана с таблицей заказов столбцом OrderID. Чтобы в дополнение к предыдущему запросу узнать, какой продавец обслуживал заказ, составьте следующий запрос:
</p> <p>SELECT Orders.OrderID, Customers.CustomerName, Orders.OrderDate, Managers.ManagerName </p> <p>FROM Orders </p> <p>JOIN Customers </p> <p>ON Orders.CustomerID=Customers.CustomerID </p> <p>JOIN Managers </p> <p>ON Orders.OrderId=Managers.OrderId</p> <p> Результат:
OrderID | CustomerName | OrderDate | ManagerName |
304101 | Балалайка Сервис | 10-05-2021 | Артём Лапин |
304103 | Редиска Менеджмент | 25-07-2021 | Евгений Соколов |
Внутреннее соединение INNER JOIN
Если использовать оператор INNER JOIN, в результат запроса попадут только те записи, для которых выполняется условие объединения. Еще одно условие — записи должны быть в обеих таблицах. В финальный результат из примера выше не попали записи с CustomerID=23 и OrderID=304102: для них нет соответствия в таблицах.
Общий синтаксис запроса INNER JOIN:
</p> <p>SELECT column_name(s)</p> <p>FROM table1</p> <p>INNER JOIN table2</p> <p>ON table1. column_name = table2.column_name;</p> <p>Иллюстрация работы INNER JOIN
Слово INNER в запросе можно опускать, тогда общий синтаксис запроса будет выглядеть так:
</p> <p>SELECT column_name(s)</p> <p>FROM table1</p> <p>INNER JOIN table2</p> <p>ON table1.column_name = table2.column_name;</p> <p>Внешние соединения OUTER JOIN
Если использовать внешнее соединение, то в результат запроса попадут не только записи с совпадениями в обеих таблицах, но и записи одной из таблиц целиком. Этим внешнее соединение отличается от внутреннего.
Указание таблицы, из которой нужно выбрать все записи без фильтрации, называется направлением соединения.
LEFT OUTER JOIN / LEFT JOIN
В финальный результат такого соединения попадут все записи из левой, первой таблицы. Даже если не будет ни одного совпадения с правой. И записи из второй таблицы, для которых выполняется условие объединения.
Иллюстрация работы LEFT JOIN
Синтаксис:
</p> <p>SELECT column_name(s)</p> <p>FROM table1</p> <p>LEFT JOIN table2</p> <p>ON table1.column_name = table2.column_name;</p> <p>Пример:
Таблица Orders:
OrderID | CustomerID | OrderDate |
304101 | 21 | 10-05-2021 |
304102 | 34 | 20-06-2021 |
304103 | 22 | 25-07-2021 |
Таблица Customers:
CustomerID | CustomerName | ContactName |
21 | Балалайка Сервис | Иван Иванов |
22 | Рога и копыта | Семён Семёнов |
23 | Пётр Петров |
Запрос:
</p> <p>SELECT Orders. OrderID, Customers.CustomerName, Orders.OrderDate </p> <p>FROM Orders </p> <p>LEFT JOIN Customers </p> <p>ON Orders.CustomerID=Customers.CustomerID;</p> <p>Результат:
OrderID | CustomerName | OrderDate |
304101 | Балалайка Сервис | 10-05-2021 |
304102 | null | 20-06-2021 |
304103 | Редиска Менеджмент | 25-07-2021 |
RIGHT OUTER JOIN / RIGHT JOIN
В финальный результат этого соединения попадут все записи из правой, второй таблицы. Даже если не будет ни одного совпадения с левой. И записи из первой таблицы, для которых выполняется условие объединения.
Иллюстрация работы RIGHT JOIN
Синтаксис:
</p> <p>SELECT column_name(s)</p> <p>FROM table1</p> <p>RIGHT JOIN table2</p> <p>ON table1. column_name = table2.column_name;</p> <p>Пример:
Таблица Orders:
OrderID | CustomerID | OrderDate |
304101 | 21 | 10-05-2021 |
304102 | 34 | 20-06-2021 |
304103 | 22 | 25-07-2021 |
Таблица Customers:
CustomerID | CustomerName | ContactName |
21 | Балалайка Сервис | Иван Иванов |
22 | Рога и копыта | Семён Семёнов |
23 | Редиска Менеджмент | Пётр Петров |
Запрос:
</p> <p>SELECT Orders.OrderID, Customers.CustomerName, Orders.OrderDate </p> <p>FROM Orders </p> <p>RIGHT JOIN Customers </p> <p>ON Orders. CustomerID=Customers.CustomerID;</p> <p>Результат:
OrderID | CustomerName | OrderDate |
304101 | Балалайка Сервис | 10-05-2021 |
null | Рога и копыта | null |
304103 | Редиска Менеджмент | 25-07-2021 |
FULL OUTER JOIN / FULL JOIN
В финальный результат такого соединения попадут все записи из обеих таблиц. Независимо от того, выполняется условие объединения или нет.
Иллюстрация работы FULL JOIN
Синтаксис:
</p> <p>SELECT column_name(s)</p> <p>FROM table1</p> <p>FULL JOIN table2</p> <p>ON table1.column_name = table2.column_name;</p> <p>Пример:
Таблица Orders
OrderID | CustomerID | OrderDate |
304101 | 21 | 10-05-2021 |
304102 | 34 | 20-06-2021 |
304103 | 22 | 25-07-2021 |
Таблица Customers:
CustomerID | CustomerName | ContactName |
21 | Балалайка Сервис | Иван Иванов |
22 | Рога и копыта | Семён Семёнов |
23 | Редиска Менеджмент | Пётр Петров |
Запрос:
</p> <p>SELECT Orders. OrderID, Customers.CustomerName, Orders.OrderDate </p> <p>FROM Orders </p> <p>FULL JOIN Customers </p> <p>ON Orders.CustomerID=Customers.CustomerID;</p> <p>Результат:
OrderID | CustomerName | OrderDate |
304101 | Балалайка Сервис | 10-05-2021 |
304102 | null | 20-06-2021 |
304103 | Редиска Менеджмент | 25-07-2021 |
null | Рога и копыта | null |
Перекрестное соединение CROSS JOIN
Этот оператор отличается от предыдущих операторов соединения: ему не нужно задавать условие объединения (ON table1.column_name = table2.column_name). Записи в таблице с результатами — это результат объединения каждой записи из левой таблицы с записями из правой. Такое действие называют декартовым произведением.
Иллюстрация работы CROSS JOIN
Синтаксис:
</p> <p>SELECT column_name(s)</p> <p>FROM table1</p> <p>CROSS JOIN table2;</p> <p>Пример:
Таблица Orders:
OrderID | CustomerID | OrderDate |
304101 | 21 | 10-05-2021 |
304102 | 34 | 20-06-2021 |
304103 | 22 | 25-07-2021 |
Таблица Customers:
CustomerID | CustomerName | ContactName |
21 | Балалайка Сервис | Иван Иванов |
22 | Рога и копыта | Семён Семёнов |
23 | Редиска Менеджмент | Пётр Петров |
Запрос:
</p> <p>SELECT Orders. OrderID, Customers.CustomerName, Orders.OrderDate </p> <p>FROM Orders </p> <p>CROSS JOIN Customers;</p> <p>Результат:
OrderID | CustomerName | OrderDate |
304101 | Балалайка Сервис | 10-05-2021 |
304101 | Рога и копыта | 10-05-2021 |
304101 | Редиска Менеджмент | 10-05-2021 |
304102 | Балалайка Сервис | 20-06-2021 |
304102 | Рога и копыта | 20-06-2021 |
304102 | Редиска Менеджмент | 20-06-2021 |
304103 | Балалайка Сервис | 25-07-2021 |
304103 | Рога и копыта | 25-07-2021 |
304103 | Редиска Менеджмент | 25-07-2021 |
Соединение SELF JOIN
Его используют, когда в запросе нужно соединить несколько записей из одной и той же таблицы.
В SQL нет отдельного оператора, чтобы описать SELF JOIN соединения. Поэтому, чтобы описать соединения данных из одной и той же таблицы, воспользуйтесь операторами JOIN или WHERE.
Учтите, что в одном запросе нельзя дважды использовать имя одной и той же таблицы: иначе запрос вернет ошибку. Поэтому, чтобы выполнить соединение таблицы SQL с самой собой, в запросе ей присваивают два разных временных имени — алиаса.
Синтаксис соединения SELF JOIN при использовании оператора JOIN:
</p> <p>SELECT column_name(s)</p> <p>FROM table1 a1</p> <p>JOIN table1 a2</p> <p>ON a1.column_name = a2.column_name;</p> <p>Оператор JOIN может быть любым: используйте LEFT JOIN, RIGHT JOIN. Результат будет таким же, как когда объединяли две разные таблицы.
Синтаксис соединения SELF JOIN при использовании оператора WHERE:
</p> <p>SELECT column_name(s)</p> <p>FROM table1 a1, table1 a2</p> <p>WHERE a1. common_col_name = a2.common_col_name;</p> <p>Пример:
Талица Students:
StudentID | Name | CourseID | Duration |
1 | Артём | 1 | 3 |
2 | Пётр | 2 | 4 |
1 | Артём | 2 | 4 |
3 | Борис | 3 | 2 |
2 | Ирина | 3 | 5 |
Запрос с оператором WHERE:
</p> <p>SELECT s1.StudentID, s1.Name</p> <p>FROM Students AS s1, Students s2</p> <p>WHERE s1.StudentID = s2.StudentID</p> <p>AND s1.CourseID &lt;&gt; s2.CourseID;</p> <p>Результат:
StudentID | Name |
1 | Артём |
2 | Ирина |
1 | Артём |
2 | Пётр |
Запрос с оператором JOIN:
</p> <p>SELECT s1. StudentID, s1.Name</p> <p>FROM Students s1</p> <p>JOIN Students s2</p> <p>ON s1.StudentID = s2.StudentID</p> <p>AND s1.CourseID &lt;&gt; s2.CourseID</p> <p>GROUP BY StudentID;</p> <p>Результат:
StudentID | Name |
1 | Артём |
2 | Ирина |
Главное о join в SQL
- В SQL используют операторы соединения join, чтобы объединять данные из нескольких таблиц. Когда результат должен содержать только данные двух таблиц с общим ключом, применяют INNER JOIN или просто JOIN.
- Если нужен полный список записей одной из таблиц, объединенных с данными из другой, используют операторы LEFT и RIGHT JOIN.
- Если результат должен содержать полный список записей обеих таблиц, где некоторые записи объединены, применяют оператор FULL JOIN.
- Если нужно декартово произведение двух таблиц, используют оператор CROSS JOIN. Хотите соединить данные из одной и той же таблицы между собой — нужен SELF JOIN.
Научитесь писать SQL-запросы на курсе «Аналитик данных» Skypro. Изучите агрегатные функции, подзапросы и WITH, JOIN, оконные функции и многое другое, а еще — решите бизнес-задачу с помощью SQL.
Еще в программе: базовые формулы Excel, работа в Power Pivot и Power Query, Python для анализа данных. Справитесь и без опыта в IT: учим с азов, ведем до диплома и помогаем найти работу.
Операции LEFT JOIN, RIGHT JOIN (Microsoft Access SQL)
Twitter LinkedIn Facebook Адрес электронной почты
- Статья
- Чтение занимает 2 мин
Область применения: Access 2013, Office 2013
Объединяют записи исходных таблиц при использовании в любом предложении FROM.
Синтаксис
FROM таблица1 [ LEFT | RIGHT ] JOIN таблица2 ON таблица1.поле1 оператор_сравнения таблица2.поле2
Операции LEFT JOIN и RIGHT JOIN состоят из следующих элементов:
таблица1, таблица2 | Имена таблиц, содержащих объединяемые записи. |
поле1, поле2 | Имена объединяемых полей. Поля должны относиться к одному типу данных и содержать данные одного вида. Однако имена этих полей могут быть разными. |
оператор_сравнения | Любой оператор сравнения: «=,» «<,» «>,» «<=,» «>=,» или «<>.» |
Операция LEFT JOIN создает левое внешнее соединение. С помощью левого внешнего соединения выбираются все записи первой (левой) таблицы, даже если они не соответствуют записям во второй (правой) таблице.
Операция RIGHT JOIN создает правое внешнее соединение. С помощью правого внешнего соединения выбираются все записи второй (правой) таблицы, даже если они не соответствуют записям в первой (левой) таблице.
Например, в случае с таблицами «Отделы» (левая) и «Сотрудники» (правая) можно воспользоваться операцией LEFT JOIN для выбора всех отделов (включая те, в которых нет сотрудников). Чтобы выбрать всех сотрудников (в том числе и не закрепленных за каким-либо отделом), используйте RIGHT JOIN.
В следующем примере показано, как можно объединить таблицы Categories и Products по полю CategoryID. Результат запроса представляет собой список категорий, включая те, которые не содержат товаров.
SELECT CategoryName, ProductName FROM Categories LEFT JOIN Products ON Categories.CategoryID = Products.CategoryID;
В этом примере CategoryID является объединенным полем, но оно не включается в результаты запроса, поскольку не указано в инструкции SELECT. Чтобы включить объединенное поле в результаты запроса, укажите его имя в инструкции SELECT. В данном случае это Categories.CategoryID.
Примечание
- Чтобы создать запрос, результатом которого являются только те записи, для которых совпадают данные в объединенных полях, воспользуйтесь операцией INNER JOIN.
- Операции LEFT JOIN и RIGHT JOIN могут быть вложены в операцию INNER JOIN, но операция INNER JOIN не может быть вложена в операцию LEFT JOIN или RIGHT JOIN. Подробные сведения о вложении объединений можно найти в статье, посвященной операции INNER JOIN.
- Вы можете связать несколько предложений ON. Сведения о связывании предложений см. в статье, посвященной операции INNER JOIN.
- При попытке связи полей, содержащих данные типа Memo или объекты OLE, возникнет ошибка.
Пример
В этом примере:
Предполагается существование гипотетических полей Department Name (Название отдела) и Department ID (Код отдела) в таблице Employees (Сотрудники). Обратите внимание, что эти поля на самом деле не существуют в таблице Employees (Сотрудники) базы данных Northwind.
Выбираются все отделы, в том числе без сотрудников.
Выполняется вызов процедуры EnumFields, которую можно найти в примере для инструкции SELECT.
Sub LeftRightJoinX() Dim dbs As Database, rst As Recordset ' Modify this line to include the path to Northwind ' on your computer. Set dbs = OpenDatabase("Northwind.mdb") ' Select all departments, including those ' without employees. Set rst = dbs.OpenRecordset _ ("SELECT [Department Name], " _ & "FirstName & Chr(32) & LastName AS Name " _ & "FROM Departments LEFT JOIN Employees " _ & "ON Departments.[Department ID] = " _ & "Employees.[Department ID] " _ & "ORDER BY [Department Name];") ' Populate the Recordset. rst.MoveLast ' Call EnumFields to print the contents of the ' Recordset. Pass the Recordset object and desired ' field width. EnumFields rst, 20 dbs.Close End Sub
Как соединить три таблицы в 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-запрос для соединения трех таблиц в 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 0 900 Сотрудник е
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 запроса в любой другой базе данных.
Другое Вопросы к интервью по SQL статьи для подготовки
- В чем разница между коррелированными и некоррелированными подзапросами в SQL
- Разница между кластеризованным и некластеризованным индексом в SQL
- Что такое ACID-свойства транзакции в базе данных
- Когда использовать усечение вместо удаления в SQL-запросе
- Список часто используемых команд MySQL Server
- 10 популярных SQL-запросов из интервью
Спасибо, что прочитали эту статью до сих пор , если вам понравилась эта статья, поделитесь ею с друзьями и коллегами. Если у вас есть какие-либо вопросы, предложения или сомнения, пожалуйста, оставьте комментарий, и я постараюсь ответить на ваш вопрос.
Соединение с запросом в SQL | Как использовать запрос на соединение в SQL с примерами
В следующем разделе мы рассмотрим, что такое соединения и различные типы соединений с примерами.
Что такое соединения?
Соединения используются для получения данных из более чем одной таблицы. Чтобы объединить более одной таблицы, нам нужен хотя бы один столбец, общий для обеих таблиц. Таблицы объединяются на основе указанного условия. Используется ключевое слово «ON». В SQL существуют различные типы соединений, как показано ниже.
Различные типы соединений
- ВНУТРЕННЕЕ соединение
- ВЛЕВО Соединить
- ВПРАВО Присоединиться
- ПОЛНОЕ соединение
1. INNER Join
Внутреннее объединение получает все строки, которые являются общими в обеих таблицах, на основе указанного условия. Возьмем пример внутреннего соединения.
Пример:
Ниже представлена диаграмма Венна внутреннего соединения.
Здесь рассмотрим таблицу A и таблицу B. Поскольку внутреннее соединение рассматривает общие строки обеих таблиц. Заштрихованная область представляет собой общие строки обеих таблиц.
Синтаксис:
SELECT * FROM TABLE_A A
INNER JOIN TABLE_B B
ON A. Common_COLUMN =B. Common_COLUMN
2. LEFT Join
Левое соединение получает все строки из левой таблицы и общие строки обеих таблиц. Возьмем пример левого соединения.
Пример:
Ниже представлена диаграмма Венна левого соединения.
На приведенной ниже диаграмме таблица A слева соединена с таблицей B. Здесь учитываются все строки из таблицы A и общие строки из обеих таблиц.
Синтаксис:
SELECT * FROM TABLE_A A
LEFT JOIN TABLE_B B
ON A. Common_COLUMN =B. Common_COLUMN
3. ПРАВОЕ соединение
Правое соединение получает все строки из правой таблицы и общие строки обеих таблиц. Возьмем пример правильного соединения.
Пример:
Ниже представлена диаграмма Венна правого соединения.
На приведенной ниже диаграмме таблица A соединена справа с таблицей B. Здесь рассматриваются все строки из таблицы B и общие строки из обеих таблиц.
Синтаксис:
SELECT * FROM TABLE_A A
RIGHT JOIN TABLE_B B
ON A.Common_COLUMN=B.Common_COLUMN
4. FULL получает все строки из обеих таблиц
9 4. FULL Join0 Возьмем пример правильного соединения.Пример:
Ниже представлена диаграмма Венна соединения FULL.
Синтаксис:
SELECT * FROM TABLE_A A
FULL JOIN TABLE_B B
ON A. Common_COLUMN =B. Common_COLUMN
Результирующий набор содержит значения NULL. Нижеследующий синтаксис может использоваться для игнорирования значений NULL: –
SELECT * FROM TABLE_A A
FULL JOIN TABLE B B
ON A. Common_COLUMN =B. Common_COLUMN
ГДЕ A.Common_COLUMN IS NULL
AND A.Common_COLUMN IS NULL
Как использовать запрос соединения в SQL с примерами
Здесь мы обсудим использование запроса соединения с примерами:
1.
Левое соединениелевое соединение = все строки из левого таблицы + внутреннее соединение
Пример:
Давайте рассмотрим две таблицы и применим левый соединение на таблицах: —
Таблица кредит :
121213519951995199519951995139951399513513O
Таблица заемщика:
Запрос для получения номера_займа, статуса и даты заемщика из двух таблиц: – Запрос: Давайте проверим вывод таблицы выше после применения к ним левого соединения. Вывод: 2. ПРАВОЕ соединениеПРАВОЕ соединение = все строки из ПРАВОЙ таблицы + ВНУТРЕННЕЕ соединение Запрос для получения номера_кредита, статуса и даты заемщика из двух таблиц: – Запрос: Вывод: 3. ВНУТРЕННЕЕ соединениеВнутреннее соединение = все общие строки из обеих таблиц. При объединении хотя бы один столбец должен иметь одинаковый тип данных и общий для таблиц. Пример: Давайте рассмотрим две таблицы и применим ВНУТРЕННЕЕ соединение к таблицам: – Давайте создадим запрос, чтобы получить номер_кредита, статус и дату заемщика из двух таблиц: – Запрос: Давайте проверим выходные данные приведенной выше таблицы после применения к ним внутреннего соединения. Выход: Здесь в приведенном выше выводе мы получили общие строки обеих таблиц на основе условия «L.LOAN_NO=B.LOAN_NO». 4. ПОЛНОЕ ВНЕШНЕЕ СоединениеПОЛНОЕ ВНЕШНЕЕ Соединение = Все строки из обеих таблиц. При объединении хотя бы один столбец должен иметь одинаковый тип данных и общий для таблиц. Пример: Рассмотрим две таблицы и применим ПОЛНОЕ ВНЕШНЕЕ соединение к таблицам: – Построим запрос для получения ap_date и даты заемщика из двух таблиц: – Запрос: |