Inner join sql пример: Оператор SQL INNER JOIN: синтаксис, примеры

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.

Оператор SQL: INNER JOIN. — it-black.ru

Оператор SQL: INNER JOIN. — it-black.ru
Перейти к содержимому

Оператор INNER JOIN формирует таблицу из записей двух или нескольких таблиц. Каждая строка из первой (левой) таблицы, сопоставляется с каждой строкой из второй (правой) таблицы, после чего происходит проверка условия. Если условие истинно, то строки попадают в результирующую таблицу. В результирующей таблице строки формируются конкатенацией строк первой и второй таблиц. Синтаксис оператора:


SELECT
    column_names [,... n]
FROM
    Table_1 INNER JOIN Table_2
ON condition;

Условие для сравнения задается в операторе ON. Пример INNER JOIN. Имеются две таблицы:

Authors — содержит в себе информацию об авторах книг:

Author_IDAuthorName
1Bruce Eckel
2Robert Lafore
3Andrew Tanenbaum

Books — содержит в себе информацию о названии книг:

Book_IDBookName
3Modern Operating System
1Thinking in JavaScript
3Computer Architecture
4Programming in PHP

В таблице Books поле Book_ID являются внешним ключом и ссылаются на таблицу Authors.

Пример. Используя оператор INNER JOIN вывести на экран, какими авторами были написаны какие из книг:


SELECT * FROM Authors INNER JOIN Books
ON Authors.Author_ID = Books.Book_ID;

В запросе оператора INNER JOIN условие сравнения — это равенство полей Author_ID и Book_ID. В результирующую таблицу не попадет книга под названием Programming in PHP, так как значение её Book_ID не найдет равенства ни с одной строкой Author_ID.

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

Facebook

Twitter

  • 3 Comments

Группа в VK

Обнаружили опечатку?

Сообщите нам об этом, выделите текст с ошибкой и нажмите Ctrl+Enter, будем очень признательны!

Свежие статьи

Облако меток

Instagram

Vk

Youtube

Telegram

Odnoklassniki

Полезно знать

Рубрики

Авторы



Внутреннее соединение SQL Server на практических примерах

Резюме : в этом руководстве вы узнаете, как использовать предложение SQL Server INNER JOIN для запроса данных из нескольких таблиц.

Введение в SQL Server

INNER JOIN

Внутреннее соединение является одним из наиболее часто используемых соединений в SQL Server. Предложение внутреннего соединения позволяет запрашивать данные из двух или более связанных таблиц.

См. следующие продукты и категории таблицы:

Следующая инструкция извлекает информацию о продукте из таблицы production.products :

 SELECT
    наименование товара,
    список цен,
    ид_категории
ОТ
    производство.продукция
СОРТИРОВАТЬ ПО
    имя_продукта DESC;
  Язык кода: SQL (язык структурированных запросов) (sql)  

Запрос возвратил только список идентификационных номеров категорий, а не имена категорий. Чтобы включить имена категорий в набор результатов, вы используете INNER JOIN предложение следующим образом:

 SELECT
    наименование товара,
    категория_имя,
    список цен
ОТ
    производство.продукция р
ВНУТРЕННЕЕ СОЕДИНЕНИЕ производство. категории c
    ВКЛ c.category_id = p.category_id
СОРТИРОВАТЬ ПО
    имя_продукта DESC;
  Язык кода: SQL (язык структурированных запросов) (sql)  

В этом запросе:

c и p являются псевдонимами таблиц production.categories   и production.products . Делая это, когда вы ссылаетесь на столбец в этих таблицах, вы можете использовать alias.column_name вместо использования table_name.column_name . Например, запрос использует c.category_id вместо production.categories.category_id . Следовательно, это избавляет вас от набора текста.

Для каждой строки в таблице production.products предложение внутреннего соединения сопоставляет ее с каждой строкой в ​​таблице product.categories на основе значений столбца category_id :

  • Если обе строки имеют такое же значение в category_id внутреннее соединение формирует новую строку, столбцы которой взяты из строк таблиц production. categories и production.products в соответствии со столбцами в списке выбора, и включает эту новую строку в результирующий набор.
  • Если строка в таблице production.products не соответствует строке из таблицы production.categories , предложение внутреннего соединения просто включает эти строки и не включает их в результирующий набор.

SQL Server

INNER JOIN синтаксис

Ниже показан синтаксис предложения SQL Server INNER JOIN :

 SELECT
    select_list
ОТ
    Т1
ВНУТРЕННЕЕ СОЕДИНЕНИЕ T2 ON join_predicate;
  Язык кода: SQL (язык структурированных запросов) (sql)  

В этом синтаксисе запрос извлекает данные из обеих таблиц T1 и T2:

  • Сначала укажите основную таблицу (T1) в предложении FROM
  • Во-вторых, укажите вторую таблицу в Предложение INNER JOIN (T2) и предикат соединения. В результирующий набор включаются только те строки, в которых предикат соединения оценивается как TRUE .

Предложение INNER JOIN сравнивает каждую строку таблицы T1 со строками таблицы T2, чтобы найти все пары строк, которые удовлетворяют предикату соединения. Если предикат соединения оценивается как TRUE , значения столбцов совпадающих строк T1 и T2 объединяются в новую строку и включаются в набор результатов.

В следующей таблице показано внутреннее соединение двух таблиц T1 (1,2,3) и T2 (A, B, C). Результат включает строки: (2, A) и (3, B), поскольку они имеют одинаковые шаблоны.

Обратите внимание, что ключевое слово INNER является необязательным, его можно пропустить, как показано в следующем запросе:

 SELECT
    select_list
ОТ
    Т1
ПРИСОЕДИНЯЙТЕСЬ к T2 ON
  Язык кода: SQL (язык структурированных запросов) (sql)  

Дополнительные примеры внутреннего соединения SQL Server

См. следующее продукты , категории и бренды таблицы:

Следующий оператор использует два предложения INNER JOIN для запроса данных из трех таблиц:

 SELECT
    наименование товара,
    категория_имя,
    имя бренда,
    список цен
ОТ
    производство. продукция р
ВНУТРЕННЕЕ СОЕДИНЕНИЕ production.categories c ON c.category_id = p.category_id
ВНУТРЕННЕЕ СОЕДИНЕНИЕ production.brands b ON b.brand_id = p.brand_id
СОРТИРОВАТЬ ПО
    имя_продукта DESC;
  Язык кода: SQL (язык структурированных запросов) (sql)  

Из этого руководства вы узнали, как использовать предложение SQL Server INNER JOIN для запроса данных из нескольких таблиц.

Запрос ВНУТРЕННЕГО СОЕДИНЕНИЯ SQL

Запрос INNER JOIN используется для извлечения совпадающих записей из двух или более таблиц на основе заданного условия.

Синтаксис:
 ВЫБРАТЬ table1.column_name(s), table2.column_name(s)
ИЗ таблицы1
ВНУТРЕННЕЕ СОЕДИНЕНИЕ таблица2
ON table1.column_name = table2.column_name;
 

Для демонстрационных целей мы будем использовать следующие таблицы Employee и Department во всех примерах.

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

Эмпирид Имя Фамилия Электронная почта Зарплата ИД отдела
1 ‘Джон’ ‘Король’ ‘[электронная почта защищена]’ 33000 1
2 ‘Джеймс’ «Бонд»
3 ‘Нина’ ‘Кочхар’ ‘[электронная почта защищена]’ 17000 2
4 ‘Лекс’ ‘Де Хаан’ ‘[электронная почта защищена]’ 15000 1
5 ‘Амит’ ‘Патель’ 18000 3
6 ‘Абдул’ ‘Калам’ ‘[электронная почта защищена]’ 25000 2

Стол для отдела

ИД отдела Имя
1 ‘Финансы’
2 «HR»

Рассмотрим следующий запрос внутреннего соединения.

 SELECT Сотрудник.EmpId, Сотрудник.Имя, Сотрудник.Фамилия, Отдел.Имя
ОТ Сотрудника
ВНУТРЕННЕЕ СОЕДИНЕНИЕ
ON Сотрудник.ОтделId = Отдел.ОтделId;
 

Приведенный выше внутренний запрос на объединение объединяет таблицу Employee и таблицу Department и извлекает записи из обеих таблиц, где Employee.DeptId = Department.DeptId .
Он извлекает записи только из обеих таблиц, где DeptId в таблице Employee совпадает с DeptId таблицы Department .
Если DeptId имеет значение NULL или не соответствует, то эти записи не будут получены. Ниже приведен результат вышеуказанного запроса.

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

Эмпирид Имя Фамилия Имя
1 ‘Джон’ ‘Король’ ‘Финансы’
3 ‘Нина’ ‘Кочхар’ «HR»
4 ‘Лекс’ ‘Де Хаан’ ‘Финансы’
6 ‘Абдул’ ‘Калам’ «HR»

Обратите внимание, что отображаются только те записи, DeptId совпадает, а DeptId не соответствует нулю или не соответствует.

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

 SELECT Сотрудник.EmpId, Сотрудник.Имя, Сотрудник.Фамилия, Отдел.Имя
ОТ Департамента
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Сотрудник
ON Department.DeptId = Employee.DeptId;
 

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

 ВЫБЕРИТЕ emp.EmpId, emp.FirstName, emp.LastName, dept.Name
ОТ Отдела отдела, Сотрудник emp
ГДЕ dept.DeptId = emp.DeptId;
 

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

 ВЫБЕРИТЕ emp.EmpId, emp.FirstName, emp.LastName, dept.Name
ОТ Отдела отдела
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Сотрудник
ON dept.DeptId = emp.DeptId;
 

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