0Pricing
SQL Interview Prep · Ders

BETWEEN, IN ve Dahil Sınırlar

Sınır durumlarını ve BETWEEN'in uç noktaları nasıl ele aldığını öğrenin.

BETWEEN, IN ve Dahil Sınırlar, CoddyKit'te ücretsiz bir SQL Interview Prep dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, SQL Interview Prep öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. SQL Interview Prep kursu toplamda 4 dersten oluşur.

Sınırlar Adaylara Neden Puan Kaybettirir

Aralık ve küme filtreleri önemsiz görünür; bu yüzden görüşmeciler adayları köşeye sıkıştırmak için sınır durumlarını kullanır. BETWEEN her iki uç noktayı da kapsar, IN ince bir NULL tuzağını gizler ve tarih aralıkları, raporları sessizce bozan bir eksik veya fazla hatasının en sık görüldüğü yerdir.

Bu derste BETWEEN'in uç noktalarını tam olarak nasıl ele aldığını, IN'in zincirlenmiş OR koşullarından ne zaman daha temiz olduğunu ve profesyonellerin tarihler için kullandığı yarı açık aralık kalıbını öğreneceksiniz.

BETWEEN Her İki Sınırı da Kapsar

col BETWEEN a AND b, col >= a AND col <= b ifadesinin kısa yazımıdır. Her iki sınır da kapsanır.

Bu nedenle price BETWEEN 10 AND 20, fiyatı tam olarak 10 veya tam olarak 20 olan satırların yanı sıra aradaki tüm satırları da döndürür. Mülakatlarda en sık verilen yanlış yanıt, üst sınırın kapsam dışında olduğunu söylemektir.

SELECT *
FROM products
WHERE price BETWEEN 10 AND 20;
-- equivalent to: price >= 10 AND price <= 20

Argümanların Sırası Önemlidir

BETWEEN önce alt sınır değerini gerektirir. col BETWEEN 20 AND 10, col >= 20 AND col <= 10 ifadesine açılır; bu ifade hiçbir zaman doğru olamayacağından sorgu hata vermek yerine sıfır satır döndürür.

Bu, sevilen bir tuzaktır: sorgu sorunsuz çalışır, hiçbir şey döndürmez ve aday verilerin boş olduğunu varsayar. Küçük olan sınırı her zaman önce yazın.

SELECT *
FROM products
WHERE price BETWEEN 20 AND 10;
-- returns NOTHING, not an error

Tarih Aralığında Bir Eksik veya Fazla Hatası

Ocak ayının tamamını istemeniz istendiğinde birçok aday order_date BETWEEN '2024-01-01' AND '2024-01-31' yazar. order_date bir zaman damgasıysa bu ifade, 31 Ocak gece yarısından sonraki her şeyi dışarıda bırakır; çünkü 2024-01-31, 2024-01-31 00:00:00 anlamına gelir.

31 Ocak saat 14.00'te verilen bir sipariş dışarıda kalır. Yalnızca DATE sütunlarıyla çalışır, ancak sütun türünü varsayamazsınız.

SELECT *
FROM orders
WHERE order_date BETWEEN '2024-01-01' AND '2024-01-31';
-- silently excludes Jan 31 afternoon if order_date is a timestamp

Yarı Açık Aralıkla Çözüm

Tarihler için profesyonel kalıp bir yarı açık aralıktır: başlangıç değerini kapsar, sonraki dönemin başlangıcını kapsamaz. Bu yaklaşım hem DATE hem de TIMESTAMP için doğrudur ve sütunun zaman çözünürlüğü hakkında bilgi gerektirmez.

Üst sınırın Ocak ayının son günü değil, Şubat ayının ilk günü olduğuna dikkat edin. Böylece Ocak ayındaki her zaman anı kapsanır.

SELECT *
FROM orders
WHERE order_date >= '2024-01-01'
  AND order_date <  '2024-02-01';

NOT BETWEEN

col NOT BETWEEN a AND b, col < a OR col > b ifadesine açılır. Her iki sınırı ve aralarındaki her şeyi dışarıda bırakır.

Dikkat: col değeri NULL ise NOT BETWEEN, UNKNOWN olarak değerlendirilir; bu nedenle NULL satırları, sıradan BETWEEN kullanımında olduğu gibi dışarıda kalır. NULL değerleri hiçbir yöndeki aralık testini karşılamaz.

SELECT *
FROM products
WHERE price NOT BETWEEN 10 AND 20;
-- price < 10 OR price > 20

IN ile Küme Üyeliği

col IN (a, b, c), col = a OR col = b OR col = c ifadesinin kısa yazımıdır. Küçük, sabit bir kümeye üyeliği sınamanın temiz yoludur.

Bir OR zincirinden daha iyi okunur ve tüm küme sınaması tek bir koşul olduğundan önceliğe bağlı parantez sorununu tamamen önler.

SELECT *
FROM orders
WHERE status IN ('pending', 'shipped', 'delivered');

NOT IN ve NULL Tuzağı

Bu, en çok çekinilen IN sorusudur. NOT IN'in kullandığı listede veya alt sorguda tek bir NULL bulunursa, koşulun tamamı UNKNOWN olarak değerlendirilebilir ve sıfır satır döndürebilir.

Nedeni şudur: x NOT IN (1, NULL), x <> 1 AND x <> NULL ifadesine dönüşür ve x <> NULL hiçbir zaman doğru olmaz; sonucu UNKNOWN'dur. AND koşulunun tamamı hiçbir zaman doğru olamaz.

SELECT *
FROM employees
WHERE manager_id NOT IN (SELECT id FROM managers);
-- returns NOTHING if any managers.id is NULL

NOT IN'i Düzeltme

NOT IN NULL tuzağı için iki sağlam çözüm vardır:

  • Alt sorgudaki NULL değerlerini WHERE id IS NOT NULL ile filtreleyin
  • Daha iyisi, bunu NOT EXISTS olarak yeniden yazın; tasarımı gereği NULL değerlerini doğru şekilde ele alır

Görüşmeciler NOT EXISTS'i kıdemli düzeydeki yanıt olarak değerlendirir; çünkü bu yaklaşım tuzağı tamamen ortadan kaldırır ve çoğu zaman daha iyi yürütme planları üretir.

SELECT e.*
FROM employees e
WHERE NOT EXISTS (
  SELECT 1 FROM managers m WHERE m.id = e.manager_id
);

Alt Sorguyla IN

IN, tek sütun döndüren bir alt sorguyu kabul eder. WHERE customer_id IN (SELECT customer_id FROM vip), müşterisi VIP kümesinde bulunan satırları korur.

Sıradan IN (NOT IN değil), alt sorgudaki NULL değerleriyle güvenlidir: listedeki bir NULL hiçbir zaman eşleşmez, ancak eşleşen satırları etkilemez. Tuzak yalnızca NOT IN'e özgüdür.

SELECT *
FROM orders
WHERE customer_id IN (SELECT customer_id FROM vip_customers);

Satır Oluşturucularıyla Çok Sütunlu IN

Sık sorulan bir devam sorusu şudur: aynı anda birden fazla sütuna göre nasıl eşleştirme yaparsınız? Bir satır oluşturucu kullanarak IN ifadesine bir demet aktarın; sütunları konumsal olarak karşılaştırır ve OR (a = .. AND b = ..) zincirlemekten çok daha temizdir.

  • Açık biçimde okunur ve uzun izin listelerine kolayca ölçeklenir.
  • Her demet, sütunları aynı sırada listelemelidir.
SELECT *
FROM orders
WHERE (customer_id, status) IN ((101, 'paid'), (102, 'shipped'));

Hızlı Kontrol

BETWEEN'in sınırları nasıl ele aldığını hatırlayın.

Özet

Önemli çıkarımlar:

  • BETWEEN a AND b her iki sınırı da kapsar; alt sınır önce gelmelidir, aksi halde sıfır satır alırsınız
  • Zaman damgası aralıklarında yarı açık aralık kullanın: >= start AND < next_period
  • IN temiz bir küme üyeliği sınamasıdır ve NULL değerleriyle güvenlidir
  • Listede herhangi bir NULL bulunan NOT IN hiçbir şey döndürmez; bunu NOT EXISTS olarak yeniden yazın

Tekrarlanan tema şudur: Bir filtre kusursuzca çalışabilir ve yine de yanlış satırları sessizce döndürebilir.

Sıkça Sorulan Sorular

“BETWEEN, IN ve Dahil Sınırlar” dersi ücretsiz mi?

Evet — “BETWEEN, IN ve Dahil Sınırlar” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve SQL Interview Prep kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. SQL Interview Prep kursu toplamda 4 dersten oluşur.

“BETWEEN, IN ve Dahil Sınırlar” dersinde ne öğreneceğim?

Sınır durumlarını ve BETWEEN'in uç noktaları nasıl ele aldığını öğrenin. SQL Interview Prep ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

SQL Interview Prep öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te SQL Interview Prep, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.

“BETWEEN, IN ve Dahil Sınırlar” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu SQL Interview Prep dersinde kod yazıp çalıştırabilir miyim?

Evet. Her SQL Interview Prep dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. AND/OR Önceliği ve Parantez Kullanımı
  2. BETWEEN, IN ve Dahil Sınırlar
  3. LIKE, Joker Karakterler ve Kaçış
  4. Hesaplanan Değerlere Göre Filtreleme
← SQL Interview Prep Sayfasına Dön