Subquery, bir SQL sorgusunun içinde bulunan bir sorgudur ve bir ana sorgunun netice kümesindeki bilgileri döndürür. Bir alt sorgu, bir üst sorgunun kaynak bilgilerinin bir parçasını döndürmek için kullanılır. Alt sorgu, üst sorguda kullanılan bir cerrah, işlev veya ifade içinde yer alabilir. Bu alt sorgular, karışık denetleme gerektiren gidişatlarda kullanışlıdır ve genellikle öteki denetleme teknikleri ile beraber kullanılırlar.
Subquery, bir SQL sorgusunun içinde yer aldığı için, bir sorgu içindeki bir tablodan veya başka bir bilgi kaynağından bilgi sürüklemek için kullanılabilir. Alt sorgu, ana sorguda kullanılan bir şart ifadesi olarak işlev göreöğrenir ve bir sorgunun netice kümesini daha da filtreleyebilir veya sınırlayabilir. Alt sorgular ayrıca, bir sorgunun içinde yer alan bir başka sorgunun neticesini işlemek için kullanılabilir.
Alt sorgular, iki ana kategoriye ufalayabilir: Tek satırlı alt sorgular ve çok satırlı alt sorgular. Tek satırlı alt sorgular, sadece bir değer döndürür ve bir sorgu içinde bir şart ifadesi olarak kullanılabilir. Çok satırlı alt sorgular, bir sorgu neticeyi olarak birden çok satır döndürebilir ve bir tablonun bir parçası olarak kullanılabilir.
Alt sorguların kullanımı, SQL sorgularının karışıklığını artırabilir, ancak bazı gidişatlarda daha faydalı bir sorgu yazmayı muhtemel kılar. Alt sorgular, başka bir sorgunun neticesine katlanan sorgular yazmak için kullanılabilir ve bir hayli veritabanı idare sistemi, alt sorguların desteklenmesi için optimize edilmiştir.
Bir alt sorgu, bir SQL sorgusunun rastgele bir yerinde kullanılabilir. Alt sorgular, SELECT, INSERT, UPDATE ve DELETE sorgularının rastgele birinde kullanılabilir. Misalin, bir alt sorgu, bir tablonun rastgele bir alanında bilgi aramak için kullanılabilir. Alt sorgular ayrıca, bir sorgunun neticesine göre bir tablodan bilgi ilave etmek veya aktüellemek için de kullanılabilir.
Bir alt sorgu, bir SELECT sorgusu içinde kullanılarak, bir sorgunun netice kümesindeki bilgileri daha da filtrelemek için kullanılabilir. Misalin, alttaki SQL sorgusu, Customers tablosundaki alıcıların adlarını, şehirlerini ve devletlerini döndürür:
SELECT CustomerName, City, State
FROM Customers;
Ancak, bu sorgunun neticeyi çok fazla bilgi kapsayabilir ve daha spesifik bir
netice kümesi elde etmek isteyebilirsiniz. Bu vaziyette, bir alt sorgu kullanarak sorgunun neticesini daha da filtreleyebilirsiniz. Misalin, alttaki SQL sorgusu, alıcıların şehirleri “London” olanları döndürür:
SELECT CustomerName, City, State
FROM Customers
WHERE City = ‘London ’;
Bu sorgu, yalnızca “London” şehrindeki alıcıları döndürür. Ancak, bu sorgu, sadece “London” şehrindeki alıcıları döndürür ve öteki şehirlerdeki alıcıları dışlar. Bu vaziyette, bir alt sorgu kullanarak sorgunun neticesini daha da filtreleyebilirsiniz. Misalin, alttaki SQL sorgusu, “London” şehrindeki alıcıların “UK” devletinde olduğunu döndürür:
SELECT CustomerName, City, State
FROM Customers
WHERE State =
SELECT State
FROM Customers
WHERE City = ‘London ’
;
Bu sorgu, “London” şehrindeki alıcıların “UK” devletinde olduğunu döndürür ve öteki şehirlerdeki alıcıları dışlamaz.
Bir alt sorgu, bir SELECT sorgusu içinde kullanılabilmesinin yanı gizeme, bir INSERT sorgusu içinde de kullanılabilir. Misalin, alttaki SQL sorgusu, “Orders” tablosuna bir yeni sipariş ilaveler:
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 alıcı ID ’sini ve belirtilen tarihleri alan bir alt sorgu kullanarak “Orders” tablosuna yeni bir sipariş ilaveler.
Bir alt sorgu, bir UPDATE sorgusu içinde de kullanılabilir. Misalin, alttaki SQL sorgusu, “Customers” tablosundaki alıcıların şehirlerini “Paris” olarak aktüeller:
UPDATE Customers
SET City = ‘Paris ’
WHERE Country =
SELECT Country
FROM Customers
WHERE City = ‘Paris ’
;
Bu sorgu, “Paris” şehrindeki alıcıların ülkelerini alan bir alt sorgu kullanarak “Customers” tablosundaki alıcıların şehirlerini “Paris” olarak aktüeller.
Son olarak, bir alt sorgu, bir DELETE sorgusu içinde de kullanılabilir. Misalin, alttaki SQL sorgusu, “Customers” tablosundaki şehri “Berlin” olan alıcıları siler:
DELETE FROM Customers
WHERE City =
SELECT City
FROM Customers
WHERE City = ‘Berlin ’
;
Bu sorgu, “Berlin” şehrindeki alıcıları alan bir alt sorgu kullanarak “Customers” tablosundaki alıcıları