
Subquery, bir SQL sorgusunun icinde bulunan bir sorgudur ve bir ana sorgunun sonuc kumesindeki verileri dondurur. Bir alt sorgu, bir ust sorgunun kaynak verilerinin bir parcasını dondurmek icin kullanılır. Alt sorgu, ust sorguda kullanılan bir operator, fonksiyon veya ifade icinde yer alabilir. Bu alt sorgular, karmaşık sorgulama gerektiren durumlarda kullanışlıdır ve genellikle diğer sorgulama teknikleri ile birlikte kullanılırlar.
Subquery, bir SQL sorgusunun icinde yer aldığı icin, bir sorgu icindeki bir tablodan veya başka bir veri kaynağından veri cekmek icin kullanılabilir. Alt sorgu, ana sorguda kullanılan bir koşul ifadesi olarak işlev gorebilir ve bir sorgunun sonuc kumesini daha da filtreleyebilir veya sınırlayabilir. Alt sorgular ayrıca, bir sorgunun icinde yer alan bir başka sorgunun sonucunu işlemek icin kullanılabilir.
Alt sorgular, iki ana kategoriye ayrılabilir: Tek satırlı alt sorgular ve cok satırlı alt sorgular. Tek satırlı alt sorgular, yalnızca bir değer dondurur ve bir sorgu icinde bir koşul ifadesi olarak kullanılabilir. Cok satırlı alt sorgular, bir sorgu sonucu olarak birden cok satır dondurebilir ve bir tablonun bir parcası olarak kullanılabilir.
Alt sorguların kullanımı, SQL sorgularının karmaşıklığını artırabilir, ancak bazı durumlarda daha verimli bir sorgu yazmayı mumkun kılar. Alt sorgular, başka bir sorgunun sonucuna dayanan sorgular yazmak icin kullanılabilir ve bircok veritabanı yonetim sistemi, alt sorguların desteklenmesi icin optimize edilmiştir.
Bir alt sorgu, bir SQL sorgusunun herhangi bir yerinde kullanılabilir. Alt sorgular, SELECT, INSERT, UPDATE ve DELETE sorgularının herhangi birinde kullanılabilir. Orneğin, bir alt sorgu, bir tablonun herhangi bir alanında veri aramak icin kullanılabilir. Alt sorgular ayrıca, bir sorgunun sonucuna gore bir tablodan veri eklemek veya guncellemek icin de kullanılabilir.
Bir alt sorgu, bir SELECT sorgusu icinde kullanılarak, bir sorgunun sonuc kumesindeki verileri daha da filtrelemek icin kullanılabilir. Orneğin, aşağıdaki SQL sorgusu, Customers tablosundaki muşterilerin isimlerini, şehirlerini ve devletlerini dondurur:
SELECT CustomerName, City, State
FROM Customers;
Ancak, bu sorgunun sonucu cok fazla veri icerebilir ve daha spesifik bir
sonuc kumesi elde etmek isteyebilirsiniz. Bu durumda, bir alt sorgu kullanarak sorgunun sonucunu daha da filtreleyebilirsiniz. Orneğin, aşağıdaki SQL sorgusu, muşterilerin şehirleri “London” olanları dondurur:
SELECT CustomerName, City, State
FROM Customers
WHERE City = ‘London ’;
Bu sorgu, sadece “London” şehrindeki muşterileri dondurur. Ancak, bu sorgu, yalnızca “London” şehrindeki muşterileri dondurur ve diğer şehirlerdeki muşterileri dışlar. Bu durumda, bir alt sorgu kullanarak sorgunun sonucunu daha da filtreleyebilirsiniz. Orneğin, aşağıdaki SQL sorgusu, “London” şehrindeki muşterilerin “UK” devletinde olduğunu dondurur:
SELECT CustomerName, City, State
FROM Customers
WHERE State = (
SELECT State
FROM Customers
WHERE City = ‘London ’
);
Bu sorgu, “London” şehrindeki muşterilerin “UK” devletinde olduğunu dondurur ve diğer şehirlerdeki muşterileri dışlamaz.
Bir alt sorgu, bir SELECT sorgusu icinde kullanılabilmesinin yanı sıra, bir INSERT sorgusu icinde de kullanılabilir. Orneğin, aşağıdaki SQL sorgusu, “Orders” tablosuna bir yeni sipariş ekler:
INSERT INTO Orders (CustomerID, OrderDate, ShippedDate)
VALUES (
(SELECT CustomerID FROM Customers WHERE CustomerName = ‘Alfreds Futterkiste ’),
‘2023-04-05 ’,
‘2023-04-10 ’
);
Bu sorgu, “Customers” tablosundan muşteri ID ’sini ve belirtilen tarihleri alan bir alt sorgu kullanarak “Orders” tablosuna yeni bir sipariş ekler.
Bir alt sorgu, bir UPDATE sorgusu icinde de kullanılabilir. Orneğin, aşağıdaki SQL sorgusu, “Customers” tablosundaki muşterilerin şehirlerini “Paris” olarak gunceller:
UPDATE Customers
SET City = ‘Paris ’
WHERE Country = (
SELECT Country
FROM Customers
WHERE City = ‘Paris ’
);
Bu sorgu, “Paris” şehrindeki muşterilerin ulkelerini alan bir alt sorgu kullanarak “Customers” tablosundaki muşterilerin şehirlerini “Paris” olarak gunceller.
Son olarak, bir alt sorgu, bir DELETE sorgusu icinde de kullanılabilir. Orneğin, aşağıdaki SQL sorgusu, “Customers” tablosundaki şehri “Berlin” olan muşterileri siler:
DELETE FROM Customers
WHERE City = (
SELECT City
FROM Customers
WHERE City = ‘Berlin ’
);
Bu sorgu, “Berlin” şehrindeki muşterileri alan bir alt sorgu kullanarak “Customers” tablosundaki muşterileri