تفاوت یابی دو جدول SQL Server LEFT JOIN EXCEPT NOT IN NOT EXISTS

یافتن تفاوت داده‌ها بین دو جدول SQL Server: بررسی جامع LEFT JOIN, EXCEPT, NOT IN, NOT EXISTS

در این مقاله به روش‌های مختلفی برای یافتن داده‌های نامتوازن بین دو جدول در SQL Server می‌پردازیم، از جمله استفاده از LEFT JOIN, EXCEPT, NOT IN و NOT EXISTS.

برای شروع، دو جدول را ایجاد کرده و با داده‌های نمونه پر می‌کنیم. هر دو جدول ساختار یکسانی خواهند داشت. جدول اول (TableA) شامل رکوردهای اضافی خواهد بود که در جدول دوم (TableB) موجود نیستند.

CREATE TABLE TableA (
 Id INT PRIMARY KEY,
 Name VARCHAR(50)
);

CREATE TABLE TableB (
 Id INT PRIMARY KEY,
 Name VARCHAR(50)
);

INSERT INTO TableA (Id, Name) VALUES
(1, 'Alice'),
(2, 'Bob'),
(3, 'Charlie'),
(4, 'David'),
(5, 'Eve');

INSERT INTO TableB (Id, Name) VALUES
(1, 'Alice'),
(2, 'Bob'),
(3, 'Charlie'),
(6, 'Frank'),
(7, 'Grace');

ساده‌ترین روش برای یافتن رکوردهایی که در TableA وجود دارند اما در TableB نیستند، استفاده از LEFT JOIN است.

در مثال زیر، TableA را با استفاده از LEFT JOIN به TableB بر اساس ستون Id متصل می‌کنیم. سپس نتایج را فیلتر می‌کنیم، جایی که Id از TableB برابر با NULL باشد. این نشان می‌دهد که رکورد متناظری در TableB برای رکورد مربوطه در TableA وجود ندارد.

SELECT
 A.Id,
 A.Name
FROM
 TableA A
LEFT JOIN
 TableB B ON A.Id = B.Id
WHERE
 B.Id IS NULL;

عملگر EXCEPT سطرهای متمایز را از کوئری اول بازمی‌گرداند که توسط کوئری دوم خروجی داده نشده‌اند. این عملگر برای پیدا کردن رکوردهای منحصر به فرد در یک جدول در مقایسه با دیگری بسیار کارآمد است.

SELECT Id, Name FROM TableA
EXCEPT
SELECT Id, Name FROM TableB;

عملگر NOT IN نیز می‌تواند برای یافتن داده‌های نامتوازن استفاده شود. این عملگر رکوردهایی را از کوئری اول بازمی‌گرداند که مقدار ستون مشخص‌شده در آن‌ها، در لیست مقادیر بازگردانده شده توسط ساب‌کوئری وجود ندارد. این روش برای مقایسه کلیدهای اصلی یا ستون‌های منحصر به فرد مفید است.

SELECT
 Id,
 Name
FROM
 TableA
WHERE
 Id NOT IN (SELECT Id FROM TableB);

عملگر NOT EXISTS مشابه NOT IN است، اما اغلب با مجموعه‌داده‌های بزرگ‌تر عملکرد بهتری دارد، زیرا می‌تواند ارزیابی را به محض یافتن (یا عدم یافتن در مورد NOT EXISTS) یک مطابقت متوقف کند. این رویکرد معمولاً به دلیل بهینه‌سازی داخلی پایگاه داده، سریع‌تر عمل می‌کند.

SELECT
 A.Id,
 A.Name
FROM
 TableA A
WHERE
 NOT EXISTS (SELECT 1 FROM TableB B WHERE B.Id = A.Id);

من علی دستجردی‌ام؛ عاشق کار با دیتا، از SQL Server تا بیگ‌دیتا و هوش مصنوعی. دغدغه‌ام کشف ارزش داده‌ها و به‌اشتراک‌گذاری تجربه‌هاست. ✦ رزومه من: alidastjerdi.com ✦

عضویت
منو باخبر کن!!!
guest
نام
ایمیل

0 دیدگاه
Inline Feedbacks
دیدن تمامی کامنتها

فوتر سایت

ورود به سایت

sqlyar

هنوز عضو نیستید؟

ورود به سایت

هنوز تبت نام نکردید ؟