Как сравнить 2 таблицы в sql
Перейти к содержимому

Как сравнить 2 таблицы в sql

  • автор:

SQL-Ex blog

Недавно мы рассматривали сравнение схем с помощью Azure Data Studio. Что если нам потребуется сравнение таблиц с помощью запроса? В этой статье мы сравним использование EXCEPT, NOT IN, и NOT EXISTS для нахождения различий в двух таблицах.

Мы будем сравнивать две таблицы Comic и Comic_Copy. В Comic содержится на 48 строк больше, чем в Comic_Copy. Давайте найдем отличие.

EXCEPT

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

SELECT Id,Title 
FROM Comic
EXCEPT
SELECT Id,Title
FROM Comic_Copy;
GO

Мы видим 48 строк, что правдоподобно, исходя из подсчетов, которые мы рассматривали ранее.

NOT IN

Теперь мы будем использовать NOT IN для сравнения таблиц. Выберем Id из таблицы Comic, и будем использовать подзапрос, чтобы получить идентификаторы в Comic_Copy:

SELECT Id, Title 
FROM Comic
WHERE Id NOT IN (
SELECT Id
FROM Comic_Copy
);
GO

Мы опять получаем наши 48 строк.

NOT EXISTS

Наконец, давайте проверим NOT EXISTS.

SELECT Id, Title 
FROM Comic AS c
WHERE NOT EXISTS (
SELECT 1
FROM Comic_Copy AS cc
WHERE cc.Id = c.Id
);
GO

Что работает лучше?

Если мы выполним все три запроса вместе, какой покажет себя лучше остальных?

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

Хотя NOT IN и NOT EXISTS работают по-разному. Для NULL-значений NOT IN не вернет записей, поскольку NULL-значения не трактуются как сравниваемые. При использовании NOT EXISTS NULL также будут возвращаться.

Если мы изменим одно из значений title на NULL:

UPDATE Comic 
SET Title = NULL
WHERE /> GO

и выполним запросы на сравнение по Title, то получим разные результаты. NOT IN даст нам 47 строк:

А NOT EXISTS по-прежнему дает 48:


Переходим на NOT EXISTS

Мы рассмотрели три разных метода нахождения различий между таблицами. Все три варианта с использованием EXCEPT, NOT IN и NOT EXISTS могут выполнить работу, но разными способами. NOT EXISTS был бы моим «выбором» для оптимального поиска различий, но имейте в виду наличие NULL при сравнении с помощью NOT IN.

Обратные ссылки

Нет обратных ссылок

Комментарии

Показывать комментарии Как список | Древовидной структурой

Автор не разрешил комментировать эту запись

Как сравнить две таблицы sql

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

Оператор JOIN используется для объединения двух таблиц по определенному условию, например, по ключевому полю. Следующий запрос объединяет две таблицы table1 и table2 по столбцу id и выбирает все строки, где значения в столбцах column1 и column2 совпадают:

Оператор EXCEPT используется для вычитания одной таблицы из другой. Следующий запрос выбирает все строки из таблицы table1 , которых нет в таблице table2 :

Еще есть оператор UNION для объединения строк из двух таблиц, но это не сравнение таблиц, а скорее склейка данных из них.

Сравнение двух таблиц

Необходимо сравнить 2 таблицы, в 1-й таблице больше записей чем во 2-м, но и во второй таблице есть id-шники которые нет в первой таблице Вообщем необходимо определить разницу вывести null показать разницу и написать в колонке типа есть различие

Отслеживать

задан 19 авг 2015 в 5:21

1,217 1 1 золотой знак 15 15 серебряных знаков 27 27 бронзовых знаков

Чтобы задать хороший вопрос про SQL, используйте эту инструкцию.

19 авг 2015 в 8:31

Воспользуйтесь моим ответом: table1.id = ob.esbd_id table1 = [dbo].[ogpo_branch] table2 = [dbo].[Филиалы Цесна Гарант$] f table2.id = f.[Код регионального подразделения ЕСБД — ID] И тогда запрос выглядит: SELECT ob.esbd_id, f.[Код регионального подразделения ЕСБД — ID] from [dbo].[ogpo_branch] FULL OUTER JOIN [dbo].[Филиалы Цесна Гарант$] f ON ob.esbd_id = f.[Код регионального подразделения ЕСБД — ID] WHERE ob.esbd_id IS NULL OR f.[Код регионального подразделения ЕСБД — ID] IS NULL;

Как сравнить два столбца в sql

Для сравнения двух столбцов в SQL можно использовать оператор сравнения = или <> .

Например, чтобы выбрать все строки, где значения в столбце A равны значениям в столбце B , можно написать следующий запрос:

А чтобы выбрать все строки, где значения в столбце A не равны значениям в столбце B , можно написать следующий запрос:

Важно учитывать, что сравнение может быть выполнено только между столбцами с одним и тем же типом данных. Если типы данных не совпадают, необходимо преобразовать значения в одинаковый тип данных, например, с помощью функции CAST или CONVERT .

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *