MySQL subquery (alt sorgu) nasıl yazılır? (İç içe sorgular)

Alt Sorgunun Tanımı

Alt sorgu, bir SQL sorgusunun içinde yer alan başka bir SQL sorgusudur. Genellikle, ana sorguda kullanılacak verileri filtrelemek veya belirlemek amacıyla kullanılır. Alt sorgular, ana sorguyla bağlantılıdır ve sonuçlar ana sorguya iletilir. Alt sorgular, SELECT, INSERT, UPDATE ve DELETE gibi SQL komutlarında kullanılabilir.

Alt Sorgunun Türleri

Alt sorgular, iki temel türde sınıflandırılabilir:

1. Basit Alt Sorgular (Single-row Subqueries): Tek bir değer döndüren alt sorgulardır. Genellikle WHERE, HAVING ve SET ifadelerinde kullanılır.

2. Çoklu Satır Alt Sorguları (Multiple-row Subqueries): Birden fazla değer döndüren alt sorgulardır. IN, ANY, veya ALL gibi operatörlerle birlikte kullanılır.

Basit Alt Sorguların Kullanımı

Basit alt sorgular genellikle bir değer döndürmek için kullanılır. Örneğin, belirli bir müşterinin en yüksek sipariş tutarını bulmak için aşağıdaki gibi bir sorgu yazılabilir:

“`sql
SELECT customer_name
FROM customers
WHERE customer_id = (
SELECT customer_id
FROM orders
ORDER BY order_total DESC
LIMIT 1
);
“`

Bu sorguda, ana sorgu `customers` tablosundan bir müşteri bulurken, alt sorgu `orders` tablosundaki en yüksek sipariş tutarına sahip olan müşteri kimliğini belirler.

Çoklu Satır Alt Sorguların Kullanımı

Çoklu satır alt sorgular, birden fazla sonucu döndürmek için kullanılır. Örnek olarak, belirli bir ürünün siparişlerini kontrol etmek için şu şekilde bir sorgu yazılabilir:

“`sql
SELECT order_id, product_name
FROM orders
WHERE product_id IN (
SELECT product_id
FROM products
WHERE category = ‘Electronics’
);
“`

Bu sorguda, alt sorgu ‘Electronics’ kategorisindeki ürünlerin kimliklerini döndürür. Ana sorgu ise bu ürünlerden alınan siparişleri listeler.

Alt Sorguların Kullanımı ile Filtreleme

Alt sorguların en yaygın kullanım alanlarından biri, verilerin filtrelenmesidir. Örneğin, belirli bir çalışanların maaşlarının ortalamasının üstünde kazananların listesini almak için şu şekilde bir sorgu yazılabilir:

“`sql
SELECT employee_name
FROM employees
WHERE salary > (
SELECT AVG(salary)
FROM employees
);
“`

Bu sorguda, alt sorgu tüm çalışanların maaş ortalamasını hesaplar ve ana sorgu bu ortalamayı aşan çalışanların isimlerini döndürür.

Alt Sorguların Birlikte Kullanımı

Alt sorgular birden fazla kez kullanılabilir. Örneğin, en yüksek maaş alan çalışanların hangi departmanda çalıştığını bulmak için şöyle bir sorgu yazılabilir:

“`sql
SELECT department_id
FROM employees
WHERE salary = (
SELECT MAX(salary)
FROM employees
);
“`

Burada, alt sorgu en yüksek maaşı bulurken, ana sorgu bu maaşı alan çalışanların bağlı olduğu departmanı verir.

Alt Sorguların Performansı

Alt sorgular, bazı durumlarda performans sorunlarına neden olabilir. Özellikle büyük veri setlerinde, alt sorguların kullanımı yavaşlayabilir. Bu nedenle, WHERE anahtar kelimesiyle ilişkili alt sorgular oluşturulduğunda, performans sıkıntısı yaşanabilir. Bunu önlemek için JOIN ifadeleri tercih edilebilir. Örneğin, aşağıdaki gibi bir sorgu yazmak mümkün olabilir:

“`sql
SELECT e.employee_name
FROM employees e
JOIN (
SELECT department_id, AVG(salary) AS avg_salary
FROM employees
GROUP BY department_id
) avg_salaries ON e.department_id = avg_salaries.department_id
WHERE e.salary > avg_salaries.avg_salary;
“`

Bu sorguda, alt sorgu ile ortalama maaşlar hesaplanır ve daha sonra ana sorgu ile bu ortalamanın üstünde maaş alan çalışanlar listelenir.

Alt Sorgularda Dikkat Edilmesi Gerekenler

Alt sorgular kullanılırken dikkat edilmesi gereken birkaç önemli nokta vardır:
– Alt sorgular, yalnızca SELECT ifadeleriyle sınırlı değildir; bunlar INSERT, UPDATE ve DELETE ifadelerinde de kullanılabilir.
– Alt sorguların veri tipi ile ana sorgunun kullandığı veri tipinin uyumlu olması gerekmektedir.
– Performans ve optimizasyon konularına dikkat edilmelidir. Gerekirse JOIN kullanımı tercih edilebilir.

Bu bağlamda, MySQL’de alt sorgular derin bir kavrayış gerektiren, ancak etkili sorgu yazımı için gerekli olan önemli bir özelliktir. Doğru kullanıldığında, karmaşık veriler üzerinde kapsamlı analizler yapma imkanı sunar.

CEVAP VER

Lütfen yorumunuzu giriniz!
Lütfen isminizi buraya giriniz

SON İÇERİKLER

İLGİNİZİ ÇEKEBİLİR