Derinlemesine yazılım eğitimleri için kanalımı takip edebilirsiniz...

T-SQL’de Not In Fonksiyonu İle Tablolar Arasındaki Verisel Farkı Bulma

Merhaba,

SQL Server’da birbirlerinden farklı ya da benzer, araların mantıksal ya da fiziksel ilişki bulunan iki tablonun verileri arasında kıyaslama yapmak isteyebilir ve bu kıyaslama neticesinde bir tabloda olup diğerinde olmayan satırları elde etmemiz gerekebilir. İşte böyle bir ihtiyaca istinaden “Not In” fonksiyonu ile çalışmamızı gerçekleştirebilir, iki tabloda ortak değerler barındıran(ki ilişkiyi sağlayanda olabilir) kolonlar arasında kontrol sağlanıp bir tabloda olup diğerinde olmayan satırları tespit ederek, sonuç olarak iki tablo arasındaki verisel farkı yeni bir tablo olarak elde edebiliriz.

Not In fonksiyonu genellikle aşağıdaki mantıkta sorulan sorulara teknik boyutta uygun bir işlevsellik barındırmaktadır;

  • Hangi müşteri bizimle hiç işlem yapmadı?
  • Son günlerde satılmayan ürünler hangileri?
  • Satış yapmayan personeller hangisi?

vs.
Buradan yola çıkarak Not In fonksiyonunu, genellikle olumsuz atmosferleri sorguladığımız durumlarda kullanılan bir fonksiyondur şeklinde hafızanızda anlamlandırabilirsiniz lakin bu durum anlamsal açıdan olumlu verisel farkları gerektiren durumlarda da tercih etmeyeceğiz anlamına gelmemektedir.

Aşağıdaki prototipte Not In fonksiyonunun kullanımını yapısal olarak inceleyebilirsiniz.

SELECT * FROM Tablo1
WHERE X NOT IN
			(
				SELECT X FROM Tablo2
			)

Yukarıdaki prototipe göz attığımızda “Tablo1″deki ve “Tablo2″deki “X” isimli kolonlar kıyaslanmakta ve bu kolonlara istinaden “Tablo1″de olup “Tablo2″de olmayan veriler tablo halinde bizlere sunulmaktadır.

Hemen içeriğimizi bir örnekle zengileştirirsek eğer;

CREATE TABLE PersonelBilgileri
(
	PersonelId INT PRIMARY KEY IDENTITY(1,1),
	Adi NVARCHAR(MAX),
	SoyAdi NVARCHAR(MAX)
)
GO
CREATE TABLE PersonelSatislari
(
	SatisId INT PRIMARY KEY IDENTITY(1,1),
	PersonelId INT,
	CONSTRAINT FK_PersonelSatislari FOREIGN KEY (PersonelId) REFERENCES PersonelBilgileri(PersonelId) ON DELETE CASCADE,
	Urun NVARCHAR(MAX)
)
GO
INSERT PersonelBilgileri VALUES('Gençay', 'Yıldız'),
							   ('Nevin', 'Yılmaz'),
							   ('Mehmet', 'Aslıbay'),
							   ('Gürol', 'Yıldız'),
							   ('Mustafa', 'Gürhan')
GO
INSERT PersonelSatislari VALUES(1, 'Kalem'), (3, 'Silgi'),
							   (5, 'Defter'), (1, 'Kağıt'),
							   (3, 'Boya'), (1, 'Kalem Traş'),
							   (1, 'Tahta Kalemi'), (1, 'Kalemlik'),
							   (1, 'Beslenme Çantası'), (3, 'Çanta'),
							   (1, 'Pastel Boya'), (5, 'A4'),
							   (5, 'Sabun'), (1, 'Önlük')

“PersonelBilgileri” ve “PersonelSatislari” isminde iki adet tablo oluşturalım ve içlerine yukarıda olduğu gibi az çok verilerimizi girelim.

Her iki tablomuzun içeriğine baktığımız zaman görsel olarak aşağıdaki gibi verisel farkı görebilmekteyiz.

T-SQL'de Not In Fonksiyonu İle Tablolar Arasındaki Verisel Farkı Bulma

Buradan da anlaşılıyor ki; “PersonelBilgileri” tablosunda “2” ve “4” idlerine sahip veriler varken “PersonelSatislari” tablosunda bu veriler bulunmamaktadır. Yani aradaki fark görmüş olduğunuz bu iki veridir.

Not In fonksiyonuyla farkı ortaya koyarsak eğer;
T-SQL'de Not In Fonksiyonu İle Tablolar Arasındaki Verisel Farkı Bulma
şeklinde farkı elde edeceğiz.

Gördüğünüz üzere gayet güzel ve kullanışlı olan Not In fonksiyonu ile SQL sorgularında farklı tablolar arasındaki verisel ilişkilerden bağıntılar oluşturabilir ve kompleks raporlama algoritmalarına pratik desteklerde bulunabilirsiniz.

Sonraki yazılarımda görüşmek üzere…
İyi çalışmalar…

Bunlar da hoşunuza gidebilir...

2 Cevaplar

  1. Ömer dedi ki:

    Çok teşekkürler, ilk sorgudan işime yarayan bir bölüm buldum. Diğer arkadaşlara kolaylık olması açısından şöyle bir yapıda kod çalıştı;
    2 tablom var, biri randevular, biri müsaitlik durumları.
    Eğer biri randevu alırsa bu kayıt randevulara gidiyor ve müsatlik bölümünde yeni randevu alacak kişi alınan o müsaitlik saatine kayıt eklememesi gerekiyor. İlk kod işime yaradı. Teşekkürler

  1. 24 Nisan 2018

    […] yazılarımdan T-SQL’de Not In Fonksiyonu İle Tablolar Arasındaki Verisel Farkı Bulma başlıklı makalemde Not In fonksiyonu ile iki tablo arasındaki farkı bulmuş ve tablo olarak […]

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir