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.
Использование оператора INNER JOIN
Об объекте
Учебные материалы
Правила описания синтаксиса команд SQL
Выборка данных
Сортировка выбранных данных
Фильтрация данных (предложение WHERE)
Создание вычисляемых полей
Агрегирующие функции
Итоговые данные (предложение GROUP BY)
Объединение таблиц
Внутреннее объединение
Использование предложения WHERE
Использование оператора INNER JOIN
Внешние объединения
Подзапросы
Комбинированные запросы
Вопросы для самопроверки
Практические задания
Список литературы
Приложение
Использование оператора INNER JOIN
Синтаксис оператора SELECT для выполнения операции внутреннего объединения имеет вид:
SELECT [DISTINCT] [<table1>.
FROM <table1> [INNER] JOIN <table2> [таблица_1.]
ON <column_name><join_condition>…][таблица_2.]<column_name>
Оператор SELECT здесь точно такой же, как и при использовании предложения WHERE, но предложение FROM другое. Здесь отношение между двумя таблицами является частью предложения FROM, указанного как INNER JOIN. При использовании такого синтаксиса предложение объединения указывается с использованием специального предложения ON вместо предложения WHERE. Фактическое предложение, передаваемое в ON, то же самое, которое передавалось бы в предложение WHERE*.
Ниже представлены запросы из предыдущего раздела, написанные с применением INNER JOIN.
Примеры
Получить список клиентов из Сиэтла, с указанием номеров действующих договоров.
SQL:
SELECT contract_id, lastname, name
FROM tbl_clients
JOIN tbl_contract ON tbl_clients.client_id = tbl_contract.client_id
WHERE
retire_date IS NULL AND region=’Seattle’
Подсчитать количество договоров, заключенных на пользование каждой из предлагаемых услуг. Полученный список отсортировать по названию услуги.
SQL:
SELECT service, СOUNT(contract_id)
ROM tbl_service
INNER JOIN tbl_contract ON tbl_service.service_id =
tbl_contract.service_id
GROUP BY service
Получить список клиентов и услуг, с указанием номеров договоров. Список отсортировать по фамилиям клиентов.
SQL:
SELECT lastname, name, contract_id, service
FROM tbl_service
INNER
JOIN tbl_contract ON tbl_service. service_id = tbl_contract.service_id
INNER JOIN
tbl_clients ON tbl_contract.client_id=tbl_clients.client_id
WHERE retire_date IS NULL ORDER BY lastname
Вычислить сумму, которую должен платить каждый клиент за пользование услугами.
SQL:
SELECT lastname, name, SUM(price)
FROM tbl_service
INNER JOIN tbl_contract ON tbl_service.service_id =
tbl_contract.service_id
WHERE retire_date IS NULL
GROUP BY lastname ORDER BY lastname
* — Согласно спецификации ANSI, для создания объединений предпочтительнее использовать синтаксис INNER JOIN
« Previous | Next »
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 ).
И набор результатов будет содержать те строки, в которых есть совпадение между
Синтаксис ВНУТРЕННЕГО СОЕДИНЕНИЯ
Синтаксис 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 используется для извлечения совпадающих записей из двух или более таблиц на основе заданного условия.
Синтаксис:
ВЫБРАТЬ 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 для достижения того же результата, как показано ниже.
SELECT emp.EmpId, emp.FirstName, emp.LastName, dept.Name ОТ Отдела отдела, Сотрудник emp ГДЕ dept.DeptId = emp.DeptId;
Псевдонимы можно использовать как сокращения имен таблиц, как показано ниже.
SELECT emp.EmpId, emp.FirstName, emp.LastName, dept.Name ОТ Отдела отдела ВНУТРЕННЕЕ СОЕДИНЕНИЕ Сотрудник ON dept.DeptId = emp.DeptId;
Повторите оператор INNER JOIN.. ON
, чтобы включить в запрос еще одну таблицу. Например, следующий запрос внутреннего соединения объединяет три таблицы.