Ana içeriğe geç

SQL NOT IN Operatörü: Yeni Başlayanlar İçin Kapsamlı Rehber

Bu başlangıç rehberiyle SQL'in NOT IN operatörüne hâkim olun. Verileri etkili biçimde filtrelemeyi öğrenin, yaygın tuzaklardan kaçının ve verimli alternatifleri keşfedin
· 5 dk. oku

Yapay Zeka ile Keşfedin

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 IN operatö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 IN operatö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.

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

  • NULL değerleri için listeyi doğrulayın: Beklenmedik sonuçları önlemek için NOT IN iç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 EXISTS gibi alternatiflerin daha iyi performans sunup sunmadığını değerlendirin.
  • Dizinleme: Mümkünse, NOT IN koş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.

image4.png

Inventory Tablosu

image3.png

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
);

image1.png

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')
);

image2.png

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.

Abid Ali Awan

Yazar

Abid Ali Awan

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.

Konular

İlgili