Inner join sql описание: Операция INNER JOIN (Microsoft Access SQL)

SQL INNER JOIN: Полное руководство

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

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

Например, вы можете получить список продуктов и имена поставщиков, которые поставили эти продукты. Информация о названиях продуктов и названиях поставщиков находится в двух таблицах.

Здесь на помощь приходят соединения SQL. Используя условие соединения, вы можете объединить информацию из нескольких таблиц в следующее: один набор результатов. SQL INNER JOIN — это тип соединения, которое возвращает записи, которые имеют совпадающие значения столбцов в двух таблицах. В этом руководстве мы собираемся обсудить, как использовать INNER JOIN.

Содержание

  1. SQL INNER JOIN
  2. Пример SQL INNER JOIN
  3. Вывод

SQL INNER JOIN

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

INNER JOIN является наиболее распространённым типом SQL присоединиться. Оператор возвращает записи, которые совпадают в обеих таблицах.

Давайте посмотрим на синтаксис ключевого слова INNER JOIN :

  • SELECT name
  • FROM customers
  • INNER JOIN plans
  • ON customers.plan_id = plans.id;

Этот запрос объединяет строки из таблиц «клиенты» и «планы». Он возвращает список всех клиентов с «plan_id», равным любому идентификатору в таблице «планы».

Мы используем предложение INNER JOIN для объединения наших таблиц. Ключевое слово ON идёт после имени таблицы, к которой мы присоединяемся. Вы можете указать несколько условий после ключевого слова ON, разделив их запятыми.

Пример SQL INNER JOIN

Прямо сейчас у нас есть база данных сотрудников, в которой хранятся идентификаторы отдела каждого сотрудника в таблице сотрудников. Мы создали эту таблицу с помощью оператора SQL CREATE TABLE. Имена отделов хранятся в отдельной таблице под названием company_departments.

Вот таблица сотрудников:

сотрудники
имязаглавиеDepartment_id
ЛюкСотрудник по продажам1
МайкСотрудник по продажам1
ХаннаСотрудник по продажам1
ДжеффСтарший специалист по продажам1
АлексисСотрудник по продажам1
ИонаВице-президент по продажам3
ЭммаДиректор по маркетингу2

(7 рядов)

Это таблица отделов:

company_departments
Department_idимя
1продажи
2маркетинг
3исполнительный

(3 ряда)

Допустим, мы хотели получить имена, должности и названия отделов для всех сотрудников. Эти данные содержатся в двух таблицах: имена и должности сотрудников находятся в таблице сотрудников. Названия отделов находятся в таблице company_departments.

Как мы получаем информацию, которую ищем?

В таблице сотрудников есть столбец с именем Department_id. В этом столбце содержится идентификатор отдела, в котором работает каждый сотрудник.

А также в таблице company_departments каждый отдел также имеет идентификатор (который является первичным ключом в таблице). Это означает, что мы можем соответствовать сотруднику department_id со списком отделов. Это позволит нам узнать название отдела, в котором работает этот сотрудник.

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

SELECT Employees.Name, Employees.Title, Company_Departments.Name
FROM Employees
INNER JOIN Company_Departments
ON Employees.Department_ID = Company_Departments.Department_ID;

Наш запрос возвращает следующие совпадающие строки:

имязаглавиеимя
АлексисСотрудник по продажамПродажи
ДжеффСтарший специалист по продажамПродажи
ХаннаСотрудник по продажамПродажи
МайкСотрудник по продажамПродажи
ЛюкСотрудник по продажамПродажи
ЭммаДиректор по маркетингуМаркетинг
ИонаВице-президент по продажамИсполнительный

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

Во второй строке мы указываем, что хотим получить информацию о сотрудниках из таблицы сотрудников. Затем мы используем наше ВНУТРЕННЕЕ СОЕДИНЕНИЕ, чтобы связать нашу таблицу сотрудников с таблицей company_departments, которая включает названия отделов.

Наконец, наша последняя линия связи как сотрудников и company_departments таблицы вместе по их общих полей, в этом случае department_id.

Вывод

Оператор SQL INNER JOIN извлекает записи с двумя совпадающими значениями столбцов в двух таблицах. Оператор ON позволяет вам указать условия, при которых выполняется ваше внутреннее соединение.

Освоение объединений — важная часть запросов к базам данных SQL, и это понимание приблизит вас на один шаг к тому, чтобы стать экспертом по SQL.QL.

что это, как работает, виды соединений таблиц, отличия LEFT, RIGHT JOIN, операторы и синтаксис

SQL — Simple Query Language, то есть «простой язык запросов». Его создали, чтобы работать с реляционными базами данных. В таких базах данные представлены в виде таблиц. Зависимости между несколькими таблицами задают с помощью связующих — реляционных столбцов. 

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

Что такое оператор join в SQL

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

Предположим, что у нас есть таблица заказов — Orders:

OrderIDCustomerIDOrderDate
3041012110-05-2021
3041023420-06-2021
3041032225-07-2021

И таблица клиентов — Customers:

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

Результат запроса будет выглядеть так:

OrderIDCustomerNameOrderDate
304101Балалайка Сервис10-05-2021
304103Редиска Менеджмент25-07-2021

Общий синтаксис оператора join:

JOIN <Название таблицы для присоединения> ON <Условие присоединения на основе связующих столбцов>

Соединять можно и больше двух таблиц: к запросу добавьте еще один оператор join. Например, в дополнение к предыдущим двум таблицам у нас есть таблица продавцов — Managers:

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

Результат:

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

OrderIDCustomerIDOrderDate
3041012110-05-2021
3041023420-06-2021
3041032225-07-2021

Таблица Customers:

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

Результат:

OrderIDCustomerNameOrderDate
304101Балалайка Сервис10-05-2021
304102null20-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:

OrderIDCustomerIDOrderDate
3041012110-05-2021
3041023420-06-2021
3041032225-07-2021

Таблица Customers:

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

Результат:

OrderIDCustomerNameOrderDate
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

OrderIDCustomerIDOrderDate
3041012110-05-2021
3041023420-06-2021
3041032225-07-2021

Таблица Customers:

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

Результат:

OrderIDCustomerNameOrderDate
304101Балалайка Сервис10-05-2021
304102null20-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:

OrderIDCustomerIDOrderDate
3041012110-05-2021
3041023420-06-2021
3041032225-07-2021

Таблица Customers:

CustomerIDCustomerNameContactName
21Балалайка СервисИван Иванов
22Рога и копытаСемён Семёнов
23Редиска МенеджментПётр Петров

Запрос:

</p>
<p>SELECT Orders. OrderID, Customers.CustomerName, Orders.OrderDate </p>
<p>FROM Orders </p>
<p>CROSS JOIN Customers;</p>
<p>

Результат:

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

StudentIDNameCourseIDDuration
1Артём13
2Пётр24
1Артём24
3Борис32
2Ирина35

Запрос с оператором 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>

Результат:

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

Результат:

StudentIDName
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: учим с азов, ведем до диплома и помогаем найти работу.

SQL INNER JOIN (с примерами)

В этом руководстве мы узнаем о SQL INNER JOIN с помощью примеров.

SQL INNER JOIN объединяет две таблицы на основе общего столбца и выбирает записи с совпадающими значениями в этих столбцах.

Пример

 ВЫБЕРИТЕ Customers.customer_id, Customers.first_name, Orders.amount
ОТ клиентов
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Заказы
ON Customers.customer_id = Orders. customer; 

Вот как работает этот код:

Пример: SQL INNER JOIN

Здесь команда SQL выбирает столбцы customer_id и first_name (из таблицы Customers ) и столбец amount (из таблицы Orders ).

И результирующий набор будет содержать те строки, в которых есть совпадение между customer_id (из таблицы Customers ) и customer (из таблицы Orders ).


Синтаксис ВНУТРЕННЕГО СОЕДИНЕНИЯ

Синтаксис INNER JOIN :

 SELECT столбцы
ИЗ таблицы1
ВНУТРЕННЕЕ СОЕДИНЕНИЕ таблица2
ON table1.column_name = table2.column_name; 

INNER JOIN с предложением WHERE

Вот пример INNER JOIN с предложением WHERE:

 SELECT Customers.customer_id, Customers.first_name, Orders.amount
ОТ клиентов
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Заказы
ON Customers.customer_id = Orders. customer
ГДЕ Orders.amount >= 500; 

Здесь команда SQL объединяет две таблицы и выбирает строки, в которых Сумма на больше или равна 500 .


SQL INNER JOIN с псевдонимом AS

Мы можем использовать псевдонимы AS внутри INNER JOIN , чтобы сделать наш фрагмент коротким и чистым. Например,

 SELECT C.cat_name, P.prod_title
ИЗ Категории КАК С
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Продукты AS P
ON C.cat_id= P.cat_id; 

Здесь команда SQL выбирает общие строки между таблицей Категория и Продукты .


ВНУТРЕННЕЕ СОЕДИНЕНИЕ SQL с тремя таблицами

Мы также можем объединить более двух таблиц, используя INNER JOIN . Например,

 ВЫБРАТЬ C.customer_id, C.first_name, O.amount, S.status
ОТ клиентов AS C
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Заказы AS O
ВКЛ C.customer_id = O.клиент
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Доставка AS S
ON C.customer_id = S.customer; 

Здесь команда SQL

  • объединяет таблицы Customers и Orders на основе customer_id
  • и присоединяется к Клиентам и Таблица состояния на основе customer_id

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

Примечание: Для запуска этой команды в каждой отдельной таблице должен быть столбец customer_id .


Внутреннее соединение и другие соединения

Мы также можем использовать JOIN вместо INNER JOIN . По сути, эти два пункта одинаковы.

Значит,

 ВЫБЕРИТЕ Customers.customer_id, Customers.first_name, Orders.amount
ОТ клиентов
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Заказы
ON Customers.customer_id = Orders.customer; 

аналогично

 ВЫБЕРИТЕ Customers.customer_id, Customers.first_name, Orders.amount
ОТ клиентов
ПРИСОЕДИНЯЙТЕСЬ к заказам
ON Customers.customer_id = Orders.customer; 

INNER JOIN выбирает общие строки между двумя таблицами. Принимая во внимание, что LEFT JOIN выбирает общие строки, а также все остальные строки из левой таблицы.

Давайте рассмотрим пример,

INNER JOIN

 SELECT Customers.customer_id, Customers. first_name, Orders.amount
ОТ клиентов
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Заказы
ON Customers.customer_id = Orders.customer; 

Вывод

Пример: SQL INNER JOIN Вывод

LEFT JOIN

 SELECT Customers.customer_id, Customers.first_name, Orders.amount
ОТ клиентов
ЛЕВОЕ СОЕДИНЕНИЕ Заказы
ON Customers.customer_id = Orders.customer; 

Вывод

Пример: SQL LEFT JOIN Вывод

INNER JOIN выбирает общие строки между двумя таблицами. Принимая во внимание, что RIGHT JOIN выбирает общие строки, а также все остальные строки из правой таблицы.

Давайте рассмотрим пример,

INNER JOIN

 SELECT Customers.customer_id, Customers.first_name, Orders.amount
ОТ клиентов
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Заказы
ON Customers.customer_id = Orders.customer; 

Вывод

Пример: SQL INNER JOIN Вывод

ПРАВОЕ СОЕДИНЕНИЕ

 SELECT Customers. customer_id, Customers.first_name, Orders.amount
ОТ клиентов
ПРАВОЕ СОЕДИНЕНИЕ Заказы
ON Customers.customer_id = Orders.customer_id; 

Вывод

Пример: SQL RIGHT JOIN Вывод

INNER JOIN выбирает общие строки между двумя таблицами. В то время как FULL OUTER JOIN выбирает все строки из обеих таблиц.

Давайте посмотрим на пример,

ВНУТРЕННЕЕ СОЕДИНЕНИЕ

 ВЫБЕРИТЕ Customers.customer_id, Customers.first_name, Orders.amount
ОТ клиентов
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Заказы
ON Customers.customer_id = Orders.customer; 

Вывод

Пример: SQL INNER JOIN Вывод

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

 SELECT Customers.customer_id, Customers.first_name, Orders.amount
ОТ клиентов
ПОЛНОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ Заказы
ON Customers.customer_id = Orders.customer; 

Вывод

Пример: SQL FULL OUTER JOIN Вывод

Рекомендуемые показания

  • SQL JOIN
  • SQL ЛЕВОЕ СОЕДИНЕНИЕ
  • SQL ПРАВОЕ СОЕДИНЕНИЕ
  • SQL ПОЛНОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ

Содержание

SQL Inner Join

В этой статье представлен обзор INNER JOIN в SQL, а также несколько основных примеров.

SQL INNER JOIN возвращает строки, если в обеих таблицах есть хотя бы одна строка, соответствующая условию соединения. Он отбрасывает несопоставленные строки из обеих таблиц. Это тип соединения по умолчанию.

Синтаксис

Существует два способа указать внутреннее соединение: в предложении FROM (с использованием синтаксиса INNER JOIN ) или в предложении WHERE .

Чтобы указать внутреннее соединение в предложении FROM :

 SELECT *
ИЗ Таблицы 1 ВНУТРЕННЕЕ СОЕДИНЕНИЕ Таблица 2
ON Таблица1.Столбец = Таблица2.Столбец; 

Чтобы указать внутреннее соединение в предложении WHERE :

 SELECT *
ИЗ Таблица1, Таблица2
ГДЕ Таблица1.Столбец = Таблица2.Столбец; 

Ниже приведены примеры каждого из них.

Примеры

Здесь у нас есть примеры для каждого метода определения внутреннего соединения.

Sample Data

Во-первых, вот таблицы, которые мы будем использовать для примеров.

Таблица PetTypes :

 +-------------+------------+
| Идентификатор типа питомца   | Тип питомца   |
|-------------+------------|
| 1           | Птица     |
| 2           | Кот       |
| 3           | Собака       |
| 4           | Кролик    |
+-------------+-----------+
(затронуты 4 ряда) 

Домашние животные стол:

 +---------+-------------+-----------+--- --------+------------+
| Идентификатор домашнего животного   | Идентификатор типа питомца   | Идентификатор владельца   | Имя питомца   | Дата рождения        |
|---------+--------------+-----------+------------+- -----------|
| 1       | 2           | 3         | Пушистый    | 20.11.2020 |
| 2       | 3           | 3         | Получить     | 2019-08-16 |
| 3       | 2           | 2         | Скретч   | 2018-10-01 |
| 4       | 3           | 3         | Виляние       | 2020-03-15 |
| 5       | 1           | 1         | Твитнуть     | 2020-11-28 |
| 6       | 3           | 4         | Пушистый    | 2020-09-17 |
| 7       | 3           | 2         | Кора      | NULL       |
| 8       | 2           | 4         | Мяу      | NULL       |
+---------+-------------+-----------+------------+- -----------+
(затронуты 8 строк) 

Таблица Владельцы :

 +------------+-------------+-------- ----+-+-------------------+
| Идентификатор владельца   | Имя   | Фамилия   | Телефон          | Электронная почта             |
|-----------+-------------+-------------+---------- ------+-------------------|
| 1         | Гомер       | Коннери    | (308) 555-0100 | [электронная почта защищена] |
| 2         | Барт        | Питт       | (231) 465-3497 | [электронная почта защищена]  |
| 3         | Нэнси       | Симпсон    | (489) 591-0408 | NULL              |
| 4         | Борис       | Трамп      | (349) 611-8908 | NULL              |
+-----------+-------------+------------+---------- ------+-------------------+ 

Обратите внимание, что:

  • Столбец PetTypeId таблицы Pets является внешним ключом PetTypeId таблицы PetTypes (которая является первичным ключом этой таблицы).
  • Столбец OwnerId таблицы Pets является внешним ключом столбца OwnerId таблицы Owners .

Пример с использованием синтаксиса INNER JOIN

Вот базовый пример указания внутреннего соединения с использованием синтаксиса INNER JOIN .

 ВЫБЕРИТЕ
    п.имя питомца,
    pt.PetType
ОТ Pets p ВНУТРЕННЕЕ СОЕДИНЕНИЕ PetTypes pt
ON p.PetTypeId = pt.PetTypeId; 

Результат:

 -----------+-----------+
| Имя питомца   | Тип питомца   |
|-----------+------------|
| Пушистый    | Кот       |
| Получить     | Собака       |
| Скретч   | Кот       |
| Виляние       | Собака       |
| Твитнуть     | Птица     |
| Пушистый    | Собака       |
| Кора      | Собака       |
| Мяу      | Кот       |
+-----------+------------+
(затронуто 8 рядов) 

Чтобы указать внутреннее соединение в предложении FROM , мы используем INNER JOIN . Мы также используем ключевое слово ON , чтобы определить предикат, который будет оцениваться для каждой пары соединенных строк.

Независимо от типа соединения мы уточняем имена наших столбцов с именами таблиц. Мы делаем это, чтобы избежать двусмысленности в отношении имен столбцов между таблицами. Обе таблицы могут иметь столбцы с одинаковыми именами (как в нашем примере), и в таких случаях СУБД не будет знать, на какой столбец вы ссылаетесь. Префикс имен столбцов с их именами таблиц гарантирует, что вы ссылаетесь на правильный столбец, и предотвращает любые ошибки, которые могут возникнуть из-за любой двусмысленности в отношении того, на какой столбец вы ссылаетесь.

В этом примере обе таблицы имеют столбец PetTypeId . Столбец Pets.PetTypeId является внешним ключом для столбца PetTypes.PetTypeId , который является первичным ключом для этой таблицы.

В этом примере мы видим, что возвращаются все домашние животные, но возвращаются не все типы домашних животных. В таблице Pets нет кроликов, поэтому тип питомца Rabbits не возвращается.

Причина, по которой тип Rabbits не возвращается, заключается в том, что INNER JOIN возвращает строки только в том случае, если в обеих таблицах есть хотя бы одна строка, соответствующая условию соединения. В данном случае Rabbits есть только в одной таблице (таблица PetTypes ).

Тип соединения не является обязательным

Обратите внимание, что тип соединения является необязательным. Поэтому большинство (если не все) СУБД позволяют опустить ключевое слово INNER . Когда вы опускаете это (т.е. указываете только JOIN ), предполагается, что это внутреннее соединение.

Таким образом, мы могли бы переписать приведенный выше пример следующим образом:

 ВЫБОР
    Pets.PetName,
    PetTypes.PetType
ОТ домашних животных
ПРИСОЕДИНЯЙТЕСЬ
ON Pets.PetTypeId = PetTypes.PetTypeId; 
Форматирование

Как и в любом операторе SQL, вы можете использовать пробелы, отступы и т. д. для форматирования запросов.

Например, предложение FROM может быть на одной строке, если хотите:

 SELECT
    Pets.PetName,
    PetTypes.PetType
ОТ Pets ПРИСОЕДИНЯЙТЕСЬ к PetTypes ON Pets.PetTypeId = PetTypes.PetTypeId; 

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

Пример с использованием пункта WHERE

Вышеприведенное соединение также может называться эквивалентным соединением . Эквивалентное соединение — это соединение, содержащее только сравнения на равенство в предикате соединения.

Вот пример указания внутреннего соединения с использованием предложения WHERE :

 SELECT
    п.имя питомца,
    pt.PetType
ИЗ
    Домашние животные р,
    PetTypes pt
ГДЕ p.PetTypeId = pt.PetTypeId; 

Результат:

 +-----------+-----------+
| Имя питомца   | Тип питомца   |
|-----------+------------|
| Пушистый    | Кот       |
| Получить     | Собака       |
| Скретч   | Кот       |
| Виляние       | Собака       |
| Твитнуть     | Птица     |
| Пушистый    | Собака       |
| Кора      | Собака       |
| Мяу      | Кот       |
+-----------+------------+
(затронуто 8 рядов) 

Результат тот же, что и в предыдущем примере.

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

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

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