Inner join sql пример: Оператор SQL INNER JOIN: синтаксис, примеры
Содержание
SQL INNER JOIN: Полное руководство
Оператор SQL INNER JOIN возвращает строки с точными значениями в двух столбцах двух таблиц. Вы можете объединить таблицу по одному или нескольким столбцам. Операторы JOIN соединяют две таблицы базы данных и сравнивают их содержимое.
Бывают случаи, когда вы хотите получить данные из двух или более таблиц одновременно и объединить результат.
Например, вы можете получить список продуктов и имена поставщиков, которые поставили эти продукты. Информация о названиях продуктов и названиях поставщиков находится в двух таблицах.
Здесь на помощь приходят соединения SQL. Используя условие соединения, вы можете объединить информацию из нескольких таблиц в следующее: один набор результатов. SQL INNER JOIN — это тип соединения, которое возвращает записи, которые имеют совпадающие значения столбцов в двух таблицах. В этом руководстве мы собираемся обсудить, как использовать INNER JOIN.
Содержание
- SQL INNER JOIN
- Пример SQL INNER JOIN
- Вывод
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_ID | AuthorName |
1 | Bruce Eckel |
2 | Robert Lafore |
3 | Andrew Tanenbaum |
Books — содержит в себе информацию о названии книг:
Book_ID | BookName |
3 | Modern Operating System |
1 | Thinking in JavaScript |
3 | Computer Architecture |
4 | Programming 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.
Самостоятельно создайте таблицы и выполните пример. В комментариях можете писать новые примеры к данному оператору и не только.
Виктор Черемных
8 июля, 2018
3 Comments
Группа в VK
Обнаружили опечатку?
Сообщите нам об этом, выделите текст с ошибкой и нажмите Ctrl+Enter, будем очень признательны!
Свежие статьи
Облако меток
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
, чтобы включить в запрос еще одну таблицу. Например, следующий запрос внутреннего соединения объединяет три таблицы.