Sunum yükleniyor. Lütfen bekleyiniz

Sunum yükleniyor. Lütfen bekleyiniz

© Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi

Benzer bir sunumlar


... konulu sunumlar: "© Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi"— Sunum transkripti:

1 © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
HAFTA 7 © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi

2 GEÇEN DERSLERDE NELER ÖĞRENDİK?
Veritabanı tasarımı Normalizasyon Join içinde group by kullanmak LIKE içinde operatörler TOP, TOP PERCENT, IN, BETWEEN…AND SOME-ALL-EXISTS, Tarih saat fonkdiyonları, metin fonksiyonları View kullanımı Kümeleme Fonksiyonları, veri ekleme,silme, güncelleme saklı yordamlar, görünümler,karar yapıları © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi

3 © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
CREATE TABLE [Ogrenciler3]( [OgrenciNo] [int] IDENTITY(100,1) NOT NULL CONSTRAINT ID PRIMARY KEY, [Bolumu] [varchar](50) NULL) © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi

4 © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
ALTER TABLE Ogrenciler3 ADD AdiSoyadi varchar(50),telefon varchar(50) © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi

5 © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
SELECT * FROM Urunler WHERE EXISTS (SELECT * FROM [Satis Detaylari] WHERE Urunler.UrunID = [Satis Detaylari].UrunID and Urunler.BirimFiyati>=50) © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi

6 © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
SELECT [UrunID],[UrunAdi],U.[TedarikciID],SirketAdi FROM [Urunler] AS U INNER JOIN Tedarikciler AS T on U.TedarikciID=T.TedarikciID © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi

7 © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
SELECT T.[TedarikciID],SirketAdi,COUNT(*) FROM [Urunler] AS U INNER JOIN Tedarikciler AS T on U.TedarikciID=T.TedarikciID GROUP BY T.[TedarikciID],SirketAdi ORDER BY COUNT(*) © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi

8 © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
SOME - ANY fonksiyonları parametre olarak içerisine aldığı alt sorgudan geriye dönen sonuçların herhangi bir tanesi karşılatırma kriterine uyuyorsa TRUE hiç biri uymuyorsa FALSE döndürür. ALL fonksiyonu parametre olarak içerisine aldığı alt sorgudan geriye dönen sonuçların tamamı karşılatırma kriterine uyuyorsa TRUE herhangi biri uymuyorsa FALSE döndürür. © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi

9 © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
SELECT * FROM Urunler WHERE EXISTS (SELECT * FROM SatisDetaylari WHERE Urunler.UrunID = SatisDetaylari.UrunID) © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi

10 © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
SELECT u.[KategoriID], [KategoriAdi], AVG([BirimFiyati]) FROM Urunler u INNER JOIN [Kategoriler] k ON k.[KategoriID]= u.[KategoriID] GROUP BY u.[KategoriID], [KategoriAdi] © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi

11 © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
SELECT SatisTarihi,DATEADD(day,30,SatisTarihi) AS OdemeGunu FROM Satislar DATEDIFF (tarihin hangi kısmı,başlangıç,bitiş) SELECT SatisTarihi,DATEDIFF (YEAR,SatisTarihi,GETDATE()) AS YIL_GEÇMİŞ int print 'deger = '+ © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi

12 © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
varchar(10) IF EXISTS( SELECT * FROM sys.sysobjects WHERE name and xtype='u' ) + ' var' ELSE + ' yok' GO © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi

13 © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
JOIN TÜRLERİ Inner Join Inner Join işlemi ile birleştirilecek olan tabloların sütunlarının içerdiği veriler kontrol edilerek kesişim kümesi alınıyor. Aynı işlem “where” komutu kullanılarak da gerçekleştirilebilir. Inner join yerine join yazmak da yeterlidir. Kullanımı: SELECT kolon_ad(lar)ı FROM tablo_1 INNER JOIN tablo_2 ON tablo_1.ortak_kolon=tablo_2.ortak_kolon ; © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi

14 Tablo isim kontrolünü değişkenli prosedür haline getirme
create proc varchar(30)) as begin IF EXISTS( SELECT * FROM sys.sysobjects WHERE name and xtype='u' ) + ' var' ELSE BEGIN + ' yok' end exec buket2'deneme' © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi

15 © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
Tablo Yoksa oluştur create proc varchar(30)) as begin IF EXISTS( SELECT * FROM sys.sysobjects WHERE name and xtype='u' ) + ' var' ELSE BEGIN + ' yok' create (id integer,adi varchar(40)) end ----HATA VERDİ © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi

16 © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
create proc varchar(30)) as begin varchar(100) IF EXISTS( SELECT * FROM sys.sysobjects WHERE name and xtype='u' ) + ' var' ELSE BEGIN + ' yoktu' = 'create table ' + '(id int, adi varchar(30))' exec + ' şimdi oluşturuldu' end © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi

17 © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
CREATE proc varchar(30)) as begin SET QUOTED_IDENTIFIER ON; varchar(100) IF EXISTS( SELECT * FROM sys.sysobjects WHERE name and xtype='u' ) BEGIN = 'DROP table ' exec + ' vardı SİLİNDİ' END = 'create table ' + '(id int, adi varchar(30))' + ' şimdi oluşturuldu' 'INSERT INTO ' + @tablom + ' VALUES ( 1, ''DENEME'' )' + ' değer eklendi' end © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi

18 © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
IF NOT EXISTS (SELECT * FROM Urunler WHERE UrunAdi LIKE 'Kahve'    ) BEGIN SET IDENTITY_INSERT Urunler OFF --Bir tablonun kimlik sütununa açık değerler eklenmesine izin verir. INSERT INTO Urunler (UrunAdi, BirimFiyati) VALUES ( 'Kahve', 13) END ELSE PRINT('ÜRÜN ZATEN VAR') © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi

19 © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
CREATE PROCEDURE VARCHAR(20), @fiyat Money) ) AS BEGIN IF NOT EXISTS (SELECT * FROM Urunler WHERE UrunAdi     ) SET IDENTITY_INSERT Urunler OFF --Bir tablonun kimlik sütununa açık değerler eklenmesine izin verir. INSERT INTO Urunler (UrunAdi, BirimFiyati) VALUES ) END ELSE PRINT('ÜRÜN ZATEN VAR') End exec kontrol_ekle 'makarna',3 © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi

20 © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
SQL Server anahtar kelimeleri ile aynı olan ya da boşluk içeren isimler, tırnak arasında (“”) ya da köşeli parantez ([]) arasında gösterilmelidir. Hangisinin anahtar kelime , hangisinin isim olarak kabul edileceği, veritabanında yaptığınız uyumluluk seviyesi ayarlamasına bağlıdır.  Çift tırnak, ancak SET QUOTED_IDENTIFIER  ON özelliği varsa, sütun ismi sınırlayıcısı olarak kabul edilir.  © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi

21 © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
Sql Server‘da her sorgu çalıştırdığımızda, sorgu sonucu, etkilenen satır sayısı ile birlikte, sorguyu çalıştıran uygulamaya geri gönderilir. Sql Server‘ın bu bilgiyi hesaplamasını ve uygulamaya geri göndermesini engelleyerek, çok ufakta olsa kazanç sağlayabiliriz. Yapmamız gereken, sorgudan önce aşağıdaki komutu çalıştırmak olacaktır; SET NOCOUNT ON Sql Server sadece ilgili sorgu için, etkilenen satır sayısını hesaplama işlemini yapmayacaktır. © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi

22 © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
Sql injection Sql injection, Sql sorgularının arasına dışarıdan müdahale de bulunarak, veri ekleme işlemine verilen genel isimdir. Web uygulamalarında kullanıcılar tarafından girilen veriler ile dinamik Sql cümleleri oluşturulur. Bu cümleler oluşturulurken araya giren herhangi bir meta-karakter Sql injection’a neden olabilmektedir. Meta-karakter; bir program için özel anlam ifade eden karakterlere verilen isimdir. Sql için ise meta-karakter " ‘ " (tek tırnak) ve " ; " (noktalı virgül) dür. © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi

23 © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
Örneğin, en çok kullanılan yöntem bir sisteme Kullanıcı Adı ve Parola ile giriş yaparken kullandığımız yöntemdir. select * from Uzmanim where KullaniciAdi = 'uzman' AND Parola = 'uzmanim' Bu örnek Sql kodu klasik bir oturum açma yöntemidir. Bu örnek üzerinde basit bir sql injection deneyelim. Öncelikle KullaniciAdi yerine " ‘ or 1 = 1 " , Parola yerine ise " ‘ or 1 = 1 " girelim. bakıyoruz ki sisteme giriş yapımışız. Şimdi koda yakından bakarak nasıl olduğunu inceleyelim. Girdiğimiz değerleri  Sql kodunda yerlerine koyarsak karşımıza şu şekilde bir kod çıkar. select * from Uzmanim where KullaniciAdi = ' ' or 1 = 1 ' and Parola = ' ' or 1 = 1 ' © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi

24 © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
Bu Sql cümlesi her zaman doğru dönecek ve Uzmanim tablosundan tüm üyeleri listeleyecektir. Çünkü ilk kontrole bakmaksızın son kontrol (1 eşittir 1 kontrolü) her zaman doğru sonuç verecek ve Sql cümlesi çalışıp, Uzmanim tablosundan tüm üyeler listelenecektir. Bunun gibi veya daha farklı yollardan müdahaleler de bulunulursa ulaşılmasını istemediğimiz veriler yabancı kişiler tarafından ele geçirilebilir. Buna izin vermemek için yapmamız gereken en önemli kurallar; Tüm meta-karakterlerden kaçınılmalıdır. Kullanıcıdan alınan verilerde bu karakterlerin olup olmadığını anlamak için filtreleme işlemi yapmalıyız. Sayısal olarak beklenen girdilerin sayısal olup olmadığı kontrol edilmelidir. Sayısal olan girdiler Sql sorgusuna eklemeden önce integer’a çevirmek veya ISNUMERIC fonksiyonunu kullanarak gerçekten integer olup olmadığını kontrol edilmelidir. © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi

25 © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
SELECT UrunAdi,BirimFiyati, case when BirimFiyati <= then 'UCUZ' when BirimFiyati <= then 'NORMAL' when BirimFiyati <= then 'PAHALI' else 'ÇOK PAHALI' end AS durum from Urunler © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi

26 © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
UPDATE Urunler SET BirimFiyati = CASE WHEN BirimFiyati<10THEN BirimFiyati * 1.25 WHEN BirimFiyati<20THEN BirimFiyati * 1.20 WHEN BirimFiyati < 30 THEN BirimFiyati * 1.15 ELSE BirimFiyati*1.1 END © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi

27 CREATE PROCEDURE grupla (@city nvarchar(30))
AS SELECT Sehir, COUNT(*) AS Musteri_sayisi FROM Musteriler WHERE Sehir GROUP BY Sehir GO exec grupla 'berlin'

28 © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
CTE nedir SQL Server 2005 ile birlikte sunulan CTE (Common Table Expression – Ortak Tablo İfadeleri), bir sorgunun yürütülmesi anında elde edilmiş geçici sonuçlar bir veya daha fazla kere kullanılmasını sağlayan ifadelerdir. CTE bir table veya view olmayıp sadece bir sorgu ifadesidir. Yani geçici ve kalıcı tablolar gibi herhangi bir veri içermezler. Bir CTE’nin basit yazım biçimi aşağıdaki gibidir; © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi

29 © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
CTE CTE’ler WITH sözcüğüyle tanımlanır. CTE’lerin en önemli özelliği kendi kendini çağırabiliyor olması ve aynı sorgu içerisinden birden fazla çalıştırılabiliyor olmasıdır. Bu özelliğiyle CTE’ler daha çok recursive(Öz-yinelemeli) işlemler için geliştirilmiştir diyebiliriz. Örnek olarak hiyerarşik listeler için tercih edilir. Bu tür işlemler için geçici tablolar kullanılabiliyor olsa da CTE’ler daha iyi bir performans sağlar. Sadece çağrıldıkları anda oluşan bir yapıdır. CTE’ler yalnızca SELECT değil INSERT, UPDATE ve DELETE yapılarında da kullanılabilir. © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi

30 © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
WITH CTEİSMİ (Sütun ifadesi) ( Başlangıç Sorgusu UNION ALL ) SLECT CYEye Referans © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi

31 © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
WITH YüksekUrun(UrunID, UrunAdi,BirimFiyati) AS (   SELECT TOP 10 UrunID, UrunAdi,BirimFiyati   FROM Urunler   ORDER BY BirimFiyati ), DusukUrun(UrunID, UrunAdi,BirimFiyati) AS (   SELECT TOP 10 UrunID, UrunAdi,BirimFiyati   FROM Urunler   ORDER BY BirimFiyati DESC ) SELECT * FROM YüksekUrun UNION SELECT * FROM DusukUrun © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi

32 © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
CREATE TABLE [dbo].[Bolgelerim]( [BolgeID] [int] NOT NULL PRIMARY KEY, [BolgeAdi] [varchar](100) NOT NULL, [AltBolgeID] [int] NULL, [BolgeTuru] [varchar](20) NOT NULL, ) GO INSERT INTO dbo.Bolgelerim (BolgeID,BolgeAdi,AltBolgeID,BolgeTuru) VALUES(1, 'Türkiye', null, 'Ulke') VALUES(2, 'United States', null, 'Ulke') VALUES(3, 'Marmara ', 1, 'Bölge') VALUES(4, 'İstanbul', 3, 'Şehir') VALUES(5, 'Florida', 2, 'Eyalet') VALUES(10, 'Hollywood', 5, 'Şehir') VALUES(7, 'Bursa ', 1, 'Şehir') © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi

33 © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
WITH BolgeCTE AS ( --Aramanın kök kısmını burada oluşturduk SELECT BolgeID, BolgeAdi, AltBolgeID, BolgeTuru FROM Bolgelerim WHERE BolgeAdi = 'Türkiye' UNION ALL --Alt elemanlara da burada ulaşıyoruz SELECT b2.BolgeID, b2.BolgeAdi, b2.AltBolgeID, b2.BolgeTuru FROM Bolgelerim as b2 INNER JOIN BolgeCTE s ON b2.AltBolgeID = s.BolgeID ) --Türkiyedeki bölgelere ularak oradan şehir alanını sorguluyoruz SELECT * FROM BolgeCTE where BolgeTuru = 'Şehir' © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi

34 © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
varchar(40) WITH BolgeCTE AS ( --Aramanın kök kısmını burada oluşturduk SELECT BolgeID, BolgeAdi, AltBolgeID, BolgeTuru FROM Bolgelerim WHERE BolgeAdi UNION ALL --Alt elemanlara da burada ulaşıyoruz SELECT b2.BolgeID, b2.BolgeAdi, b2.AltBolgeID, b2.BolgeTuru FROM Bolgelerim as b2 INNER JOIN BolgeCTE s ON b2.AltBolgeID = s.BolgeID ) --Türkiyedeki bölgelere ularak oradan şehir alanını sorguluyoruz SELECT * FROM BolgeCTE where BolgeTuru = 'Şehir' © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi

35 © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi


"© Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi" indir ppt

Benzer bir sunumlar


Google Reklamları