[T-Sql] Alt Sorgular

Merhaba arkadaşlar,
Bu yazımda sizlere alt sorguları yani iç içe select ifadelerini anlatmaya çalışacağım.

Öncelikle ne gibi alanlarda kullanabileceğimize örnek verelim ki kafamızda daha iyi canlansın. Optimize edilmiş bir veritabanında tablolar birbirlerine yabancıl anahtar dediğimiz anahtarlar ile bağlıdır. Bir tablodaki yabancıl anahtar diğer tablodaki birincil anahtar ile ilişkilidir. Bu da iki tablo arasında ilişkili ifadelerin tutulmasına yarar. Northwind veritabanında diagram oluşturduysanız tabloların birbirlerine olan bağlarını rahatlıkla görebilirsiniz.

Örneğin Northwind veritananında Products tablosu ile Categories Tablosu birbirleri ile ilişkilidir. Bu ilişkiyi CategoryID sağlamaktadır.

Gelelim asıl konumuza. Patronunuz size ürünlerin raporlarını getir dediğinde patronunuza kategori adı yerine id sini götürürseniz sanırım sizi kovar 😀 Çünkü patronunuz karşısına gelecek rakamlardan anlamayacaktır. İşte burada alt sorgular devreye girmektedir. Kategori id’sine göre kategori tablosundan Kategori adını çekebilirsiniz.
Aşağıdaki sorguda Satışlar tablosundan hangi ürünün ne kadar kazanç sağladığına ulaşabiliriz.

select 
      (select p.ProductName 
          from Products as p 
          where p.ProductID =od.ProductID) as [Ürün Adı],
      AVG(od.UnitPrice*od.Quantity) as [Kazanç] 
   from [Order Details] as od 
   group by od.ProductID

Ürünleri kategori isimleri ile listeleyiniz:

select 
       (select c.CategoryName
           from Categories as c 
           where c.CategoryID = p.CategoryID),
       p.ProductName,
       p.UnitPrice 
   from Products as p

Ürünleri tedarikçi firmaların adı ile (company name) ile listeleyiniz:

select 
       (select s.CompanyName 
           from Suppliers as s 
           where s.SupplierID = p.SupplierID) as CompanyName
       ,*
   from Products as p

5 numaralı kategorideki ürünlerin satışlarının cirosu:

select 
       SUM(od.Quantity*od.UnitPrice)
   from [Order Details] as od 
   where od.ProductID in(
     select p.ProductID 
        from Products as p 
        where p.CategoryID = 5)

Ödevler:
— iki katmanlı sorgular
— 1997 yılında yapılan satışlarda ne kadar ciro elde edilmiştir.
— ALFKI müşterisinin yaptığı toplam satışların cirosu nedir.
— ismi verilen müşterinin kaç adet (ürün sayısı değil) satış yaptığını gösteren sorgu

— üç katmanlı sorgular
— speedy express isimli kargo firması bu güne kadar kaç adet ürün taşımıştır.
— ALFKI isimli müşteri hangi kategorilerde ürün satın almıştır.
— nancy davolio hangi firmanın ürünlerini en fazla satmıştır

Bir sonraki yazımda bu sorguların cevaplarını vereceğim.
Şimdilik bu kadar. Bir sonraki yazımda görüşmek dileğiyle…

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir