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…