Сравните две таблицы в SQL

Sravnite Dve Tablicy V Sql



Сравнение данных в SQL — обычная задача, с которой время от времени сталкивается каждый разработчик баз данных. К счастью, сравнение данных осуществляется в самых разных форматах, таких как буквальное сравнение, логическое сравнение и т. д.

Однако один из реальных сценариев сравнения данных, с которым вы можете столкнуться, — это сравнение двух таблиц. Он играет решающую роль в таких задачах, как проверка данных, выявление ошибок, дублирование или обеспечение целостности данных.







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



Пример настройки данных

Прежде чем мы углубимся в каждый из методов, давайте настроим базовую настройку данных для демонстрационных целей.



У нас есть две таблицы с примерами данных, как показано в примере.





Пример таблицы 1:

Ниже приведены запросы для создания первой таблицы и вставки в нее образцов данных:



СОЗДАТЬ ТАБЛИЦУ sample_tb1 (
сотрудник_id INT ПЕРВИЧНЫЙ КЛЮЧ AUTO_INCREMENT,
имя_VARCHAR ( пятьдесят ) ,
фамилия ВАРЧАР ( пятьдесят ) ,
отдел ВАРЧАР ( пятьдесят ) ,
зарплата ДЕСЯТИЧНАЯ ( 10 , 2 )
) ;

ВСТАВИТЬ В образец_tb1 ( имя, фамилия, отдел, зарплата )
ЦЕННОСТИ
( 'Пенелопа' , 'Гнаться' , 'HR' , 55000,00 ) ,
( 'Мэтью' , 'Клетка' , 'ЭТО' , 60000.00 ) ,
( «Джениффер» , 'Дэвис' , «Финансы» , 50000.00 ) ,
( 'Кирстен' , 'Фосет' , 'ЭТО' , 62000.00 ) ,
( «Кэмерон» , 'костнер' , «Финансы» , 48000,00 ) ;

Это должно создать новую таблицу под названием «sample_tb1» с различной информацией, такой как имена, отдел и зарплата.

Итоговая таблица выглядит следующим образом:

Пример таблицы 2:

Давайте продолжим и создадим две образцы таблиц. Предположим, что это резервная копия первой таблицы. Мы можем создать таблицу и вставить образец данных, как показано ниже:

СОЗДАТЬ ТАБЛИЦУ sample_tb2 (
сотрудник_id INT ПЕРВИЧНЫЙ КЛЮЧ AUTO_INCREMENT,
имя_VARCHAR ( пятьдесят ) ,
фамилия ВАРЧАР ( пятьдесят ) ,
отдел ВАРЧАР ( пятьдесят ) ,
зарплата ДЕСЯТИЧНАЯ ( 10 , 2 )
) ;
ВСТАВИТЬ В образец_tb2 ( имя, фамилия, отдел, зарплата )
ЦЕННОСТИ
( 'Пенелопа' , 'Гнаться' , 'HR' , 55000,00 ) ,
( 'Мэтью' , 'Клетка' , 'ЭТО' , 60000.00 ) ,
( «Джениффер» , 'Дэвис' , «Финансы» , 50000.00 ) ,
( 'Кирстен' , 'Фосет' , 'ЭТО' , 62000.00 ) ,
( 'Одри' , 'Дин' , «Финансы» , 48000,00 ) ;

Это должно создать таблицу и вставить образец данных, как указано в предыдущем запросе. Итоговая таблица выглядит следующим образом:

Сравните две таблицы, используя исключение

Один из наиболее распространенных способов сравнения двух таблиц в SQL — использование оператора EXCEPT. При этом будут найдены строки, существующие в первой таблице, но отсутствующие во второй таблице.

Мы можем использовать его для сравнения с примерами таблиц следующим образом:

ВЫБИРАТЬ *
ИЗ образца_tb1
КРОМЕ
ВЫБИРАТЬ *
ИЗ образца_tb2;

В этом примере оператор EXCEPT возвращает все отдельные строки из первого запроса (sample_tb1), которые не появляются во втором запросе (sample_tb2).

Сравните две таблицы, используя Union

Второй метод, который мы можем использовать, — это оператор UNION в сочетании с предложением GROUP BY. Это помогает идентифицировать записи, существующие в одной таблице, а не в другой, сохраняя при этом повторяющиеся записи.

Возьмем запрос, показанный ниже:

ВЫБИРАТЬ
идентификатор сотрудника,
имя,
фамилия,
отделение,
зарплата
ОТ
(
ВЫБИРАТЬ
идентификатор сотрудника,
имя,
фамилия,
отделение,
зарплата
ОТ
sample_tb1
СОЮЗ ВСЕХ
ВЫБИРАТЬ
идентификатор сотрудника,
имя,
фамилия,
отделение,
зарплата
ОТ
образец_tb2
) КАК комбинированные_данные
ГРУППА ПО
идентификатор сотрудника,
имя,
фамилия,
отделение,
зарплата
ИМЕЮЩИЙ
СЧИТАТЬ ( * ) '=' 1 ;

В данном примере мы используем оператор UNION ALL для объединения данных из обеих таблиц, сохраняя при этом дубликаты.

Затем мы используем предложение GROUP BY для группировки объединенных данных по всем столбцам. Наконец, мы используем предложение HAVING, чтобы гарантировать, что выбраны только записи со счетчиком один (без дубликатов).

Выход:

Этот метод немного сложнее, но он обеспечивает гораздо лучшее понимание, поскольку вы получаете фактические данные, которых нет в обеих таблицах.

Сравните две таблицы, используя INNER JOIN

Если вы задумались, почему бы не использовать INNER JOIN? Вы были бы в теме. Мы можем использовать INNER JOIN для сравнения таблиц и поиска общих записей.

Возьмем, к примеру, следующий запрос:

ВЫБИРАТЬ
образец_tb1. *
ОТ
sample_tb1
ВНУТРЕННЕЕ СОЕДИНЕНИЕ sample_tb2 ВКЛ.
sample_tb1.employee_id = sample_tb2.employee_id;

В этом примере мы используем SQL INNER JOIN для поиска записей, существующих в обеих таблицах, на основе заданного столбца. Хотя это работает, иногда это может вводить в заблуждение, поскольку вы не уверены, действительно ли данные отсутствуют или присутствуют в обеих таблицах или только в одной.

Заключение

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