Subquery kısaca iç içe SELECT sorguları yazmak demektir. SQL dilinde sütun değerlerini başka bir SELECT ifadesi sonucuyla karşılaştırmamıza olanak verir. SELECT ifadesi ile WHERE ifadesinin içine yeni bir SELECT ekleyerek bunu gerçekleştirebiliriz. Bir alt sorguda ka ilk SELECT komutu "dış sorgu", ikinci SELECT ifadesi ise " iç sorgu" yu oluşturur. İç sorgular her zaman ilk önce değerlendirilmelidir çünkü dış sorgular iç sorguların değerlerini kullanmaktadırlar.
Alt Sorgularda aşağıdaki operatörleri kullanabiliriz.
• Karşılaştırma Operatörleri
• IN Operatörü
• EXISTS Fonksiyonu
• ANY ve ALL Operatörleri
SELECT SC.SubCategoryName,P.*
FROM Production.Product P
JOIN (SELECT SC.ProductSubcategoryID,SC.Name SubCategoryName
FROM Production.ProductSubcategory SC
WHERE Name IN ('Road Frames','Mountain Frames')
) SC ON SC.ProductSubcategoryID = P.ProductSubcategoryID
Yukarıda ki kod bir SubQuery'dir. İç içe yazılmış Join ve Selectlerden oluşur. Alt sorguda Name alanı Road Frames ve Mountain Frames olan verilerin ProductSubcategoryID ve Name alanlarıyla ilk sorguda da tüm alanları joinle bağlayarak ekrana getirir.
FROM Production.Product P
WHERE P.ProductSubcategoryID
IN (
SELECT ProductSubcategoryID
FROM Production.ProductSubcategory
WHERE Name IN ('Road Frames','Mountain Frames')
)
Yukarıda ki kodun sonucu, ilk örnekte Joinle yapılan kodla aynıdır. Burada alt sorguda ilk sorgu ile ikinci sorguyu WHERE ve IN komutları ile bağlamıştır. Alt sorgu da Name alanında ki Road Frames ve Mountain Frames olan verilerin ProductSubcategoryID ilk sorguda ki ProductSubcategoryID ile aynıysa tüm alanları ekrana getirecektir.
SELECT *
FROM Production.Product P
WHERE EXISTS (SELECT *
FROM Production.ProductSubcategory SC
WHERE Name IN ('Road Frames','Mountain Frames')
AND P.ProductSubcategoryID =SC.ProductSubcategoryID
)
Exists ile oluşturduğumuz bu kodda diğer iki kod ile aynı sonucu verir. Alt sorguda verilen komut gerçekleşiyorsa ilk sorgu ile birleştirip bizlere sonucu getirir.
Tekrarlayan kayıtları engellemek için distinct kullanıyorum fakat sorgu sonucunda sadece 1 column görünüyor.
YanıtlaSilselect distinct alan1 from tablom yaptığımda sonuç sadece alan1deki tekrarlayan kayıtlar dışında olanlar geliyor ama tablom 4 kolondan oluşuyor
alan1 alan2 alan3 alan4 görünmesini ve sadece diğer satırlarda tekrar eden alan1lerin çıkartılmasını istiyorum nasıl yapabilirim yardımlarınızı bekliyorum.