View Nesnesi Özellikleri ve Kullanımı | SQL Ders Notları
———————— VIEW NESNESI ———————————–
– Bir sorgu icerisined cok fazla islem gerceklestiriyorsaniz ve ustune ustluk bu sorguyu defalarca calisitirmaniz gerekiyorsa her defasinda ayni seyleri yazmak size zulum gelecektir
Bu zulmu asmak icinse SQL Server’ın size sundugu nesne “View” nesnedirir..
– Sorgunuzu tıpkı sanal bir tabloymuscasina saklar ve her defasında artik o tablodan sorgularin cekilmesini ister…
–Amerikali musterilerden alinmis siparisleri listeleyen bir sorgu tasarlayiniz ve bir view icerisinde saklayiniz…
- GO
- CREATE VIEW Amerikalilar
- AS
- SELECT c.CustomerID, CompanyName, orderID, orderdate FROM Orders
- INNER JOIN Customers c ON c.CustomerID = Orders.CustomerID
- WHERE c.Country = 'USA'
- GO
- --Test
- SELECT * FROM Amerikalilar
- SELECT CompanyName, orderID FROM Amerikalilar
–Speedy Express ile tasinmis, Nancy’nin almis oldugu, Pazartesi gunleri DUMON ya da ALFKI ID’li musteriler tarafindan verilmis olan saklayan bir view tasarlayiniz..
- GO
- CREATE VIEW NaciyeminSiparisleri
- AS
- SELECT o.OrderID, o.OrderDate, s.CompanyName, e.FirstName, c.CustomerID FROM Orders o
- INNER JOIN Customers c ON c.CustomerID = o.CustomerID
- INNER JOIN Employees e ON e.EmployeeID = o.EmployeeID
- INNER JOIN Shippers s ON s.ShipperID = o.ShipVia
- WHERE e.FirstName = 'Nancy'
- AND s.CompanyName = 'Speedy Express'
- AND DATENAME(WEEKDAY,OrderDate) = 'Monday'
- AND c.CustomerID IN ('ALFKI', 'DUMON')
- GO
- --Test
- SELECT * FROM NaciyeminSiparisleri
—– VIEW OZELLIKLERI
— WITH ENCRYPTION
–Eger olusturmus oldugunuz view icerisindeki sorgularinizin birileri tarafindan gorunur halde olmasini istemiyorsaniz, view’ini sifreleyebilirsiniz..
- GO
- CREATE VIEW Kategorimsiler
- WITH encryption
- AS
- SELECT * FROM Categories
- GO
- --Test
- SELECT * FROM Kategorimsiler
- --Sifre Cozme
- GO
- ALTER VIEW Kategorimsiler
- AS
- SELECT * FROM Categories
- GO
– VIEW UZERINDEN INSERT ISLEMI
– Eger view icerisinde birden fazla tablo kullanmiyorsanız view uzerinden insert yapabilirsiniz ancak; view birden fazla tabloya bagimli olarak yasiyor ise artik o view uzerinden insert islemi gerceklestirilemez!
- INSERT INTO Kategorimsiler(CategoryName, [Description])
- VALUES('Sütlü Tatlılar', 'Süt iyidir, kemiğe iyi gelir')
- --Test
- SELECT * FROM Kategorimsiler
- SELECT * FROM Categories
- GO
- CREATE VIEW KategoriUrunleri
- AS
- SELECT ProductName, CategoryName FROM Categories
- INNER JOIN Products ON Products.CategoryID = Categories.CategoryID
- GO
- --Insert (HATALI!)
- INSERT INTO KategoriUrunleri(ProductName, CategoryName)
- VALUES('Sütlü Nuriye', 'Sütlü Tatlılar')
–ORDER BY KAOSU
–Eger olusturmus oldugunuz view icerisinde, bir siralama (order by) islemi gerceklestirecekseniz, mutlaka top anahtar kelimesini kullanarak siralamayi gerceklestirmeniz gerekmektedir…
- GO
- CREATE VIEW FiyataGoreUrunler
- AS
- SELECT top 77 ProductName, UnitPrice FROM Products
- ORDER BY UnitPrice DESC
- GO
- --Test
- SELECT * FROM FiyataGoreUrunler
–WITH CHECK OPTION
–View uzerinden insert islemi gerceklestirirken, eger view’iniz uzerinde bir where kriteri tanimli ise, insert edilirken gonderilen degerin de bu kritere uygun olmasini saglayabilirsiniz…
- GO
- CREATE VIEW FIleBaslayanKargolar
- AS
- SELECT * FROM Shippers
- WHERE CompanyName LIKE 'F%'
- WITH CHECK OPTION
- GO
- --Test
- SELECT * FROM FIleBaslayanKargolar
- --Insert Testi
- INSERT INTO FIleBaslayanKargolar(CompanyName)
- VALUES('Fly Kargo')
–WITH SCHEMABINDING
–View’in bagli bulundugu tablo(lar)daki kolonlari kilitler ve o tablolarin, kolonlarin silinmesine engel olur…
- GO
- CREATE VIEW TumKargolarim
- WITH schemabinding
- AS
- SELECT CompanyName,Phone FROM dbo.Shippers
- GO
- --Test
- ALTER TABLE Shippers
- DROP COLUMN Phone
–Beverages kategorisine ait, Amerikali toptancilar tarafindan alinmis, stoklarimda mevcut urunlerin adlarini, ucretlerini, KDV’li ucretlerini gosteren bir view tasarlayiniz (Bagli bulundugu kolonlar asla silinmemeli ve view kodlarini gorunmemelidir…)
- GO
- CREATE VIEW KategoriyeGoreUrunler
- WITH schemabinding, encryption
- AS
- SELECT CategoryName, ProductName, UnitsInStock, UnitPrice, (UnitPrice * 1.18) AS 'KDV', CompanyName FROM dbo.Categories
- INNER JOIN dbo.Products ON Products.CategoryID = Categories.CategoryID
- INNER JOIN dbo.Suppliers ON Suppliers.SupplierID = Products.SupplierID
- WHERE CategoryName = 'Beverages'
- AND Country = 'USA'
- AND UnitsInStock > 0
- GO
- --Test
- SELECT * FROM KategoriyeGoreUrunler
- --SchemaBinding Test
- ALTER TABLE Products
- DROP COLUMN UnitsInStock
Kaynak: Bilge Adam (Selçuk Usta)
Konudaki veritabanını indirmek için tıklayın
Tweet



