SlideShare a Scribd company logo
1 of 14
KONU 6: VIEW
VIEW OBJESİNE GENEL BAKIŞ:
View'lar: Mevcut tablolara bağlı kalarak istenilen bilgileri içerecek, yeni objelerdir. Aynı zamanda sanal
tablo olarak adlandırılır. Veri tabanı içinde var olan tabloların bilgilerini içerir ve genellikle kaydetme yöntemi
kullanılmaz.
Niçin View Kullanırız?
*** Güvenlik nedeni ile view oluşturulur. Bazı tablolardaki bazı sütunların, herkes tarafından görülmesini
istemeyebilirsiniz. Böyle bir durumda istenilen sütunları içeren bir görünüm oluşturup, bu görünüm üzerinde ilgili
kullanıcılara haklar verilir. Bu görünümün referans olarak kullandığı tabloya da, ilgili kullanıcılar için Deny hakkı
verilir. Bu durumda kullanıcı tabloyu görüntüleyemez ama o tabloya bağlı olarak çalışan view'ı görüntüleyebilir.
*** Tablolara girilen veriler üzerinde bazen, sadece fiziksel olarak değişiklik yapma ihtiyacı duyulur veya
tablonun sütunlarında o an yer almayan sütunları; geçici olarak oluşturmak gerekebilir. Bunun için view kullanılır.
*** İki veya daha fazla tabloyu birleştirmek ya da birbirine katmak için kullanılabilir(Union, Join).
*** View tiplerini, Standart, lndexed ve Partitioned olarak üçe ayırabiliriz.
Basit Kullanım Sekli:
CREATEVIEW view_adı
AS
UYGULAMA:
1) Aşağıdaki kod ile "musteriler" tablosundan; sadece mad ve mtel bilgilerini içeren, yeni bir view
oluşturulur.
use gorkem
go
creat view musteriler1
as
select mad,mtel
from musteriler
1) Çalıştırdıktan sonra "görkem" veri tabanı altında bulunan Vievvs klasörü altında oluşturduğumuz View
şekildeki gibi görünür.
3) T-SQL ifadesi ile görmek için aynı tablo gibi SELECT ifadesi kullanılır. Aşağıdaki yazılım View içindeki
kayıtları listeler.
use gorkem
select * from musteriler1
4) Aynı olayı grafiksel olarak tasarlamak için, ilk olarak View nesnesi üzerinde sağ tuşa basılarak New
View seçeneğine tıklanır.
5) Gelen ekrandan tablo adı seçilir. Bizim kullanacağımız tablo müşteriler olduğu için onu seçtik. Ardından
ilk önce Add sonra Close butonuna basılır.
6) Aşağıdaki gibi bir ekran karşımıza gelir. Burada görmek istediğimiz sütunların başındaki kutucuklar
doldurulur. Test etmek amacı ile sağ tuşa basılarak Execute SQL seçeneğine tıklanabilir. Liste en alttaki bölümde
karşımıza gelir. Ortadaki bölüme otomatik olarak T-SQL ifadesi yazılır
7) Son olarak bir isim verilerek kaydedilir.
VIEVV TANIMLAMALARI:
View nesnesine genel bir bakış yaptıktan sonra, bu bölümde gelişmiş View'in nasıl oluşturulacağını?
Mevcut olan bir view nesnesinin değiştirilmesini ve silinmesini inceleyeceğiz.
VIEW NASIL OLUŞTURULUR?
İlk kısımda da gördüğümüz gibi SQL Server Management Studio içindeki Object Explorer veya Query
Editör kullanarak oluşturabiliriz.
Gelişmiş kullanım seklini verecek olursak;
CREATE VIEVV [şema ad].view_ad[(sütun(lar)_ad)]
[WITH{ENCRYPTION|SCHEMABINDING|VIEW_METADATA}
AS
Select ifadesi
[WITH CHECK OPTION]
______________________________________________________
View oluşturabilmek için:
*** sysadmin, db_owner, db_ddiadmin rollerinden en az birinin üyesi olmak veya CREATE VIEVV
hakkına sahip olmak gerekir.
*** Ayrıca view içinde kullanılacak tüm tablo ve vievv'lar için, en az SELECT iznine sahip olmak
gerekmektedir.
View oluşumda kullanamayacağımız ifadeler:
*** CREATE VIEVV ifadesinde; COMPUTE veya COMPUTE BY cümlecikleri kullanılamaz. Ayrıca
INTO yardımcı kelimesi olamaz.
*** ORDER BY cümleciği, sadece TOP yardımcı kelimesi varsa kullanılabilir.
*** Geçici tablolara referans olmaz. 32 düzeyden fazla olamaz.
*** 1024 sütundan fazla sütun kullanılmaz.
*** Bir Batch File içinde, diğer Transact-SQL ifadeleri ile birlikte kullanılamaz.
UYGULAMA:
1) Bundan sonraki örneklerde kullanacağımız "satis" isimli bir tabloyu, "görkem" veri tabanı içinde
aşağıdaki şekilde tasarlayalım.
2) İçine aşağıdaki kayıtları girelim.
3) Şimdi aşağıdaki kod ile bu tablodan yararlanarak, yeni bir view oluşturalım. Bu örnek, bugüne kadar
tüm müşterilerin toplam ödedikleri fiyatın üzerine, kdv oranını da ekleyerek gösterir.
use gorkem
go
createview dbo.satisl(musterino, toplamfiyat)
as
select musterino/Sum(convert(money,(fiyat+fiyat*0.15)))
from satis
groupby musterino
4) Oluşturduğumuz view içindeki kayıtları listelediğimiz zaman, görüntü şekildeki gibi olacaktır.
1) Aşağıdaki view ise; kitapların ne kadar geciktiğini, gün bazında gösterir.
use gorkem;
go
createview dbo.satis2
as
select musterino,convert (int,(gelistarihi-alistarihi))as
fark
from satis;
2) Aşağıdaki view; geciken her gün için %4 faiz uygulayarak bu miktarı gösterir.
createview dbo.satis3 as
select musterino,fiyat,
convert(int,(gelistarihi-alistarihi))as fark,
(convert(int,(gelistarihi-alistarihi))*0.04*fiyat)as gecikmebedeli
From satis;
7) View içindeki kayıtlar şekildeki gibi olur.
1) görkem veri tabanı içindeki müşteriler ve satis isimli tabloları birleştirerek mussatl isimli bir view
oluşturalım(Başlamadan önce iki tabloda da hiçbir index olmadığını kabul edelim.).Bu kod
çalıştırıldığında; 1 günden fazla geciken kayıtların, iki tablodan da çeşitli bilgiler alarak, listelendiği
göreceğiz.
use gorkem;
go
createview dbo.mussatl
as
SELECT satis.musterino, mad, mtel, fiyat,
convert(int,gelistarihi-alistarihi) AS gecikengun
FROM satis INNERJOIN
musteriler On satis.musterino = musteriler.musterino
WHERE (gelistarihi-alistarihi > 1) ;
9) Bir önceki işlemi grafiksel olarak yapmak için Views objesi üzerinde sağ tuşa basıp New View
seçeneğine tıklayalım.
10) Gelen ekranda müşteriler ve satis tablosunu seçip, Add butonu ile ekledikten sonra Close butonu ile
kapatalım.
11) satis tablosunda musterino sütunu üzerine Fare'yi getirerek, sol tuşa basıp, musteriler tablosunda
bulunan musterino sütununa doğru sürükleyelim.
,
12) Ardından kutuları aşağıdaki şekilde tasarlayalım. Test için sağ tuşa basarak, Execute SQL ile
çalıştıralım ve kaydederek çıkalım.
VIEWLARIN DEĞİŞTİRİLMESİ ve SİLİNMESİ:
View'lar üzerinde yapılacak değişiklik için, SQL Server Management Studio kullanılabileceği gibi, ALTER
VIEW ifadesi ile de oluşturulmuş view'lar üzerinde değişiklik yapılabilir.
Kullanım sekli;
ALTER V1EW owner.view_ad[(sütun(lar)_ad)]
[WITH{ENCRYPTION|SCHEMABINDING|VIEW_METADATA}
AS
Seiect ifadesi
[WITH CHECK OPTION]
Bir view oluşturulduğu zaman sütun bilgileri, syscolumns sistem tablosu içinde tutulur.
select*fromsys.syscolumns
Silmek için ise DROP VIEW ifadesi kullanılır. Silme esnasında view içindeki kayıtlar, birileri tarafından
kullanılıyorsa silme gerçekleşmez. View silinince, bilgilerini aldığı tablolar silinmez. Onların daha sonra, ayrı bir
işlem ile silinmesi gerekir.
UYGULAMA:
1) Daha önce oluşturduğumuz, içinde mad ve mtel sütunlarını barındıran müşterileri nesnesi içine
musterino sütununu ilave ederek, değişiklik gerçekleştireceğiz. Bunun için SQL Server Query
Editör içine aşağıdaki kodu yazıyoruz.
alterview musteriler2
as
select mad, musterino, mtel
from musteriler
2) View içindeki görüntü, şekildeki gibi olacaktır.
2) Aşağıdaki kod ile daha önce oluşturduğumuz "satis3" isimli view nesnesini siliyoruz
use gorkem
dropview satis3
İZİNLER:
Bir view'ın başkaları tarafından kullanılması için GRANT ile gerekli izinlerin verilmesi gerekir.
UYGULAMA:
1) görkem altındaki Users kısmına kazim isimli bir kullanıcıyı, bu veri tabanına daha önce eklemiştik.
2) kazim isimli kullanıcı ile SQL Server'a girdiğimiz zaman, bu konuda oluşturduğumuz hiçbir view"da
değişiklik yapamayacağız. Bunu test etmek için müşterileri view'ında bir kayıtta değişiklik yapmaya çalışalım.
3) Şimdi "kazim" isimli kullanıcıya bu view'da değişiklik yapabilmesi için yetki verelim. Bunun için SQL
Server'a tekrar "sa" isimli kullanıcı ile logon olalım.
4)Şimdi bu kullanıcı için müşterileri nesnesine yetki verelim.
use gorkem
go
grantupdateon musteriler1 to kazim
5) Tekrar "kazim" isimli kullanıcı ile SQL Server'a girelim ve artık müşterileri tablosunun içindeki kayıtları
açalım ve değişiklik yapalım. İşimiz bittikten sonra tekrar "sa" kullanıcısı ile bağlanalım.
3) Aşağıdaki kod, bir view için oluşum kodlarını listeler.
sp_helptext musteriler2
4) Bir view nesnesinin kullandığı nesneleri listelemek için, sp_depends system store procedure'ü
kullanılır.
sp_depends musteriler2
VIEW TANIMLAMALARININ GİZLENMESİ:
Kullanıcılar SQL Server Management Studio, syscomments sistem tablosunu veya INFORMATION.
SCHEMA.VIEVVS kullanarak, bir view oluşum yapısını görebilirler. Bunu önlemek için; WITH ENCRYPTION
ifadesi ile view nesneleri oluşturulur. Bu işlem yapıldıktan sonra view silinip, yeniden oluşturulmadığı takdirde
veya ALTER VIEW kullanılarak orijinal hale dönüştürülmediği sürece, view nesnesine ait oluşum bilgileri
edinemeyiz.
UYGULAMA:
1) "musteriguven" isimli yeni bir view nesnesini, tanımlamalarını gizlemek amacı ile aşağıdaki şekilde
oluşturuyoruz. Bu yapı ile aynı zamanda, oluşturulan bir view için Design kısmına da girilerek değişiklik
yapılmasını engellemiş olacağız. Bu yapı, view nesnesinin içinde oluşan kayıtların görüntülenmesiniengellemez.
Sadece içinde değişiklik yapılmayı ve oluşturulan kodların görünmesini engeller.
use gorkem
go
createview dbo.musteriguven
withencryptionas
select mad,mtel from musteriler
2) Kodu çalıştırdıktan sonra, SQL Server Management Studıo'yu kullanarak Object Explorer kısmında
"musteriguven" üzerinde sağ tuşa basınca Design seçeneği aktif olmadığını görürüz.
Ayrıca aşağıdaki kodu yazarsak da içeriğini göremeyiz. Sadece içindeki kayıtlara erişebiliriz.
VIEW İÇİNDEKİ VERİLERİN DEĞİŞTİRİLMESİ:
Oluşturulan bir view içinde bulunan veriler; ana tablo veya tabloların bir kopyası değildir. Bundan dolayı
view içinde bulunan bir veriyi değiştirdiğimiz zaman ana tablodaki veri, değişikliğe uğrar. Bazı kısıtlamalar
olmasına rağmen, bir view içinde bulunan veriler silinebilir, güncellenebilir veya yeni bir veri eklenebilir. Bu
işlemler için genellikle View tek bir tablodan üretilmeli, içinde fonksiyonlar ve GROUP BY cümleciğinin olmaması
gerekir.
UYGULAMA:
1) Müşteriler2 isimli view nesnesini açıp, aşağıdaki kayıdı içine girelim.
Sazan 107 8888888888
2) müşteriler tablosunu açtığımızda görüntü, aşağıdaki gibi olacaktır. Dikkat edilirse 107 no'lu kaydın, ana
tabloya diğer bilgilerle beraber eklendiği görülür. Bu işlem değişiklikler ve silmeler için de geçerlidir.
3) müşterileri nesnesini açarak 107 no'lu kaydı tamamen silelim ve tekrar müşteriler tablosunu
açtığımızda bu kaydın silinmiş olduğunu, gözlemleyelim.
Bu yapı için uygulanacak kuralları listeleyecek olursak;
*** Birden fazla tabloda oluşan view'lardaki değişiklik, aynı anda tüm tabloya etki etmez. Her değişiklik;
sadece parçayı oluşturan tablolara, ayrı ayrı etki eder.
*** Bir hesaplama sonucu oluşmuş sütunlar üzerinde değişiklik yapılmaz. Örneğin; view üzerinde
"giriştarihi" ve "çıkıştarihi" isimli iki sütunun farkından oluşan; bir fark sütunu bulunuyorsa, bu sütuna değer
girilemez.
*** View'ı oluşturan tablolarda bir sütunu boş geçme izini yoksa ve sizin girdiğiniz değer o tabloya etki
ediyorsa, bu kayıt girilemez. Ana tablodan boş geçilemez ibaresini iptal etmek, yani Allow Null seçeneğini
işaretlemek gerekir.
*** WITH CHECK OPTION ile view yapısına girilen kayıtlar kontrol ettirilebilir. Bu, view'ı kullanacak diğer
vievv'lar için bir sınırlama
3) müşterileri nesnesini açarak 107 no'lu kaydı tamamen silelim ve tekrar müşteriler tablosunu
açtığımızda bu kaydın silinmiş olduğunu, gözlemleyelim.
Bu yapı için uygulanacak kuralları listeleyecek olursak;
*** Birden fazla tabloda oluşan view'lardaki değişiklik, aynı anda tüm tabloya etki etmez. Her değişiklik;
sadece parçayı oluşturan tablolara, ayrı ayrı etki eder.
*** Bir hesaplama sonucu oluşmuş sütunlar üzerinde değişiklik yapılmaz. Örneğin; view üzerinde
"giriştarihi" ve "çıkıştarihi" isimli iki sütunun farkından oluşan; bir fark sütunu bulunuyorsa, bu sütuna değer
girilemez.
*** View'ı oluşturan tablolarda bir sütunu boş geçme izini yoksa ve sizin girdiğiniz değer o tabloya etki
ediyorsa, bu kayıt girilemez. Ana tablodan boş geçilemez ibaresini iptal etmek, yani Allow Null seçeneğini
işaretlemek gerekir.
*** WITH CHECK OPTION ile view yapısına girilen kayıtlar kontrol ettirilebilir. Bu, view'ı kullanacak diğer
vievv'lar için bir sınırlama
BİR VIEW KULLANARAK BAŞKA BİR VİEW OLUŞTURULMASI:
Çok fazla karmaşık ifadeleri kullanarak bir view oluşturmak yerine, kademe kademe gidilerek oluşturulan
vievv'lardan; yeni vievv'lar oluşturup, karmaşık yapıları basitleştirebiliriz.
UYGULAMA:
1) Aşağıdaki örnek, daha önce oluşturduğumuz müşterileri isimli View'ı kullanarak turkcell isimli
yeni bir vievv oluşturacaktır. Ancak sadece 532 ile başlayan telefonları gösterecektir
.
use gorkem
go
createview turkcell
as
select*
from
musteriler2
where mtel like'532%'
2) İçini açtığımızda sadece 0532 ile başlayan kayıtlar, şekildeki gibi görüntülenir.
VIEW YAPISINDA INDEX KULLANIMI:
Bir Vievv oluşturduktan sonra aynen tablolar gibi, index özelliği
kazandırılabilir. Index oluşturmanın amacı: Daha önce de uzun uzun belirttiğimiz gibi, sorgulama
performansını arttırmak içindir.
Dikkat edilecek noktalar: ,,
*** Vievv üzerinde oluşturulacak ilk index Unique ve Clustered olmalıdır.
*** Vievv oluştururken SCHEMABINDING seçeneği kullanılmalıdır.
Bağlı bulunduğu tabloya referans olurken, diğer vievv'lara referans olmaz.
View içinde index oluşturmak için, SOL Server Management Studio
kullanılabilir.
Bunun için:
1) lndex kazandırılacak Vievv'ın başındaki artı açılarak altında lndexes klasörü üzerinde sağ tuşa
basılarak New lndex seçeneğine tıklanır.
2) Gelen şekildeki ekranda Add butonuna basarak açılan listeden hangi sütun veya sütunlara
index kazandırılacak ise o seçilir ve OK butonuna basılır. Index name kısmına isim girilerek onaylanır.

More Related Content

Viewers also liked

Metin gülyüz aralık kişilik sahibi olma
Metin gülyüz aralık kişilik sahibi olmaMetin gülyüz aralık kişilik sahibi olma
Metin gülyüz aralık kişilik sahibi olmaoktaygokgol
 
Sosyal Yaşamda Etkili İletişim
Sosyal Yaşamda Etkili İletişimSosyal Yaşamda Etkili İletişim
Sosyal Yaşamda Etkili İletişimSadullah M. Bağ
 
7.hafta kadir dikmen
7.hafta kadir dikmen7.hafta kadir dikmen
7.hafta kadir dikmenoktaygokgol
 
Kullanici tanimli fonksi̇yons
Kullanici tanimli fonksi̇yonsKullanici tanimli fonksi̇yons
Kullanici tanimli fonksi̇yonsoktaygokgol
 
Stored procedure
Stored procedureStored procedure
Stored procedureoktaygokgol
 
Sql serverda indexkavrami
Sql serverda indexkavramiSql serverda indexkavrami
Sql serverda indexkavramioktaygokgol
 
9.hafta cüneyt tomruk
9.hafta cüneyt tomruk9.hafta cüneyt tomruk
9.hafta cüneyt tomrukoktaygokgol
 
Veri̇ tabani kurtarma i̇şlemleri̇ sunu
Veri̇ tabani kurtarma i̇şlemleri̇ sunuVeri̇ tabani kurtarma i̇şlemleri̇ sunu
Veri̇ tabani kurtarma i̇şlemleri̇ sunuoktaygokgol
 
özet - Etkili i̇letişim ve sağlıklı i̇lişkiler
özet - Etkili i̇letişim ve sağlıklı i̇lişkiler özet - Etkili i̇letişim ve sağlıklı i̇lişkiler
özet - Etkili i̇letişim ve sağlıklı i̇lişkiler Ayda Eris
 
Ms sql server architecture
Ms sql server architectureMs sql server architecture
Ms sql server architectureAjeet Singh
 

Viewers also liked (16)

Metin gülyüz aralık kişilik sahibi olma
Metin gülyüz aralık kişilik sahibi olmaMetin gülyüz aralık kişilik sahibi olma
Metin gülyüz aralık kişilik sahibi olma
 
Sosyal Yaşamda Etkili İletişim
Sosyal Yaşamda Etkili İletişimSosyal Yaşamda Etkili İletişim
Sosyal Yaşamda Etkili İletişim
 
Itt
IttItt
Itt
 
7.hafta kadir dikmen
7.hafta kadir dikmen7.hafta kadir dikmen
7.hafta kadir dikmen
 
Hayrettin kunuk
Hayrettin kunukHayrettin kunuk
Hayrettin kunuk
 
Kullanici tanimli fonksi̇yons
Kullanici tanimli fonksi̇yonsKullanici tanimli fonksi̇yons
Kullanici tanimli fonksi̇yons
 
Sunu
SunuSunu
Sunu
 
Sunu
SunuSunu
Sunu
 
Stored procedure
Stored procedureStored procedure
Stored procedure
 
Sql serverda indexkavrami
Sql serverda indexkavramiSql serverda indexkavrami
Sql serverda indexkavrami
 
9.hafta cüneyt tomruk
9.hafta cüneyt tomruk9.hafta cüneyt tomruk
9.hafta cüneyt tomruk
 
Veri̇ tabani kurtarma i̇şlemleri̇ sunu
Veri̇ tabani kurtarma i̇şlemleri̇ sunuVeri̇ tabani kurtarma i̇şlemleri̇ sunu
Veri̇ tabani kurtarma i̇şlemleri̇ sunu
 
Konu anlatımı
Konu anlatımıKonu anlatımı
Konu anlatımı
 
Konu anlatım
Konu anlatımKonu anlatım
Konu anlatım
 
özet - Etkili i̇letişim ve sağlıklı i̇lişkiler
özet - Etkili i̇letişim ve sağlıklı i̇lişkiler özet - Etkili i̇letişim ve sağlıklı i̇lişkiler
özet - Etkili i̇letişim ve sağlıklı i̇lişkiler
 
Ms sql server architecture
Ms sql server architectureMs sql server architecture
Ms sql server architecture
 

Similar to 8.hafta yusuf dinçer

İleri Seviye T-SQL Programlama - Chapter 07
İleri Seviye T-SQL Programlama - Chapter 07İleri Seviye T-SQL Programlama - Chapter 07
İleri Seviye T-SQL Programlama - Chapter 07Cihan Özhan
 
SQL Server 2012’de View ve CTE
SQL Server 2012’de View ve CTESQL Server 2012’de View ve CTE
SQL Server 2012’de View ve CTEIbrahim Ersoy
 
ASP.NET MVC 2 Mimarisi, ASP.NET Uygulama Yönetimi ve Güvenlik Desteği
ASP.NET MVC 2 Mimarisi, ASP.NET Uygulama Yönetimi ve Güvenlik DesteğiASP.NET MVC 2 Mimarisi, ASP.NET Uygulama Yönetimi ve Güvenlik Desteği
ASP.NET MVC 2 Mimarisi, ASP.NET Uygulama Yönetimi ve Güvenlik DesteğiAli İhsan Çalışkan
 
Windows Azure ile Cloud Computing Uygulamaları - 6
Windows Azure ile Cloud Computing Uygulamaları - 6Windows Azure ile Cloud Computing Uygulamaları - 6
Windows Azure ile Cloud Computing Uygulamaları - 6İbrahim ATAY
 
Temel Düzeyde MySQL ve PHP Eğitimleri 2
Temel Düzeyde MySQL ve PHP Eğitimleri 2Temel Düzeyde MySQL ve PHP Eğitimleri 2
Temel Düzeyde MySQL ve PHP Eğitimleri 2Univerist
 
Sql server 2012 gi̇ri̇ş
Sql server 2012 gi̇ri̇şSql server 2012 gi̇ri̇ş
Sql server 2012 gi̇ri̇şoktaygokgol
 
1.Hafta.pptx
1.Hafta.pptx1.Hafta.pptx
1.Hafta.pptxYcelENOL
 
ASP.Net MVC ile Web Uygulamaları - 2(Controller ve View Kavramları)
ASP.Net MVC ile Web Uygulamaları - 2(Controller ve View Kavramları)ASP.Net MVC ile Web Uygulamaları - 2(Controller ve View Kavramları)
ASP.Net MVC ile Web Uygulamaları - 2(Controller ve View Kavramları)İbrahim ATAY
 
Sql gorsel-egitim
Sql gorsel-egitimSql gorsel-egitim
Sql gorsel-egitimsersld61
 
İleri Seviye T-SQL Programlama - Chapter 21
İleri Seviye T-SQL Programlama - Chapter 21İleri Seviye T-SQL Programlama - Chapter 21
İleri Seviye T-SQL Programlama - Chapter 21Cihan Özhan
 
Windows Azure ile Cloud Computing Uygulamaları - 7
Windows Azure ile Cloud Computing Uygulamaları - 7Windows Azure ile Cloud Computing Uygulamaları - 7
Windows Azure ile Cloud Computing Uygulamaları - 7İbrahim ATAY
 
Veri̇tabani ve Kullanici Yöneti̇mi̇
Veri̇tabani ve Kullanici Yöneti̇mi̇Veri̇tabani ve Kullanici Yöneti̇mi̇
Veri̇tabani ve Kullanici Yöneti̇mi̇Anar Godjaev
 
6.hafta ders notu görünüm sekmesi
6.hafta ders notu   görünüm sekmesi6.hafta ders notu   görünüm sekmesi
6.hafta ders notu görünüm sekmesiYnS-mRé Çiftçi
 
Stimulsoft Report Rapor Tasarimi Yapmak
Stimulsoft Report Rapor Tasarimi YapmakStimulsoft Report Rapor Tasarimi Yapmak
Stimulsoft Report Rapor Tasarimi YapmakMustafa BÜKÜLMEZ
 
F5 dergisi
F5 dergisiF5 dergisi
F5 dergisifatos11
 
İleri Seviye T-SQL Programlama - Chapter 09
İleri Seviye T-SQL Programlama - Chapter 09İleri Seviye T-SQL Programlama - Chapter 09
İleri Seviye T-SQL Programlama - Chapter 09Cihan Özhan
 
Sql egitimi-mecidiyekoy
Sql egitimi-mecidiyekoySql egitimi-mecidiyekoy
Sql egitimi-mecidiyekoyserpilscd69
 
ASP.Net MVC ile Web Uygulamaları -17(MVCContrib)
ASP.Net MVC ile Web Uygulamaları -17(MVCContrib)ASP.Net MVC ile Web Uygulamaları -17(MVCContrib)
ASP.Net MVC ile Web Uygulamaları -17(MVCContrib)İbrahim ATAY
 

Similar to 8.hafta yusuf dinçer (20)

İleri Seviye T-SQL Programlama - Chapter 07
İleri Seviye T-SQL Programlama - Chapter 07İleri Seviye T-SQL Programlama - Chapter 07
İleri Seviye T-SQL Programlama - Chapter 07
 
SQL Server 2012’de View ve CTE
SQL Server 2012’de View ve CTESQL Server 2012’de View ve CTE
SQL Server 2012’de View ve CTE
 
ASP.NET MVC 2 Mimarisi, ASP.NET Uygulama Yönetimi ve Güvenlik Desteği
ASP.NET MVC 2 Mimarisi, ASP.NET Uygulama Yönetimi ve Güvenlik DesteğiASP.NET MVC 2 Mimarisi, ASP.NET Uygulama Yönetimi ve Güvenlik Desteği
ASP.NET MVC 2 Mimarisi, ASP.NET Uygulama Yönetimi ve Güvenlik Desteği
 
Windows Azure ile Cloud Computing Uygulamaları - 6
Windows Azure ile Cloud Computing Uygulamaları - 6Windows Azure ile Cloud Computing Uygulamaları - 6
Windows Azure ile Cloud Computing Uygulamaları - 6
 
Temel Düzeyde MySQL ve PHP Eğitimleri 2
Temel Düzeyde MySQL ve PHP Eğitimleri 2Temel Düzeyde MySQL ve PHP Eğitimleri 2
Temel Düzeyde MySQL ve PHP Eğitimleri 2
 
Sql server 2012 gi̇ri̇ş
Sql server 2012 gi̇ri̇şSql server 2012 gi̇ri̇ş
Sql server 2012 gi̇ri̇ş
 
1.Hafta.pptx
1.Hafta.pptx1.Hafta.pptx
1.Hafta.pptx
 
ASP.Net MVC ile Web Uygulamaları - 2(Controller ve View Kavramları)
ASP.Net MVC ile Web Uygulamaları - 2(Controller ve View Kavramları)ASP.Net MVC ile Web Uygulamaları - 2(Controller ve View Kavramları)
ASP.Net MVC ile Web Uygulamaları - 2(Controller ve View Kavramları)
 
Sql gorsel-egitim
Sql gorsel-egitimSql gorsel-egitim
Sql gorsel-egitim
 
İleri Seviye T-SQL Programlama - Chapter 21
İleri Seviye T-SQL Programlama - Chapter 21İleri Seviye T-SQL Programlama - Chapter 21
İleri Seviye T-SQL Programlama - Chapter 21
 
Windows Azure ile Cloud Computing Uygulamaları - 7
Windows Azure ile Cloud Computing Uygulamaları - 7Windows Azure ile Cloud Computing Uygulamaları - 7
Windows Azure ile Cloud Computing Uygulamaları - 7
 
Pivot Unpivot
Pivot UnpivotPivot Unpivot
Pivot Unpivot
 
Veri̇tabani ve Kullanici Yöneti̇mi̇
Veri̇tabani ve Kullanici Yöneti̇mi̇Veri̇tabani ve Kullanici Yöneti̇mi̇
Veri̇tabani ve Kullanici Yöneti̇mi̇
 
6.hafta ders notu görünüm sekmesi
6.hafta ders notu   görünüm sekmesi6.hafta ders notu   görünüm sekmesi
6.hafta ders notu görünüm sekmesi
 
Radore Workshop: Wordpress Nereye Koşuyor?
Radore Workshop: Wordpress Nereye Koşuyor? Radore Workshop: Wordpress Nereye Koşuyor?
Radore Workshop: Wordpress Nereye Koşuyor?
 
Stimulsoft Report Rapor Tasarimi Yapmak
Stimulsoft Report Rapor Tasarimi YapmakStimulsoft Report Rapor Tasarimi Yapmak
Stimulsoft Report Rapor Tasarimi Yapmak
 
F5 dergisi
F5 dergisiF5 dergisi
F5 dergisi
 
İleri Seviye T-SQL Programlama - Chapter 09
İleri Seviye T-SQL Programlama - Chapter 09İleri Seviye T-SQL Programlama - Chapter 09
İleri Seviye T-SQL Programlama - Chapter 09
 
Sql egitimi-mecidiyekoy
Sql egitimi-mecidiyekoySql egitimi-mecidiyekoy
Sql egitimi-mecidiyekoy
 
ASP.Net MVC ile Web Uygulamaları -17(MVCContrib)
ASP.Net MVC ile Web Uygulamaları -17(MVCContrib)ASP.Net MVC ile Web Uygulamaları -17(MVCContrib)
ASP.Net MVC ile Web Uygulamaları -17(MVCContrib)
 

8.hafta yusuf dinçer

  • 1. KONU 6: VIEW VIEW OBJESİNE GENEL BAKIŞ: View'lar: Mevcut tablolara bağlı kalarak istenilen bilgileri içerecek, yeni objelerdir. Aynı zamanda sanal tablo olarak adlandırılır. Veri tabanı içinde var olan tabloların bilgilerini içerir ve genellikle kaydetme yöntemi kullanılmaz. Niçin View Kullanırız? *** Güvenlik nedeni ile view oluşturulur. Bazı tablolardaki bazı sütunların, herkes tarafından görülmesini istemeyebilirsiniz. Böyle bir durumda istenilen sütunları içeren bir görünüm oluşturup, bu görünüm üzerinde ilgili kullanıcılara haklar verilir. Bu görünümün referans olarak kullandığı tabloya da, ilgili kullanıcılar için Deny hakkı verilir. Bu durumda kullanıcı tabloyu görüntüleyemez ama o tabloya bağlı olarak çalışan view'ı görüntüleyebilir. *** Tablolara girilen veriler üzerinde bazen, sadece fiziksel olarak değişiklik yapma ihtiyacı duyulur veya tablonun sütunlarında o an yer almayan sütunları; geçici olarak oluşturmak gerekebilir. Bunun için view kullanılır. *** İki veya daha fazla tabloyu birleştirmek ya da birbirine katmak için kullanılabilir(Union, Join). *** View tiplerini, Standart, lndexed ve Partitioned olarak üçe ayırabiliriz. Basit Kullanım Sekli: CREATEVIEW view_adı AS UYGULAMA: 1) Aşağıdaki kod ile "musteriler" tablosundan; sadece mad ve mtel bilgilerini içeren, yeni bir view oluşturulur. use gorkem go creat view musteriler1 as select mad,mtel from musteriler 1) Çalıştırdıktan sonra "görkem" veri tabanı altında bulunan Vievvs klasörü altında oluşturduğumuz View şekildeki gibi görünür.
  • 2. 3) T-SQL ifadesi ile görmek için aynı tablo gibi SELECT ifadesi kullanılır. Aşağıdaki yazılım View içindeki kayıtları listeler. use gorkem select * from musteriler1 4) Aynı olayı grafiksel olarak tasarlamak için, ilk olarak View nesnesi üzerinde sağ tuşa basılarak New View seçeneğine tıklanır. 5) Gelen ekrandan tablo adı seçilir. Bizim kullanacağımız tablo müşteriler olduğu için onu seçtik. Ardından ilk önce Add sonra Close butonuna basılır.
  • 3. 6) Aşağıdaki gibi bir ekran karşımıza gelir. Burada görmek istediğimiz sütunların başındaki kutucuklar doldurulur. Test etmek amacı ile sağ tuşa basılarak Execute SQL seçeneğine tıklanabilir. Liste en alttaki bölümde karşımıza gelir. Ortadaki bölüme otomatik olarak T-SQL ifadesi yazılır 7) Son olarak bir isim verilerek kaydedilir.
  • 4. VIEVV TANIMLAMALARI: View nesnesine genel bir bakış yaptıktan sonra, bu bölümde gelişmiş View'in nasıl oluşturulacağını? Mevcut olan bir view nesnesinin değiştirilmesini ve silinmesini inceleyeceğiz. VIEW NASIL OLUŞTURULUR? İlk kısımda da gördüğümüz gibi SQL Server Management Studio içindeki Object Explorer veya Query Editör kullanarak oluşturabiliriz. Gelişmiş kullanım seklini verecek olursak; CREATE VIEVV [şema ad].view_ad[(sütun(lar)_ad)] [WITH{ENCRYPTION|SCHEMABINDING|VIEW_METADATA} AS Select ifadesi [WITH CHECK OPTION] ______________________________________________________ View oluşturabilmek için: *** sysadmin, db_owner, db_ddiadmin rollerinden en az birinin üyesi olmak veya CREATE VIEVV hakkına sahip olmak gerekir. *** Ayrıca view içinde kullanılacak tüm tablo ve vievv'lar için, en az SELECT iznine sahip olmak gerekmektedir. View oluşumda kullanamayacağımız ifadeler: *** CREATE VIEVV ifadesinde; COMPUTE veya COMPUTE BY cümlecikleri kullanılamaz. Ayrıca INTO yardımcı kelimesi olamaz. *** ORDER BY cümleciği, sadece TOP yardımcı kelimesi varsa kullanılabilir. *** Geçici tablolara referans olmaz. 32 düzeyden fazla olamaz. *** 1024 sütundan fazla sütun kullanılmaz. *** Bir Batch File içinde, diğer Transact-SQL ifadeleri ile birlikte kullanılamaz. UYGULAMA: 1) Bundan sonraki örneklerde kullanacağımız "satis" isimli bir tabloyu, "görkem" veri tabanı içinde aşağıdaki şekilde tasarlayalım.
  • 5. 2) İçine aşağıdaki kayıtları girelim. 3) Şimdi aşağıdaki kod ile bu tablodan yararlanarak, yeni bir view oluşturalım. Bu örnek, bugüne kadar tüm müşterilerin toplam ödedikleri fiyatın üzerine, kdv oranını da ekleyerek gösterir. use gorkem go createview dbo.satisl(musterino, toplamfiyat) as select musterino/Sum(convert(money,(fiyat+fiyat*0.15))) from satis groupby musterino 4) Oluşturduğumuz view içindeki kayıtları listelediğimiz zaman, görüntü şekildeki gibi olacaktır. 1) Aşağıdaki view ise; kitapların ne kadar geciktiğini, gün bazında gösterir. use gorkem; go createview dbo.satis2 as select musterino,convert (int,(gelistarihi-alistarihi))as fark from satis;
  • 6. 2) Aşağıdaki view; geciken her gün için %4 faiz uygulayarak bu miktarı gösterir. createview dbo.satis3 as select musterino,fiyat, convert(int,(gelistarihi-alistarihi))as fark, (convert(int,(gelistarihi-alistarihi))*0.04*fiyat)as gecikmebedeli From satis; 7) View içindeki kayıtlar şekildeki gibi olur. 1) görkem veri tabanı içindeki müşteriler ve satis isimli tabloları birleştirerek mussatl isimli bir view oluşturalım(Başlamadan önce iki tabloda da hiçbir index olmadığını kabul edelim.).Bu kod çalıştırıldığında; 1 günden fazla geciken kayıtların, iki tablodan da çeşitli bilgiler alarak, listelendiği göreceğiz. use gorkem; go createview dbo.mussatl as SELECT satis.musterino, mad, mtel, fiyat, convert(int,gelistarihi-alistarihi) AS gecikengun FROM satis INNERJOIN musteriler On satis.musterino = musteriler.musterino WHERE (gelistarihi-alistarihi > 1) ;
  • 7. 9) Bir önceki işlemi grafiksel olarak yapmak için Views objesi üzerinde sağ tuşa basıp New View seçeneğine tıklayalım. 10) Gelen ekranda müşteriler ve satis tablosunu seçip, Add butonu ile ekledikten sonra Close butonu ile kapatalım. 11) satis tablosunda musterino sütunu üzerine Fare'yi getirerek, sol tuşa basıp, musteriler tablosunda bulunan musterino sütununa doğru sürükleyelim.
  • 8. , 12) Ardından kutuları aşağıdaki şekilde tasarlayalım. Test için sağ tuşa basarak, Execute SQL ile çalıştıralım ve kaydederek çıkalım.
  • 9. VIEWLARIN DEĞİŞTİRİLMESİ ve SİLİNMESİ: View'lar üzerinde yapılacak değişiklik için, SQL Server Management Studio kullanılabileceği gibi, ALTER VIEW ifadesi ile de oluşturulmuş view'lar üzerinde değişiklik yapılabilir. Kullanım sekli; ALTER V1EW owner.view_ad[(sütun(lar)_ad)] [WITH{ENCRYPTION|SCHEMABINDING|VIEW_METADATA} AS Seiect ifadesi [WITH CHECK OPTION] Bir view oluşturulduğu zaman sütun bilgileri, syscolumns sistem tablosu içinde tutulur. select*fromsys.syscolumns Silmek için ise DROP VIEW ifadesi kullanılır. Silme esnasında view içindeki kayıtlar, birileri tarafından kullanılıyorsa silme gerçekleşmez. View silinince, bilgilerini aldığı tablolar silinmez. Onların daha sonra, ayrı bir işlem ile silinmesi gerekir. UYGULAMA: 1) Daha önce oluşturduğumuz, içinde mad ve mtel sütunlarını barındıran müşterileri nesnesi içine musterino sütununu ilave ederek, değişiklik gerçekleştireceğiz. Bunun için SQL Server Query Editör içine aşağıdaki kodu yazıyoruz. alterview musteriler2 as select mad, musterino, mtel from musteriler
  • 10. 2) View içindeki görüntü, şekildeki gibi olacaktır. 2) Aşağıdaki kod ile daha önce oluşturduğumuz "satis3" isimli view nesnesini siliyoruz use gorkem dropview satis3 İZİNLER: Bir view'ın başkaları tarafından kullanılması için GRANT ile gerekli izinlerin verilmesi gerekir. UYGULAMA: 1) görkem altındaki Users kısmına kazim isimli bir kullanıcıyı, bu veri tabanına daha önce eklemiştik. 2) kazim isimli kullanıcı ile SQL Server'a girdiğimiz zaman, bu konuda oluşturduğumuz hiçbir view"da değişiklik yapamayacağız. Bunu test etmek için müşterileri view'ında bir kayıtta değişiklik yapmaya çalışalım. 3) Şimdi "kazim" isimli kullanıcıya bu view'da değişiklik yapabilmesi için yetki verelim. Bunun için SQL Server'a tekrar "sa" isimli kullanıcı ile logon olalım. 4)Şimdi bu kullanıcı için müşterileri nesnesine yetki verelim. use gorkem go grantupdateon musteriler1 to kazim 5) Tekrar "kazim" isimli kullanıcı ile SQL Server'a girelim ve artık müşterileri tablosunun içindeki kayıtları açalım ve değişiklik yapalım. İşimiz bittikten sonra tekrar "sa" kullanıcısı ile bağlanalım. 3) Aşağıdaki kod, bir view için oluşum kodlarını listeler. sp_helptext musteriler2
  • 11. 4) Bir view nesnesinin kullandığı nesneleri listelemek için, sp_depends system store procedure'ü kullanılır. sp_depends musteriler2 VIEW TANIMLAMALARININ GİZLENMESİ: Kullanıcılar SQL Server Management Studio, syscomments sistem tablosunu veya INFORMATION. SCHEMA.VIEVVS kullanarak, bir view oluşum yapısını görebilirler. Bunu önlemek için; WITH ENCRYPTION ifadesi ile view nesneleri oluşturulur. Bu işlem yapıldıktan sonra view silinip, yeniden oluşturulmadığı takdirde veya ALTER VIEW kullanılarak orijinal hale dönüştürülmediği sürece, view nesnesine ait oluşum bilgileri edinemeyiz. UYGULAMA: 1) "musteriguven" isimli yeni bir view nesnesini, tanımlamalarını gizlemek amacı ile aşağıdaki şekilde oluşturuyoruz. Bu yapı ile aynı zamanda, oluşturulan bir view için Design kısmına da girilerek değişiklik yapılmasını engellemiş olacağız. Bu yapı, view nesnesinin içinde oluşan kayıtların görüntülenmesiniengellemez. Sadece içinde değişiklik yapılmayı ve oluşturulan kodların görünmesini engeller. use gorkem go createview dbo.musteriguven withencryptionas select mad,mtel from musteriler 2) Kodu çalıştırdıktan sonra, SQL Server Management Studıo'yu kullanarak Object Explorer kısmında "musteriguven" üzerinde sağ tuşa basınca Design seçeneği aktif olmadığını görürüz.
  • 12. Ayrıca aşağıdaki kodu yazarsak da içeriğini göremeyiz. Sadece içindeki kayıtlara erişebiliriz. VIEW İÇİNDEKİ VERİLERİN DEĞİŞTİRİLMESİ: Oluşturulan bir view içinde bulunan veriler; ana tablo veya tabloların bir kopyası değildir. Bundan dolayı view içinde bulunan bir veriyi değiştirdiğimiz zaman ana tablodaki veri, değişikliğe uğrar. Bazı kısıtlamalar olmasına rağmen, bir view içinde bulunan veriler silinebilir, güncellenebilir veya yeni bir veri eklenebilir. Bu işlemler için genellikle View tek bir tablodan üretilmeli, içinde fonksiyonlar ve GROUP BY cümleciğinin olmaması gerekir. UYGULAMA: 1) Müşteriler2 isimli view nesnesini açıp, aşağıdaki kayıdı içine girelim. Sazan 107 8888888888 2) müşteriler tablosunu açtığımızda görüntü, aşağıdaki gibi olacaktır. Dikkat edilirse 107 no'lu kaydın, ana tabloya diğer bilgilerle beraber eklendiği görülür. Bu işlem değişiklikler ve silmeler için de geçerlidir. 3) müşterileri nesnesini açarak 107 no'lu kaydı tamamen silelim ve tekrar müşteriler tablosunu açtığımızda bu kaydın silinmiş olduğunu, gözlemleyelim. Bu yapı için uygulanacak kuralları listeleyecek olursak; *** Birden fazla tabloda oluşan view'lardaki değişiklik, aynı anda tüm tabloya etki etmez. Her değişiklik; sadece parçayı oluşturan tablolara, ayrı ayrı etki eder. *** Bir hesaplama sonucu oluşmuş sütunlar üzerinde değişiklik yapılmaz. Örneğin; view üzerinde "giriştarihi" ve "çıkıştarihi" isimli iki sütunun farkından oluşan; bir fark sütunu bulunuyorsa, bu sütuna değer girilemez. *** View'ı oluşturan tablolarda bir sütunu boş geçme izini yoksa ve sizin girdiğiniz değer o tabloya etki ediyorsa, bu kayıt girilemez. Ana tablodan boş geçilemez ibaresini iptal etmek, yani Allow Null seçeneğini işaretlemek gerekir. *** WITH CHECK OPTION ile view yapısına girilen kayıtlar kontrol ettirilebilir. Bu, view'ı kullanacak diğer vievv'lar için bir sınırlama 3) müşterileri nesnesini açarak 107 no'lu kaydı tamamen silelim ve tekrar müşteriler tablosunu açtığımızda bu kaydın silinmiş olduğunu, gözlemleyelim. Bu yapı için uygulanacak kuralları listeleyecek olursak;
  • 13. *** Birden fazla tabloda oluşan view'lardaki değişiklik, aynı anda tüm tabloya etki etmez. Her değişiklik; sadece parçayı oluşturan tablolara, ayrı ayrı etki eder. *** Bir hesaplama sonucu oluşmuş sütunlar üzerinde değişiklik yapılmaz. Örneğin; view üzerinde "giriştarihi" ve "çıkıştarihi" isimli iki sütunun farkından oluşan; bir fark sütunu bulunuyorsa, bu sütuna değer girilemez. *** View'ı oluşturan tablolarda bir sütunu boş geçme izini yoksa ve sizin girdiğiniz değer o tabloya etki ediyorsa, bu kayıt girilemez. Ana tablodan boş geçilemez ibaresini iptal etmek, yani Allow Null seçeneğini işaretlemek gerekir. *** WITH CHECK OPTION ile view yapısına girilen kayıtlar kontrol ettirilebilir. Bu, view'ı kullanacak diğer vievv'lar için bir sınırlama BİR VIEW KULLANARAK BAŞKA BİR VİEW OLUŞTURULMASI: Çok fazla karmaşık ifadeleri kullanarak bir view oluşturmak yerine, kademe kademe gidilerek oluşturulan vievv'lardan; yeni vievv'lar oluşturup, karmaşık yapıları basitleştirebiliriz. UYGULAMA: 1) Aşağıdaki örnek, daha önce oluşturduğumuz müşterileri isimli View'ı kullanarak turkcell isimli yeni bir vievv oluşturacaktır. Ancak sadece 532 ile başlayan telefonları gösterecektir . use gorkem go createview turkcell as select* from musteriler2 where mtel like'532%' 2) İçini açtığımızda sadece 0532 ile başlayan kayıtlar, şekildeki gibi görüntülenir. VIEW YAPISINDA INDEX KULLANIMI: Bir Vievv oluşturduktan sonra aynen tablolar gibi, index özelliği kazandırılabilir. Index oluşturmanın amacı: Daha önce de uzun uzun belirttiğimiz gibi, sorgulama performansını arttırmak içindir. Dikkat edilecek noktalar: ,, *** Vievv üzerinde oluşturulacak ilk index Unique ve Clustered olmalıdır. *** Vievv oluştururken SCHEMABINDING seçeneği kullanılmalıdır. Bağlı bulunduğu tabloya referans olurken, diğer vievv'lara referans olmaz. View içinde index oluşturmak için, SOL Server Management Studio kullanılabilir. Bunun için:
  • 14. 1) lndex kazandırılacak Vievv'ın başındaki artı açılarak altında lndexes klasörü üzerinde sağ tuşa basılarak New lndex seçeneğine tıklanır. 2) Gelen şekildeki ekranda Add butonuna basarak açılan listeden hangi sütun veya sütunlara index kazandırılacak ise o seçilir ve OK butonuna basılır. Index name kısmına isim girilerek onaylanır.