İlk olarak view nedir, niye ihtiyaç duyulmuştur, nasıl kullanılır gibi sorulara cevap verip uygulama içerisinde örneklerle açıklayalım.
View En basit haliyle sanal tablodur, yani aslında olmayan daha önceden oluşturulan tablolardan sizin seçtiğiniz kriterlere uyan bilgileri içeren sanal tablodur.
Peki View’lere niye ihtiyaç duyulmuştur, birden fazla tablosu olan bir veritabanı içerisinde yapacağınız sorgularda sürekli olarak innerjoin veya daha farklı sorgu ifadeleri ile karmaşık bilgileri seçiyorsunuz, yada tablonuz da size veya firmanıza ait özel bilgiler bunlara herkesin ulaşmasını istemiyorsunuz sadece belli alanları seçerek oluşturacağınız tablo ile verilerinizin güvenliğini sağlayabilirsiniz. İşte bu yapıya verilen İsim “View” dir.
İyi hoşda nasıl kullanacağız diyorsanız Aşağıdaki örnek tablo işinize yarar…
Özellikleri aşağıda verilen SiparisDetay tablosunu oluşturunuz.
Kolon Adı Data Tipi Kısıtlamalar
SiparisNo int
UrunKodu char(10)
Miktar Float
Fiyat Money
Birimi char(5)
Aciklama varchar(50)
CREATE TABLE SiparisDetay ( SiparisNo int, UrunKodu char(10), Miktar float, Fiyat money, Birimi char(5),Aciklama varchar(50))
SiparisDetay tablosuna bilgileri girin
insert SiparisDetay (SiparisNo, UrunKodu, Miktar, Fiyat, Birimi,Aciklama) VALUES (1,'A',5,1,'ADET',null) go insert SiparisDetay (SiparisNo, UrunKodu, Miktar, Fiyat, Birimi,Aciklama) VALUES (1,'B',1,2,'ADET','Hediyelik') go insert SiparisDetay (SiparisNo, UrunKodu, Miktar, Fiyat, Birimi,Aciklama) VALUES (2,'C',7,1.5,'KG',null) go insert SiparisDetay (SiparisNo, UrunKodu, Miktar, Fiyat, Birimi,Aciklama) VALUES (4,'B',2,2,'ADET',null) go insert SiparisDetay (SiparisNo, UrunKodu, Miktar, Fiyat, Birimi,Aciklama) VALUES (3,'D',8,1.5,'PAKET','ÖZEL PAKET') go insert SiparisDetay (SiparisNo, UrunKodu, Miktar, Fiyat, Birimi,Aciklama) VALUES (3,'A',1,3,'ADET',null) go insert SiparisDetay (SiparisNo, UrunKodu, Miktar, Fiyat, Birimi,Aciklama) VALUES (4,'D',2,4,'PAKET',null) go insert SiparisDetay (SiparisNo, UrunKodu, Miktar, Fiyat, Birimi,Aciklama) VALUES (4,'A',10,1,'ADET',null) go insert SiparisDetay (SiparisNo, UrunKodu, Miktar, Fiyat, Birimi,Aciklama) VALUES (4,'A',10,1,'ADET',null)
SiparisDetay tablosunu tutar değerini de içerecek şekilde vwSiparisDetay adında bir view oluşturunuz.
CREATE VIEW vwSiparisDetay AS SELECT *, Miktar * Fiyat AS Tutar FROM SiparisDetay
Örnek 5
Tüm vwSiparisDetay View içeriğini veren sorguyu yazınız.
use ornekLtd go SELECT * FROM vwSiparisDetay
Örnek 6
vwSiparisDetay view’ini sorgulayarak 4 nolu siparişte bulunan ürünlerin urunkodu, miktari, fiyati ve tutarını veren sorgu yazınız.
-- İstediğimiz bilgi SELECT UrunKodu, Miktar, Fiyat, Tutar FROM vwSiparisDetay WHERE SiparisNo=4 -- Tüm liste SELECT * FROM vwSiparisDetay Go
Örnek 7
vwSiparisDetay view’ini sorgulayarak 4 nolu siparişte bulunan urunlerin toplam tutarı ve toplam miktarını veren sorgu yazınız.
-- İstediğimiz bilgi (HAVING ile) SELECT SiparisNo, SUM(Miktar) as ToplamMiktar, SUM(Tutar) as ToplamTutar FROM vwSiparisDetay GROUP BY SiparisNo HAVING SiparisNo=4 -- ikinci yazım şekli (WHERE deyimi) SELECT SiparisNo, SUM(Miktar) as ToplamMiktar, SUM(Tutar) as ToplamTutar FROM vwSiparisDetay WHERE SiparisNo=4 GROUP BY SiparisNo -- Tüm liste SELECT * FROM vwSiparisDetay Go
Örnek 8
vwSiparisDetay view’ine aşağıdaki bilgiyi ekleyiniz.
insert vwSiparisDetay (SiparisNo, UrunKodu, Fiyat, Miktar, Birimi) VALUES (1,'D',1.5,3,'PAKET') go -- Tüm liste SELECT * FROM vwSiparisDetay Go
Örnek 9
SiparisDetay tablosunun ilk 4 kaydını listeleyiniz.
-- İstediğimiz bilgi SELECT TOP 4 * FROM SiparisDetay -- Tüm liste SELECT * FROM vwSiparisDetay Go
Örnek 10
SiparisDetay tablosunun ilk %20 kaydını listeleyiniz.
-- İstediğimiz bilgi SELECT TOP 20 PERCENT * FROM SiparisDetay -- Tüm liste SELECT * FROM vwSiparisDetay Go
Örnek 11
SiparisDetay tablosunda SiparisNo 4 olan kayıtları benzersiz olarak listeleyiniz.
-- İstediğimiz bilgi SELECT DISTINCT * FROM SiparisDetay WHERE SiparisNo=4 -- Tüm siparisno=4 olan liste SELECT * FROM SiparisDetay WHERE SiparisNo=4
Örnek 12
SiparisDetay tablosunda bulunan ürünlerin listesini veren sorguyu yazınız.
-- İstediğimiz bilgi -- (DISTINCT) kullanarak SELECT DISTINCT urunkodu FROM SiparisDetay -- İstediğimiz bilgi -- (DISTINCT) kullanmadan SELECT urunkodu FROM SiparisDetay
Örnek 13
En çok satılan ilk 2 ürünü bulan sorguyu yazınız.
-- İstediğimiz bilgi SELECT TOP 2 UrunKodu, SUM(Miktar) as ToplamMiktar FROM SiparisDetay GROUP BY UrunKodu ORDER BY SUM(Miktar) DESC Go -- Tüm ürün satislari SELECT UrunKodu, SUM(Miktar) as ToplamMiktar FROM SiparisDetay GROUP BY UrunKodu ORDER BY SUM(Miktar) DESC Go
Örnek 14
Urun Satış miktarı veren sorgunun bulunduğu bir view oluşturunuz. View adı : vwSatisMiktar
-- View oluşturan sorgu CREATE VIEW vwSatisMiktar AS SELECT UrunKodu, SUM (Miktar) as ToplamMiktar FROM SiparisDetay GROUP BY UrunKodu
Örnek 15
vwSatisMiktar view’inden faydalanarak A ve C toplam satisini veren sorgu oluþturunuz.
-- İstediğimiz bilgi SELECT * FROM vwSatisMiktar WHERE UrunKodu in ('A','C') -- Tüm tablo SELECT * FROM vwSatisMiktar go
Örnek 16
vwSatisMiktar view’inin içindeki sorguyu
toplam miktar ve toplam sayıyı verecek şekilde oluşturunuz.
ALTER VIEW vwSatisMiktar AS SELECT UrunKodu, SUM (Miktar) as ToplamMiktar, COUNT(*) as Sayi FROM SiparisDetay GROUP BY UrunKodu
Örnek 17
Notlar tablosunu BölümNo’suna göre gruplayıp, ortalama notu ve sayısını veren sorguyu yazınız.
-- İstediğimiz bilgi SELECT * FROM vwSatisMiktar WHERE UrunKodu in ('A','C') -- Tüm tablo SELECT * FROM vwSatisMiktar go
Örnek 18
vwSiparisDetay view’inden tüm siparişlerin toplam tutarını veren view oluşturunuz. View adı : vwToplamTutarlar
-- İstediğimiz bilgi CREATE VIEW vwToplamTutarlar AS SELECT SiparisNo, SUM(Tutar) AS ToplamTutar FROM vwSiparisDetay GROUP BY SiparisNo
Örnek 19
vwToplamTutarlar tablosunu sorgulayarak Toplam Tutarı en büyük olan ilk iki kaydı getirin
-- İstediğimiz bilgi SELECT TOP 2 * FROM vwToplamTutarlar ORDER BY ToplamTutar DESC -- Tüm tablo SELECT * FROM vwToplamTutarlar go
Örnek 20
vwToplamTutarlar tablosunu sorgulayarak Toplam Tutarı enbüyük olan ilk iki kaydı getirin
-- İstediğimiz bilgi SELECT TOP 2 * FROM vwToplamTutarlar ORDER BY ToplamTutar -- Tüm tablo SELECT * FROM vwToplamTutarlar