گاهي از اوقات يك سري از امكانات جديد در دسترس هستند اما فراموش ميشوند. براي مثال روش يافتن ركوردهاي غير يكسان دو جدول يكسان. مثلا يك ديتابيس قديمي داريد دقيقا مشابه ديتابيس كاري فعلي با همان ساختار (ري استور شده از يك بك آپ). اكنون ميخواهيد بدانيد در طول اين مدت چه ركوردهايي به ديتابيس كاري اضافه شده كه در ديتابيس قديمي ري استور شده موجود نيست و كلا كدام ركوردها با هم متفاوتند. چه بايد كرد؟
مثال:
دو جدول موقتي يكسان زير را در نظر بگيريد.
CREATE TABLE #tableA
(
column1 INT,
column2 INT
)
INSERT INTO #tableA
VALUES
(1,1)
,(1, 2)
,(1, 3)
,(2, 1)
SELECT column1,
column2
FROM #tableA
CREATE TABLE #tableB
(
column1 INT,
column2 INT
)
INSERT INTO #tableB
VALUES
(1,1)
,(1, 3)
,(2, 2)
SELECT column1,
column2
FROM #tableB
يك سري ديتاي دلخواه به آنها اضافه شده است. (از روش اضافه كردن چندين ركورد توسط يك عبارت insert كه در اس كيوال سرور 2008 معرفي شده، استفاده گرديده است)
#tableA
column1 column2
----------- -----------
1 1
1 2
1 3
2 1
#tableB
column1 column2
----------- -----------
1 1
1 3
2 2
اكنون ميخواهيم ركوردهايي از جدول A را كه در جدول B نيستند، پيدا كنيم. روش متداول انجام اينكار در اس كيوال سرور 2000 به صورت زير است:
SELECT column1,
column2
FROM #tableA
WHERE NOT EXISTS (
SELECT *
FROM #tableB
WHERE #tableA.column1 = #tableB.column1
AND #tableA.column2 = #tableB.column2
)
column1 column2
----------- -----------
1 2
2 1
SELECT column1, column2 FROM #tableA
EXCEPT
SELECT column1, column2 FROM #tableB
column1 column2
----------- -----------
1 2
2 1
در اين حالت تعداد ستونهاي در نظر گرفته شده براي مقايسه بايد يكسان و يك نوع باشند.
همچنين اگر ميخواهيد ركوردهايي از جدول A را كه در جدول B وجود دارند بيابيد، ميتوان از intersect استفاده كرد.