Соединение таблиц или слияние таблиц — известная функция реляционных баз данных, и она невероятно эффективна. Это позволяет нам консолидировать информацию из нескольких источников для создания более связного и значимого анализа данных. Это также позволяет реляционным базам данных быть хорошо масштабируемыми (но не гибкими), поскольку мы можем разбивать данные на более мелкие, управляемые фрагменты, к которым мы можем обратиться позже.
В этом уроке мы рассмотрим основы объединения или слияния таблиц. Давайте посмотрим на примеры реальных таблиц, чтобы закрепить наши знания.
Пример таблицы
Прежде чем мы углубимся в мир соединений таблиц, давайте настроим базовые таблицы, которые мы будем использовать в демонстрационных целях.
Рассмотрим две таблицы, содержащие информацию о сотрудниках и зарплате, как показано в следующих примерах запросов:
СОЗДАТЬ ТАБЛИЦУ сотрудников (
сотрудник_id INT AUTO_INCREMENT ПЕРВИЧНЫЙ КЛЮЧ,
первое_имя VARCHAR( пятьдесят ),
фамилия VARCHAR( пятьдесят ),
отдел ВАРЧАР( пятьдесят )
);
Затем мы можем вставить образец данных в таблицу сотрудника, как показано в следующих запросах:
ВСТАВИТЬ В сотрудников (имя, фамилия, отдел) ЗНАЧЕНИЯ
( «Алиса» , 'Смит' , 'Человеческие ресурсы' ),
( «Боб» , «Джонсон» , «Маркетинг» ),
( 'Чарли' , 'Уилсон' , «Финансы» ),
( 'Дэйвид' , 'Коричневый' , 'Продажи' ),
( 'Ева' , 'Дэвис' , 'Инжиниринг' );
Давайте продолжим и создадим новую таблицу для хранения информации о зарплате следующим образом:
СОЗДАТЬ ТАБЛИЦУ зарплат (зарплата_id INT AUTO_INCREMENT ПЕРВИЧНЫЙ КЛЮЧ,
идентификатор сотрудника INT,
зарплата ДЕСЯТИЧНАЯ( 10 , 2 ),
начальная_дата ДАТА,
конечная_дата ДАТА,
ВНЕШНИЙ КЛЮЧ (employee_id) ССЫЛКИ на сотрудников (employee_id)
);
Добавьте данные вставки образца в таблицу следующим образом:
ВСТАВИТЬ В зарплаты (идентификатор_сотрудника, зарплата, начальная_дата, конечная_дата) ЗНАЧЕНИЯ
( 1 , 60000.00 , '2023-01-01' , '2023-12-31' ),
( 2 , 55000,00 , '2023-01-01' , '2023-12-31' ),
( 3 , 65000.00 , '2023-01-01' , '2023-12-31' ),
( 4 , 58000,00 , '2023-01-01' , '2023-12-31' ),
( 5 , 70000.00 , '2023-01-01' , '2023-12-31' );
Это должно предоставить нам две таблицы, которые помогут нам продемонстрировать концепцию объединения/слияния таблиц в SQL.
Слияние/объединение таблиц SQL
Давайте рассмотрим различные типы слияний таблиц, которые мы можем выполнить. Мы рассмотрим основные из них по мере перехода к более продвинутым.
ВНУТРЕННЕЕ СОЕДИНЕНИЕ
Первый и наиболее распространенный тип соединения таблиц в SQL — это INNER JOIN. INNER JOIN позволяет нам объединять строки из двух таблиц на основе определенного условия. Затем этот тип возвращает только те строки, в которых есть совпадения между таблицами.
В качестве примера возьмем таблицы «сотрудники» и «зарплаты», которые мы создали ранее. Чтобы выполнить INNER JOIN в SQL, мы используем предложение INNER JOIN следующим образом:
ВЫБИРАТЬe.employee_id,
e.first_name,
е.фамилия,
электронный отдел,
зарплата
ОТ
сотрудники е
INNER JOIN зарплаты НА
e.employee_id = s.employee_id;
В данном примере запроса мы используем INNER JOIN для объединения таблиц «сотрудники» и «зарплаты» в столбце «employee_id», который существует в обеих таблицах. Результирующий набор содержит только совпадающие строки из обеих таблиц.
Пример вывода выглядит следующим образом:
ЛЕВОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ
У нас также есть LEFT OUTER JOIN, который объединяет все строки из левой таблицы и соответствующие строки из правой таблицы. Если совпадений в правой таблице нет, при объединении используется значение NULL.
ВЫБИРАТЬe.employee_id,
e.first_name,
е.фамилия,
электронный отдел,
зарплата
ОТ
сотрудники е
LEFT JOIN зарплаты
НА
e.employee_id = s.employee_id;
В этом примере мы выполняем LEFT OUTER JOIN для объединения таблиц «сотрудники» и «зарплаты». Включаются все строки из таблицы «сотрудники» и добавляются соответствующие строки из таблицы «зарплаты». Однако значения NULL включаются в столбец «зарплата» для несовпадающих строк.
SQL-СОЮЗ
Другой метод объединения таблиц в SQL — использование оператора UNION. Этот оператор позволяет нам объединить результаты двух или более операторов выбора в один набор результатов.
Чтобы объединение было применимо, столбцы в каждом операторе SELECT должны иметь один и тот же тип данных.
Пример следующий:
ВЫБЕРИТЕ идентификатор_сотрудника, имя_фамилии, отдел, NULL AS зарплатаОТ сотрудников е
СОЮЗ
ВЫБЕРИТЕ идентификатор_сотрудника, NULL AS имя_первого, NULL AS фамилия, NULL AS отдел, зарплата
ОТ зарплаты ;
В этом случае UNION объединяет таблицы «сотрудники» и «зарплаты». Затем мы создаем столбцы NULL в каждом операторе SELECT, чтобы гарантировать, что обе таблицы имеют одинаковое количество столбцов.
ОБЪЕДИНЕНИЯ технически распространены, но они могут быть полезны, особенно когда вам нужно объединить таблицы с разными структурами.
Заключение
В этом уроке мы изучили основы объединения/объединения двух таблиц в единый набор результатов. Следует иметь в виду, что в этом посте обсуждаются гораздо более сложные соединения.