© Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi HAFTA 5 © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
GEÇEN DERSLERDE NELER ÖĞRENDİK? UNION ,EXISTS,SOME, ALL, JOIN © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
© Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi ÖRNEK Ürünler tablosunda BirimdekiMiktar alanında İçinde bottle kelimesi geçen kaç tane ürün bulunmaktadır (kategorisine göre ) SELECT KategoriID, count(*) FROM [Urunler] WHERE [BirimdekiMiktar] LIKE '%bottle%' group by KategoriID © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
© Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi Inner Join ve Count Ürünler tablosunda BirimdekiMiktar alanında İçinde bottle kelimesi geçen kaç tane ürün bulunmaktadır (kategorisine adı ile birlikte) SELECT u.KategoriID,[KategoriAdi], count(*) FROM [Urunler] u INNER JOIN [Kategoriler] k ON k.[KategoriID]= u.[KategoriID] WHERE [BirimdekiMiktar] LIKE '%bottle%' group by u.KategoriID,[KategoriAdi] © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
T-SQL Değişken tanımlama, döngü kurma, koşul tanımlamayı sağlayan basit bir programlama ortamıdır. SQL Serverde global ve local diye 2 tür değişken vardır. Local değişkenler “@” ön eki alır, kullanıcı tarafından oluşturulur. Global değişkenler “@@” ön eki alır, SQL Server tarafından tanımlanmıştır, kullanıcı tarafından oluşturulmazlar. Değişken tanımlamak için: DECLARE @degisken_adi veritipi(boyut) DECLARE @enpahali_Urun VARCHAR(100)
© Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi Değişken Tanımlama Sql server’da değişken isimlerinin başında @ sembolü bulunur. @ad, @soyad, @tarih değişken isimlerine birer örnektir. DECLARE deyimi ile değişken tanımlanır. DECLARE @degisken_ismi veritipi, ….. DECLARE @ad varchar(20), @sayi int, @tarih datetime © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
Değişkenlere değer atama İki şekilde yapılır. select deyimini kullanarak set deyimini kullanarak Select deyimi ile atama declare @sayi int,@ad varchar(10) SELECT @ad= ‘Buket’, @sayi=25 -- geçerli bir atama print @ad print @sayi Set deyimi ile atama SET @ad=‘Buket’ SET @sayi=25 - doğru atama SET @ad=’buket’, @sayi=25 -- Yanlış bir atama © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
Print deyimi ile yazı yazdırılabilir. declare @sayı int print 'deger ' set @sayı=233 print @sayı -------------------------------------- print 'deger = '+ convert(varchar(5), @sayı)
© Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi Go deyimi GO tam olarak bir komut değil batch ayırma operatörüdür Go ile ayrılan komutlar client tarafından servera gönderilir ve sonucu beklenir. Bir batch, bir arada bulunan bir dizi sql deyimidir. Batch ayıracı GO deyimidir. SELECT …. …… UPDATE … ….. GO …. "GO" veritabanına sorgu göndermek için kullanılan bir istemci uygulamasında bir toplu ayırıcıdır. © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
© Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi GO Özellikleri 1- Bir batch içinde bir deyimin yazım hatası olduğunda, batch’in tamamı işlemez duruma gelir 2- Aynı batch içinde biR tablonun yapısı değiştirilip kullanılamaz. ALTER TABLE urun…. INSERT urun ….. Go Yukarıdaki kod hata verir go Yukarıdaki kod hata vermeden çalışır © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
GO Go komut SQL komut yığınlarını birbirinden ayırmak için kullanılır. ALTER TABLE Urunler ADD Kdvli MONEY GO UPDATE Urunler set Kdvli=(Birimfiyati*1.2)
Server değişkeni örnekleri select @@SERVERNAME, @@version, @@language
use Northwind DECLARE @enyüksek_fiyat MONEY SELECT @enyüksek_fiyat= max(BirimFiyati) from Urunler SELECT @enyüksek_fiyat
use Northwind DECLARE @enyüksek_fiyat MONEY,@urünkod INT,@urunad VARCHAR(100) set @enyüksek_fiyat= (select max(BirimFiyati) from Urunler) SELECT @urunad=UrunAdi,@urünkod=UrunID from Urunler where BirimFiyati =@enyüksek_fiyat SELECT @urünkod,@urunad
© Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi uniqueidentifier 128 Bitlik (16- Bytelık) veriler olarak oluşturulup saklanır; genellikle 32 basamaklı olarak, 16’lık sayı sistemine göre (hexadecimal) ve belirli dijitler (sayı grupları) halinde görüntülenir. Örneğin : 21EC2020-3AEA-1069-A2DD-08002B30309D dünyanın neresinde, kim, ne zaman oluşturursa oluştursun” benzersizdir. © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
© Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi uniqueidentifier Web tabanlı projelerde uniqueidentifier kullanımı daha fazla yer bulabiliyor, bu kullanım bazı yerler için neredeyse zorunlu bazı yerler içinse tercihinize bağlıdır. Bir kaç örnek vermem gerekirse: Örnek 1: Web sitenizde üyeler resim yüklüyor varsayalım. Resimler belirli bir dizinde saklanıyor ve veritabanında URL yolu (Path) tutuluyor. X kişisi abc.jpg adlı resim dosyasını sisteme yükledi, ardından Y kişisi de aynı ada ve uzantıya sahip abc.jpg resim dosyasını yükledi. Ortaya çıkacak engellemek için kullanıcıların yüklediği resimlerin adlarına otomatik olarak bir uniqueidentifier değeri atarsak bu sorundan kurtuluruz. © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
© Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi DECLARE @myid uniqueidentifier = NEWID(); SELECT CONVERT(char(255), @myid) AS ‘Üretilen Deger’'; © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
© Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi Örnek CREATE TABLE dbo.TEST (ID INT IDENTITY (1,1), ROWID uniqueidentifier) GO --yukarıdaki go satırını silersen ne olur?? INSERT INTO dbo.TEST (ROWID) VALUES (NEWID()) GO 1000 © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
© Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi SİSTEM VERİTABANLARI Master Veritabanı Versiyon ya da özel değişiklikleri dikkate almaksızın her SQL Server, master veritabanına sahiptir. Bu veritabanı, sistemin bütününü izlemeyi sağlayan, özel tablolar (sistem tabloları) kümesini içine alır. Örneğin, server üzerinde yeni bir veritabanı oluşturduğunuzda, girdiğiniz kayıt master veritabanındaki sysdatabases’da yer alır. Tüm extended ve system stored procedure’ler (kullanılacağı veritabana dikkate alınmaksızın) , master veritabanında saklanır. Açıkcası, server’ı tanımlayan herşey master veritabanında saklandığından dolayı, sistem için bu veritabanı önemlidir ve silinemez © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
© Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi Model Veritabanı Model veritabanı, kopyalama için referans alınabilecek model anlamında, uygun şekilde isimlendirilmiştir. Oluşturacağınız herhangi bir yeni veritabanı için, model veritabanı bir şablon oluşturur. Model veritabanı diğer veritabanları için şablon olduğundan gerekli bir veritabanıdır ve sistemde kalmalıdır yani bu veritabanıda silinemez. Bunun anlamı, isterseniz yeni oluşturulacak veritabanlarının nasıl olacağını, model veritabanında değişiklik yaparak belirleyebilmenizdir. Örneğin, oluşturduğunuz her veritabanının içeriğinde yer almasını istediğiniz bir denetim tabloları kümesi ekleyebilirsiniz. Ayrıca, sistem üzerinde oluşturulan her yeni veritabanına kopyalanan birkaç kullanıcı grubu oluşturabilirsiniz. © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
sysobjects Kısıtlama, varsayılan, günlük, kural ve saklı yordam gibi bir veritabanı içinde oluşturduğunuz her nesne için bir satır içerir. XTYPE alanı nesnenin türünü belirtir SELECT * FROM sysobjects where xtype='u'
C: Check constraint D: Default constraint F: Foreign Key constraint L: Log P: Stored procedure PK: Primary Key constraint RF: Replication Filter stored procedure S: System table TR: Trigger U: User table UQ: Unique constraint V: View X: Extended stored procedure
© Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi Tablo veya view gibi nesneler içerisinde yer alan sütunlara ait bilgileri döndürür. SELECT * FROM Syscolumns SELECT * FROM Syscolumns WHERE syscolumns.name like '%satis%' © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
SELECT sysobjects.name, syscolumns.name, syscolumns.length FROM sysobjects JOIN syscolumns ON sysobjects.id = syscolumns.id WHERE sysobjects.xtype='U' ORDER BY sysobjects.name
© Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi 1996 Aralık ayında her gün yapılan satışların toplam değerini müşterilere göre listeleyen sorguyu yazınız SELECT s.SatisID, s.MusteriId, SUM (BirimFiyati*Miktar) as Tutar,SatisTarihi FROM SatisDetaylari AS sd INNER JOIN Satislar as s ON sd.SatisID=s.SatisID WHERE s.SatisTarihi BETWEEN '12/01/1996' AND '12/31/1996' GROUP BY s.SatisID ,s.MusteriID,SatisTarihi © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi
© Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi Haftaya Sql server’ın akış kontrol deyimleri aşağıdadır CASE IF… ELSE… WHILE…. BREAK CONTINUE TRY …CATCH…. © Marmara Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi