Оператор INNER JOIN для объединения таблиц в PostgreSQL
Что такое INNER JOIN / JOIN?
Оператор INNER JOIN или его ещё можно называть просто JOIN, предназначен для внутреннего объединения таблиц. При внутреннем объединении таблиц результатом запроса будут данные, которые полностью удовлетворяют условию в блоке ON.
Для наглядности, работа оператора INNER JOIN / JOIN представлена ниже на изображении. Заштрихованная область, это данные, которые соответствуют условию ON.
Синтаксис оператора INNER JOIN / JOIN
После ключевого слова INNER JOIN / JOIN необходимо указать имя таблицы, с которой нужно выполнить объединение, а в блоке ON указываются условия для объединения.
SELECT список_столбцов FROM таблица_1 [INNER JOIN|JOIN] таблица_2 ON условие_для_объединения WHERE условия_для_фильтрации;
Синтетические данные для работы
Для демонстрации работы оператора INNER JOIN потребуется создать тестовые таблицы и заполнить их данными. В таблице users хранится информация о пользователях, а в таблице city список городов.
-- создание таблицы users CREATE TABLE users ( id integer, last_name varchar(30), first_name varchar(30), city_id integer ); INSERT INTO users(id, last_name, first_name, city_id) VALUES (1, 'Никулина', 'Василиса', 2), (2, 'Климов', 'Алексей', 3), (3, 'Голубев', 'Максим', 6), (4, 'Соколова', 'Дарья', 1); COMMIT; -- создание таблицы city CREATE TABLE city ( id integer, name varchar(30) ); INSERT INTO city(id, name) VALUES (1, 'Екатеринбург'), (2, 'Москва'), (3, 'Санкт-Петербург'), (4, 'Хабаровск'), (5, 'Самара'), (6, 'Смоленск'), (7, 'Казань'); COMMIT;
Практический пример
Необходимо объединить две таблицы users и city методом внутреннего объединения, а затем вывести для каждого пользователя название города, в котором он проживает. В блоке ON таблицы объединяются по идентификатору городов.
SELECT u.id, u.last_name, u.first_name, c.name FROM users u INNER JOIN city c ON c.id = u.city_id;
Выполняем запрос и получаем результат, в котором выведены только те строки, которые соответствуют условию объединения в блоке ON.
Метки: INNER JOIN, PostgreSQL.