Kurs
SQL IN operatörü, bir değer kümesine göre verileri filtrelemek için kullanışlı bir araçtır. Uzun sorgularda yer aldığında, IN operatörü karmaşık sorguları basitleştirir ve okunabilirliği artırır.
Gelişmekte olan bir veri uzmanıysanız, verileri filtrelemek için SQL uygulamasının temellerini öğrenmek amacıyla DataCamp’in Introduction to SQL ve SQL Fundamentals kurslarını öneririm. Hızlı bir hatırlatma için SQL Temelleri Cheat Sheet’imize göz atın.
SQL IN Operatörü Nedir?
SQL IN operatörü, SQL sorgularında verileri filtrelemek için güçlü bir araçtır. Belirtilen koşulları karşılayan satırları döndürerek sorgu sonuçlarını iyileştirir.
Ancak, birden fazla koşulla sonuç döndürmek için IN operatörü WHERE koşulundan sonra kullanılır. Bu nedenle, filtrelenen veri türünün farklı değerlere sahip olduğu durumlarda IN operatörü kullanılabilir.
-- Select the employee ID, employee name, and department columns
SELECT employee_id, employee_name, department
FROM employees
-- Filter the results to include only employees whose department is 'Sales' and 'HR'
WHERE department IN ('Sales', 'HR');
Yukarıdaki örnekte, employees tablosundan employee_id, employee_name ve department sütunlarını seçiyoruz. Ancak yalnızca çalışanların Sales ve HR departmanlarında olduğu satırları döndürüyoruz.
IN operatörü, metinler, sayılar ve tarihler dahil olmak üzere farklı SQL veri türlerini filtreleyebilir. Satırları filtrelerken başvuru sütununun uygun veri türüne sahip olduğundan her zaman emin olun.
SQL IN Operatörünün Söz Dizimi
IN operatörünün değerleri filtrelemek için basit bir söz dizimi vardır. WHERE koşulunda, bir sütun listesinden birden fazla değeri filtrelemeye olanak tanımak için kullanılır. IN operatörünün genel söz dizimi aşağıda gösterildiği gibidir.
-- Select the columns you want to retrieve
SELECT column_name(s)
-- Specify the table from which to retrieve the data
FROM table_name
-- Filter the results to include only those rows where the column's value matches any value in the specified list
WHERE column_name IN (value1, value2, ...);
WHERE koşuluna IN operatörünü eklemeye ilişkin pratik bir örnek aşağıdadır.
-- Select the employee ID, employee name, and department columns
SELECT employee_id, employee_name, department
FROM employees
-- Filter the results to include only employees whose department is 'Sales' and 'HR'
WHERE department IN ('Sales', 'HR');
Unutulmaması Gereken Önemli Noktalar
IN operatörü, SELECT ifadesinin WHERE koşulunda yer alır. Bu konumlandırma, sorgunun birden fazla değere göre satırları filtrelemesini sağlar. Bir SQL sorgusunda kullanıldığında, IN operatörü karmaşık sorguları basitleştirir ve okunmalarını kolaylaştırır.
IN operatörü, SQL Server, PostgreSQL, MySQL ve Oracle veritabanları dahil olmak üzere farklı veritabanlarında standarttır. Okunabilirliği artırmak için IN operatörünü standart olarak büyük harfle yazmak önemlidir.
IN Operatörünün Yaygın Kullanım Alanları
SQL IN operatörü, farklı veri analizi uygulamalarında kullanılır. Bu bölümde, veri filtreleme, birden çok değeri ele alma ve alt sorgulardan yararlanma gibi en yaygın kullanım senaryolarından bazılarını inceleyeceğiz.
Veri filtreleme
IN operatörü, kayıtları filtreler ve belirtilen bir değer kümesini döndürür. Örneğin, aşağıdaki sorgu employees tablosundaki tüm sütunları seçecek ve Sales, HR ve IT departmanlarındaki çalışanların bulunduğu satırları döndürecektir.
-- Select all columns from employees table
SELECT employee_id, employee_name, department
FROM employees
-- Filter to include only 'Sales', 'HR', and 'IT' departments
WHERE department IN ('Sales', 'HR', 'IT');
Birden çok değeri ele alma
IN operatörü, birden çok değere sahip kayıtları filtrelemek için de kullanılır. Bu kullanım, verileri birden fazla OR koşuluyla filtrelerken yararlıdır. Dolayısıyla, IN operatörü sorgu okunabilirliğini artırmak için daha basit bir yol sağlar.
Aşağıda, IN operatörü yerine OR operatörü ile sorgunun nasıl görüneceği yer almaktadır.
-- Main query to select employee_id and name from the employees table
SELECT employee_id, name
FROM employees
-- Filter employees based on multiple department names using OR conditions
WHERE department = 'Sales'
OR department = 'Marketing'
OR department = 'HR';
İşte IN operatörünü kullanan sorgu. Yinelenen OR operatörlerini kaldırmanın sağladığı sadeliğe dikkat edin.
-- Main query to select employee_id and name from the employees table
SELECT employee_id, name
FROM employees
-- Filter employees based on a list of department names using the IN operator
WHERE department IN ('Sales', 'Marketing', 'HR');
Alt sorgular
IN operatörünü bir alt sorguda sonuçları filtrelemek için de kullanabilirsiniz. Bu işlem, başka bir sorgudaki veya ilişkili verilerdeki kayıtları filtrelemenizi sağlar. Aşağıdaki örnekte alt sorgu, departments tablosundan Sales departmanının department_id değerini seçer. Bu nedenle ana sorgu, alt sorguya göre filtrelenmiş olarak employees tablosundan employee_id ve ad içeren satırları döndürecektir.
-- Main query to select employee_id and name from the employees table
SELECT employee_id, name
FROM employees
-- Filter employees based on department_id using a subquery
WHERE department_id IN (
-- Subquery to get department_id for the "Sales" department
SELECT department_id
FROM departments
WHERE department_name = 'Sales'
);
Sınırlamalar ve Alternatifler
Her ne kadar IN operatörü SQL sorgularında kullanımı kolay olsa da, uygulamalarında bazı sınırlamalar vardır. Bunlar şunları içerir:
- Geniş Listelerde Performans Sorunları:
INoperatörünün uzun değer listeleriyle kullanılması performans sorunlarına yol açabilir ve sorgu yürütmesini yavaşlatabilir. - NULL Değerleri Ele Alma:
INoperatörüNULLdeğerleri verimli bir şekilde işlemez ve öngörülemeyen sonuçlar döndürebilir. Bu sorun,NULLdeğerlerin değer listesine dahil olmamasından kaynaklanır. - Sınırlı Esneklik:
INoperatörü, birden çok sütun içeren büyük veri kümelerini işlerken sınırlıdır. Yalnızca alt sorgular kullanılarak sınırlı sayıda sütun filtrelenebilir.
IN operatörünün sınırlamalarından kaçınmak için alternatifler şunlardır:
EXISTS operatörünü kullanma
EXISTS operatörü, belirtilen kayıtların bir alt sorguda bulunup bulunmadığını kontrol eder. Doğru kullanıldığında bu operatör verimlidir ve daha hızlı çalışır.
-- Select employee ID and name for employees in departments located in New York using EXISTS
SELECT employee_id, employee_name
FROM employees e
-- Check if there exists a row in the departments table
WHERE EXISTS (
-- Select 1 is used here as a placeholder; it simply checks for existence
SELECT 1
FROM departments d
-- Match the department_id in employees with department_id in departments
WHERE d.department_id = e.department_id
-- Filter for departments located in New York
AND d.location = 'New York'
);
JOIN kullanma
SQL JOIN ifadesi, karmaşık filtrelemeyle veri sorgularken etkilidir ve birden çok ilişkili sütundan veri filtrelerken kullanışlıdır. Aşağıdaki örnekte, New York’ta yaşayan çalışanların kayıtlarını filtrelemek için department_id üzerinde employees ve departments tablolarını birleştirmek amacıyla JOIN ifadesi kullanılmıştır.
-- Select employee ID and name for employees in departments located in New York using JOIN
SELECT e.employee_id, e.employee_name
FROM employees e
-- Join the employees table with the departments table on department_id
JOIN departments d ON e.department_id = d.department_id
-- Filter the results to include only departments located in New York
WHERE d.location = 'New York';
Ortak Tablo İfadeleri (CTE) veya geçici tablolar kullanma
Uzun listelere sahip tablolarınız varsa, sorgulamadan önce değer listesini depolamak için CTE kullanmayı düşünebilirsiniz. Bu yöntem sorgu performansını ve okunabilirliğini artırır.
-- Define a CTE (Common Table Expression) to store the list of department IDs located in New York
WITH DepartmentList AS (
SELECT department_id
FROM departments
WHERE location = 'New York'
)
-- Select employee ID and name for employees who belong to the departments listed in the CTE
SELECT e.employee_id, e.employee_name
FROM employees e
-- Filter the results to include only employees whose department_id is in the list of department IDs from the CTE
WHERE e.department_id IN (SELECT department_id FROM DepartmentList);
Veri filtrelemeye yönelik diğer ileri teknikleri öğrenmek için DataCamp’in Associate Data Analyst in SQL kariyer yolunu öneririm. Ayrıca ortak tablo ifadeleri ve diğer ileri konulara yer veren DataCamp’in Intermediate SQL Server kursuna da göz atabilirsiniz.
Sonuç
SQL IN operatörünü anlamak, analiz sırasında verileri filtrelemenize ve dönüştürmenize olanak tanıdığı için bir veri uygulayıcısı için önemlidir. IN operatörünün kullanımına ilişkin SQL becerilerinizi geliştirmek için farklı veri kümeleri üzerinde pratik yapmanızı öneririm.
SQL bilginizi orta seviyeye taşımak isterseniz, diğer karmaşık sorgulama tekniklerini keşfetmek için Reporting in SQL kursunu öneririm. Ayrıca SQL Associate Certification, ileri düzey analiz için SQL kullanma konusundaki pratik bilginizi göstererek diğer veri analistleri arasında öne çıkmanıza yardımcı olacaktır.
Sıkça Sorulan Sorular
IN operatörünü farklı veri türlerini filtrelemek için kullanabilir miyim?
IN operatörü, metinler, sayılar ve tarihler dâhil olmak üzere farklı SQL veri türlerini filtreler.
IN operatörü alt sorgularda kullanılabilir mi?
IN operatörü, ana sorgudan verileri filtrelemek için gelişmiş bir yöntem olarak alt sorgularda kullanılır.
IN operatörünün alternatifi nedir?
EXISTS operatörü, JOIN ifadesi ve Ortak Tablo İfadeleri (CTE) IN operatörüne en iyi alternatiflerdir.
IN operatörü ile uyumlu veritabanları hangileridir?
Yaygın veritabanları, SQL Server, MySQL, PostgreSQL ve Oracle veritabanları dâhil olmak üzere IN operatörünün kullanımını destekler.

