Neden NOT IN?
NOT IN operatörüne odaklanmanın nedeni, veri dışlama senaryolarındaki faydasıdır. İster veri temizliyor, ister rapor hazırlıyor, ister karmaşık analizler yapıyor olun; belirli veri noktalarını etkili biçimde nasıl hariç tutacağınızı anlamak paha biçilmezdir. Bu operatör basit bir sözdizimi sunar ancak performansı ve doğruluğu etkileyebilecek incelikler barındırır.
NOT IN operatörünü derinlemesine ele alma kararımız, SQL sorgularınızda onu etkin biçimde kullanmanız için kapsamlı bir anlayış kazandırmaktır.
SQL NOT IN'ı Anlamak
NOT IN'ın Temelleri
NOT IN operatörü, bir WHERE koşulu içinde kullanılarak, belirtilen bir sütun değerinin verilen listedeki herhangi bir değerle eşleştiği satırları dışlar. Temel sözdizimi şöyledir:
SELECT column_names
FROM table_name
WHERE column_name NOT IN (value1, value2, ...);
Bu sözdizimi, operatörün veri filtrelemedeki rolünü vurgular—veri analizi ve veritabanı yönetiminde kritik bir adımdır.
NOT IN'ın Pratik Kullanımları
Müşteri bilgileri içeren bir veritabanını düşünün. Belirli şehirlerden olmayan müşterileri seçmek isterseniz, NOT IN sonuç kümenizde bu şehirleri kolayca dışlamanızı sağlayarak vazgeçilmez bir araç haline gelir.
Adım Adım NOT IN Örnekleri
Örnek 1: Belirli Değerleri Hariç Tutma
Customers adlı, CustomerID, CustomerName ve City sütunlarına sahip bir tablomuz olduğunu varsayalım. 'New York' veya 'Los Angeles'ta bulunmayan müşterileri bulmak için sorgu şöyle olur:
|
CustomerlD |
CustomerName |
City |
|
1 |
John Doe |
New York |
|
2 |
Jane Smith |
Los Angeles |
|
3 |
Emily Jones |
Chicago |
|
4 |
Chris Brown |
Miami |
|
5 |
Alex Johnson |
San Francisco |
|
6 |
Jessica White |
New York |
Customers Tablosu
SELECT CustomerName, City
FROM Customers
WHERE City NOT IN ('New York', 'Los Angeles');
|
CustomerName |
City |
|
Emily Jones |
Chicago |
|
Chris Brown |
Miami |
|
Alex Johnson |
San Francisco |
Örnek 2: NOT IN'ı Alt Sorgularla Kullanma
NOT IN alt sorgularla da çalışabilir. Örneğin, hiç sipariş edilmemiş ürünleri bulmak için:
|
ProductID |
ProductName |
|
1 |
Apple |
|
2 |
Banana |
|
3 |
Orange |
|
4 |
Pear |
|
5 |
Grape |
Products Tablosu
|
OrderID |
ProductID |
|
101 |
2 |
|
102 |
4 |
|
103 |
2 |
|
104 |
3 |
Orders Tablosu
SELECT ProductName
FROM Products
WHERE ProductID NOT IN (
SELECT ProductID
FROM Orders
);
|
ProductName |
|
Apple |
|
Grape |
Yaygın Tuzaklar ve Bunlardan Kaçınma Yolları
NULL Değerleri Ele Alma
NOT IN ile sık karşılaşılan bir sorun, değer listesinin NULL içermesidir. NULL bilinmeyen bir değeri temsil ettiğinden, NOT IN ile NULL karşılaştırması herhangi bir satır döndürmez; mantıken listeden dışlanması gereken satırlar olsa bile sonuç alamazsınız.
Bunu aşmak için, değer listesinin NULL içermediğinden emin olun veya NOT EXISTS gibi alternatif bir yaklaşım kullanın.
Örnek:
Orders adlı bir tabloda bazıları misafir siparişlerini temsil etmek üzere NULL olan bir CustomerID sütunu olduğunu varsayalım. Belirli müşteriler tarafından verilmeyen siparişleri bulmak için bir sorgu çalıştırırsanız ve listeye NULL eklerseniz, hiçbir sonuç dönmeyecektir.
|
OrderID |
CustomerID |
|
101 |
3 |
|
102 |
4 |
|
103 |
2 |
|
104 | |
|
106 |
1 |
Orders Tablosu
-- Assume we want to exclude CustomerID 1, 2, and unknown (NULL) customers
SELECT OrderID
FROM Orders
WHERE CustomerID NOT IN (1, 2, NULL);
Bu sorgu, muhtemelen amaçlanmayan biçimde, hiçbir satır döndürmez.
Çözüm: Doğru sonuçlar için, NOT IN listesine NULL eklemekten kaçının. Alternatif olarak, bilinen değerler için NOT IN ve NULL'ları ele almak için IS NOT NULL kombinasyonunu kullanın.
SELECT OrderID
FROM Orders
WHERE CustomerID NOT IN (1, 2) AND CustomerID IS NOT NULL;
|
OrderID |
|
101 |
|
102 |
Performansla İlgili Hususlar
Büyük veri kümeleri veya alt sorgular için, NOT IN bazen NOT EXISTS ya da LEFT JOIN /IS NULL gibi alternatiflerden daha az verimli olabilir. Verimsizlik, NOT IN'ın tablodaki her satırı listedeki her değerle karşılaştırma biçiminden kaynaklanır ve bu da büyük veri kümelerinde yavaş çalışmaya yol açabilir.
SQL NOT IN'a Alternatifler
NOT EXISTS Kullanımı
NOT EXISTS, NULL değerler döndürebilecek alt sorgularla çalışırken genellikle NOT IN'a tercih edilir. Genellikle daha verimlidir çünkü bir eşleşme bulur bulmaz durur.
Örnek:
Sipariş edilmemiş ürünleri bulmak için, NOT EXISTS kullanımı:
SELECT ProductName
FROM Products p
WHERE NOT EXISTS (
SELECT 1
FROM Orders o
WHERE o.ProductID = p.ProductID
);
|
ProductName |
|
Apple |
|
Grape |
Bu sorgu, ürünün orders tablosunda bulunmamasını kontrol eder; bu da, NOT IN ile potansiyel olarak büyük bir ID listesiyle karşılaştırmaya kıyasla daha verimli olabilir.
LEFT JOIN / IS NULL
Satırları dışlamanın bir diğer verimli yolu, LEFT JOIN ile WHERE ... IS NULL koşulunu birlikte kullanmaktır. Bu yöntem özellikle büyük veri kümelerinde etkilidir.
Örnek:
Hiç sipariş edilmemiş ürünleri bulma hedefini aynı şekilde gerçekleştirmek için:
SELECT p.ProductName
FROM Products p
LEFT JOIN Orders o ON p.ProductID = o.ProductID
WHERE o.ProductID IS NULL;
|
ProductName |
|
Apple |
|
Grape |
Bu yöntem, tüm ürünleri ve eşleşen siparişleri dahil etmek için LEFT JOIN'dan yararlanır; ardından WHERE o.ProductID IS NULL ile siparişi olan ürünleri filtreleyerek onları etkin biçimde dışlar.
NOT IN Kullanımı İçin En İyi Uygulamalar
NULLdeğerleri için listeyi doğrulayın: Beklenmedik sonuçları önlemek içinNOT INiçinde kullanılan listenin NULL içermediğinden emin olun.- Veri kümesi boyutunu göz önünde bulundurun: Büyük veri kümeleri veya alt sorgular için,
NOT EXISTSgibi alternatiflerin daha iyi performans sunup sunmadığını değerlendirin. - Dizinleme: Mümkünse,
NOT INkoşulunda kullanılan sütunların dizinlendiğinden emin olun; bu, sorgu performansını artırabilir.
Gerçek Hayat Veri Projesinde NOT IN Kullanımı
Veri analizinde, "Not IN" SQL komutu belirli verileri getirmek için yaygın olarak kullanılır. Bu bölümde, envanterini (mağazada mevcut kitaplar) ve satışlarını (satılan kitaplar) takip eden bir kitapçı veritabanı ile çalışacağız. Amacımız, hiç satılmamış kitapları belirlemektir.
İki tablomuz var:
- Inventory: kitapçıdaki kitaplar hakkında bilgi depolar.
- Sales: satılan kitapların kayıtlarını depolar.

Inventory Tablosu

Sales Tablosu
Şimdi, hiç satılmamış kitapların hangileri olduğunu bulmak istiyoruz.
SELECT Title, Author
FROM Inventory
WHERE BookID NOT IN (
SELECT BookID
FROM Sales
);

Sırada, bugün tarihinin 7 Şubat 2024 olduğunu varsayarak, envanterimizde olup da son bir ayda satılmayan kitapları belirlemek var. Bu, Sales tablosundaki SaleDate'i mevcut tarihimize göre kontrol etmeyi içerir.
SELECT Title, Author
FROM Inventory
WHERE BookID NOT IN (
SELECT BookID
FROM Sales
WHERE SaleDate >= date('now', '-1 month')
);

Sonuç
NOT IN operatörü, sorgu sonuçlarınızdan belirli değerleri hariç tutmak için SQL'de çok yönlü bir araçtır. Sözdizimini, pratik uygulamalarını ve olası tuzaklarını anlayarak bu operatörü veri işleme görevlerinizde etkili biçimde kullanabilirsiniz.
Sorgularınızın performansını ve doğruluğunu en iyi duruma getirmek için NULL değerlerini ve veri kümesi boyutunu dikkate almayı unutmayın. NOT IN ile daha aşina oldukça, onu SQL araç setinizin vazgeçilmez bir parçası olarak bulacak ve daha hassas ve verimli veri analizi ile yönetimi sağlayacaksınız.
NOT IN ve NOT EXISTS hakkında daha fazla bilgiyi Improving Query Performance in SQL Server kursumuzda edinebilir; SQL operatörlerini ve çok daha fazlasını SQL Basics Cheat Sheet ve SQL Fundamentals skill track'imizde keşfedebilirsiniz.
Sertifikalı bir veri bilimcisi olarak, yenilikçi makine öğrenimi uygulamaları oluşturmak için en son teknolojileri kullanmaya büyük ilgi duyuyorum. Konuşma tanıma, veri analizi ve raporlama, MLOps, konuşma yapay zekası ve NLP alanlarında güçlü bir geçmişe sahip olarak, gerçek bir etki yaratabilecek akıllı sistemler geliştirme becerilerimi geliştirdim. Teknik uzmanlığımın yanı sıra, karmaşık kavramları açık ve özlü bir dille ifade etme yeteneğine sahip, becerikli bir iletişimciyim. Sonuç olarak, veri bilimi konusunda aranan bir blog yazarı oldum ve giderek büyüyen veri profesyonelleri topluluğuyla görüşlerimi ve deneyimlerimi paylaşıyorum. Şu anda, içerik oluşturma ve düzenlemeye odaklanıyorum. Büyük dil modelleriyle çalışarak, hem işletmelerin hem de bireylerin verilerinden en iyi şekilde yararlanmalarına yardımcı olabilecek güçlü ve ilgi çekici içerikler geliştiriyorum.


Veri analizi ve yönetimi alanında, SQL (Structured Query Language), veritabanı sistemlerine erişmek ve onları işlemek için kritik bir araçtır. Birçok işlevi arasında,
NOT INoperatörü veri kümelerini filtrelemenin güçlü bir yolunu sunar; kullanıcıların belirli bir değer listesiyle eşleşen satırları dışlamasına olanak tanır. Bu eğitim,NOT INoperatörünü yeni başlayanlar ve veri uygulayıcıları için anlaşılır kılmayı, uygulanışında netlik sağlamayı ve olası sakıncalarını anlamayı amaçlar.