Şimdiye kadar basit sorgular ve tek bir SELECT ifadesi kullanarak veri tabanından veri alıyorduk. Ancak yine de, birçok koşulu karşılayan verileri daha sık seçmemiz gerekecek ve burada gelişmiş sorgular olmadan yapamayız. Bunun için SQL'de bir SELECT ifadesinin diğerinin içine yerleştirildiği alt sorgular veya iç içe geçmiş sorgular vardır.
Bir alt sorgu, başka bir SELECT, SELECT...INTO, INSERT...INTO, DELETE, UPDATE veya başka bir alt sorgunun içine yerleştirilmiş bir SELECT ifadesidir.
Alt sorgu metni parantez içine alınmalıdır. Tabloları birleştirmek yerine genellikle alt sorgular kullanılır (JOIN).
DBMS Access'de kullanılan veritabanı tabloları ilişkisel tablolardır, yani tüm tablolar birbirine ortak alanlarla bağlanabilir. Verileri iki farklı tabloda sakladığımızı ve diğerinde hangi verinin olduğuna bağlı olarak birinde veri seçmemiz gerektiğini varsayalım. Bunun için veritabanımızda başka bir tablo oluşturacağız. Bu, örneğin tedarikçilerle ilgili bilgilerin yer aldığı Sellers tablosu olacaktır:
Artık aynı City alanına sahip iki tablomuz var - Sumproduct ve Sellers. Diyelim ki sadece Kanada'da kaç ürün satıldığını saymamız gerekiyor. Alt sorgular bunu yapmamıza yardımcı olacaktır. Öncelikle Kanada'da bulunan şehirlerden oluşan bir örnek için bir sorgu yazalım:
Run SQLSELECT City
FROM Sellers
WHERE Country = 'Canada'
Şimdi bu veriyi Sumproduct tablosundan veri seçecek olan aşağıdaki sorguya aktaralım:
Run SQLSELECT SUM(Quantity) AS Qty_Canada
FROM Sumproduct
WHERE City IN ('Montreal','Toronto')
Bu iki isteği tek bir istekte de birleştirebiliriz. Böylece, veri çıkışı sağlayan bir istek ana istek olacak ve giriş verilerini aktaran ikinci istek bir yardımcı (alt sorgu) olacaktır. Bir alt sorgu eklemek için, Gelişmiş filtreleme bölümünde tartışılan WHERE ... IN (...) yapısını kullanacağız:
Run SQLSELECT SUM(Quantity) AS Qty_Canada
FROM Sumproduct
WHERE City IN (SELECT City
FROM Sellers
WHERE Country = 'Canada')
İki ayrı sorguyla aynı verileri elde ettiğimizi görebiliriz. Aynı şekilde alt sorguları istediğimiz kadar iç içe geçirerek sorguların iç içe geçme derinliğini arttırabiliriz.
Alt sorguları hesaplanan alanlar olarak da kullanabiliriz. Örneğin aşağıdaki sorguyu kullanarak her satıcı için satılan ürün sayısını görüntüleyelim:
Run SQLSELECT Seller_name, (SELECT SUM(Quantity)
FROM Sumproduct
WHERE Sellers.City = Sumproduct.City) AS Qty
FROM Sellers
İlk SELECT ifadesi iki sütun görüntüler - Seller_name ve Qty. Qty alanı hesaplanır, yuvarlak parantez içine alınmış alt sorgunun yürütülmesi sonucunda oluşturulur. Bu alt sorgu Seller_name alanındaki her kayıt için bir kez, dört satıcı adı seçildiği için toplamda dört kez yürütülecektir.
Ayrıca alt sorguda WHERE cümlesi birleştirme işlevini gerçekleştirir, çünkü WHERE'nin yardımıyla iki tabloyu sütunların tam adlarını (Table.Field) kullanarak City alanıyla birleştirdik.