T-Sql’de Saklı Yordam(Procedure) Oluşturma

Tags

, , , , ,

İyi Akşamlar Arkadaşlar,

Bu yazımda belli bir işlemi gerçekleştirmek için oluşturulmuş ve derlenmiş Sql ifadeler topluluğundan oluşan Saklı Yordamlardan(Procedure) bahsedeceğim.Umarım anlaşılır olur.

Nasıl oluşturulur?

CREATE PROCEDURE ProcedureAdi(Parametre veriTipi)
AS
BEGIN
—sql ifadeleri
END

??Aşağıda tablo yapıları verilmiş banka veri tabanını kullanarak bir hesaptan başka bir hesaba havale yapılmasını sağlayan saklı yordamı yazalım.

Banka (bid, ad)
Sube(sid, bid, sehir)
HesapTuru(tid, tur)
Musteri(mid, isim, adres, tel)
Hesap (hid, sid, mid, tid, tarih, bakiye)
IslemCesit(cid, islem_adi, masraf)
Islem(hid1, hid2, cid, tutar, tarih, aciklama)

CREATE PROCEDURE havaleYap(
@nereden INT,
@nereye INT,
@nekadar DECIMAL(18,2)
)AS
DECLARE @havaleID INT;
DECLARE @havaleMasraf DECIMAL(18,2);
BEGIN
SELECT @havaleID=cid, @havaleMasraf=IslemCesit.masraf FROM IslemCesit WHERE upper(islem_adi)=’HAVALE’;
IF EXISTS (SELECT * FROM Hesap WHERE hid=@nereden AND bakiye>@nekadar+@havaleMasraf)
BEGIN
INSERT INTO Islem (hid1,hid2,cid,tutar,tarih)
VALUES (@nereden, @nereye, @nekadar, @nekadar,GETDATE());
BEGIN TRANSACTION
UPDATE hesap SET bakiye=bakiye+@nekadar WHERE hid=@nereye;
UPDATE hesap SET bakiye=bakiye-@nekadar-@havaleMasraf WHERE hid=@nereden;
COMMIT
END;
END;

TRANSACTION:Birbirleriyle ilişkili ve arka arkaya çalışması gereken işlemlerimizin hepsinin tek bir işlemmiş gibi birlikte gerçekleşmesi için kullanılan yapıya transaction denir.işlemlerin hepsi ya aynı anda ya gerçekleşir ya da gerçekleşmez.

Mesala yukarıda ki örnekte de olduğu bir hesaptan başka bir hesaba para aktarma işlemi yapılırken hem gönderen hemde alan hesabın bakiye değerlerinin güncellenmesi gerekir ve her iki güncellemede de sıkıntı çıkmadığı takdirde işlem gerçekleşmeli fakat herhangi birinde sıkıntı çıktığında işlem geri alınmalıdır işte bunu TRANSACTION ile sağlıyoruz.

Şimdi procedure’ümüzün çalışıp çalışmadığını kontrol edelim.İlk olarak 4 numaralı hesaptan 5 numaralı hesaba 100.00 havale yapalım.Havale yapmadan önce bakiye bilgilerine ve havale işleminin masrafına bakalım.

AdsızAdsız

Procedure’ümüzü çalıştıralım:

EXEC havaleYap 4,5,100

4 5 numaralı hesapların bakiye bilgilerini tekrar kontrol edelim.

Adsız

Görüldüğü gibi havale işlemi başarılı bir şekilde gerçekleştirilmiştir. : )

Bu günlükte bu kadar Kolay gelsin:)

T-Sql’de Fonksiyon Oluşturmak

Tags

, , ,

Merhaba Arkadaşlar,

Bugün T-Sql’de belli bir sonucu geri döndürmek için oluşturulmuş ve derlenmiş bir veya birden fazla yerde kullanılabilen yapılardan yani FONKSIYONLAR‘dan bahsedeceğim.Örnekleri NORTHWIND veritabanı üzerinden üzerinden anlatacağım.

fonksiyon oluşturma:

CREATE FUNCTION FonksiyonAdı  (Parametreler AS VeriTipi )
RETURNS GeriDönecekDeğerin_VeriTipi
AS
BEGIN
(yapılacak işler)
RETURN GeriDönenDeğer
   END

örneğin:

CREATE FUNCTION isimBul (@id INT)
RETURNS VARCHAR(MAX)
AS
BEGIN
DECLARE @isim VARCHAR(MAX)
SET @isim=(SELECT Employees.FirstName FROM Employees WHERE Employees.EmployeeID=@id)
RETURN @isim
END

Bu fonksiyon örneğinde id’si verilen herhangi bir müşterinin ismini bulduk.

peki fonksiyonlar nasıl çalıştırılır?

PRINT dbo.fonksiyon_Adi(Parametreler AS VeriTipi)

Yukarıda örneğin çıktısına bakalım bu ifadeyi kullanarak.

PRINT dbo.isimBul(3)

Çıktısı aşağıda ki gibi olur.

Adsız

Bu günlük bu kadar Arkadaşlar ,İyi Çalışmalar 🙂

T-Sql’de View Oluşturmak

Tags

, , , , ,

Merhaba Arkadaşlar,

Bugün View(sanal tablo) oluşturmayı öğreneceğiz.Şimdiden kolay gelsin : )

VIEW: View’ler bir veya birden fazla tablodan istenilen verilerin bir arada sunulmasını sağlayan sanal tablolardır.

Veritabanımızda bulunan View’leri Management Studio’da veritabanımızın isminin altında ki Views bölümünden görebiliriz.

view

view oluşturma:

CREATE VIEW view_adi
AS
SELECT kolon_adi
FROM tablo_adi

örneğin:

Bir müsterinin yalnızca Ad,SoyAd,Adres ve Mail bilgilerinin tutultuğu bir view yazalım.

CREATE VIEW MusteriBilgileri
AS
SELECT Ad,SoyAd,Adres,Mail
FROM Personel

with check option:view oluştururken with check point ifadesi kullanılırsa,tanımlamadaki where şartı muhafaza edilmiş olur yani where şartı dışındaki insert,update,delete işlemleri yapılamaz hata verir.

CREATE VIEW MusteriBilgileri
AS
SELECT Ad,SoyAd,Adres,Mail
FROM Personel
WHERE PersonelID>10
WITH CHECK OPTION

with encription: Kullanıcı sadece oluşturulan view ile ilgili verilere erişebilir ,kaynak tablolarla ilgili hiç bir bilgiye ulaşamaz.

CREATE VIEW MusteriBilgileri
WITH ENCRYPTION
AS
SELECT Ad,SoyAd,Adres,Mail
FROM Personel
WHERE PersonelID>10
WITH CHECK OPTION;

Bu günlükte bu kadar Arkadaşlar.İyi Çalışmalar 🙂

While Döngüsü

Tags

, , , , ,

İyi Akşamlar Arkadaşlar,

Bugün T-Sql’de kullanılan While döngüsünü bir örnek üzerinden açıklayacağım.

WHILE DONGUSU 

DECLARE @sayac INT
SET @sayac=1
WHILE @sayac<5
BEGIN
PRINT ‘sayı:’+CAST(@sayac AS VARCHAR(10))+’karesi:’+CAST(@sayac*@sayac AS VARCHAR(10))
SET @sayac=@sayac+1
END

Bu örnekte While döngüsü içerisinde @sayac değişkeninin o an ki değerini ve karesini Print ile yazdırdık.Döngü içerisinde @sayac değişkenini sürekli 1 arttırdık ve @sayac değişkeninin değeri 5’e eşit oluncaya kadar aynı işlemleri tekrarlanır.

CAST: Veri tipi değiştimede kullanılan hazır bir fonksiyondur.Bu örnekte int tipinde bir değişkeni Print ile ekrana yazdırabilmek için kullanılmıştır ve bu değişkenin türü varchar(10) yapılmıştır.

Bu While Dongüsünün sonucu aşağıdaki gibi olur. kartezyen)

Kolay gelsin : )

If-Else ve Case Yapıları

Tags

, ,

Merhaba Arkadaşlar,

Bu yazımda başlıktan da anlaşılacağı gibi T-Sql’de kullanılan If-Else ve Case yapılarından bahsedeceğim.

IF-ELSE YAPISI

DECLARE @urunsay INT
SET @urunsay=(SELECT Products.UnitsInStock
FROM Products
WHERE Products.ProductID=2)
IF(@urunsay<20)
BEGIN
PRINT ‘2 numaralı ürünün stoğu kritik seviyede’
END
ELSE
BEGIN
PRINT ‘Yeterli miktarda ürün var’
END

Bu kodun çıktısı aşağıda ki gibi olur.

iff

CASE YAPISI:

Aşağıdaki her iki  Sql ifadesinin de çıktıları verilmiştir.Bunlara bakarak da anlaşılacağı gibi Case-When yapısı ile hangi durumda ne yapılacağını belirleyebiliriz.

SELECT FirstName,LastName,TitleOfCourtesy
FROM Employees

ifff

SELECT E.FirstName,E.LastName,
CASE E.TitleOfCourtesy
WHEN ‘Mrs.’ THEN ‘Bayan’
WHEN ‘Mr.’ THEN ‘Bay’
END
FROM Employees AS E

ifff

Bu günlükte bu kadar.İyi Akşamlar 🙂

 

T-Sql’e Giriş

Tags

, ,

Merhaba  Arkadaşlar, Bugün T-Sql’ e kısaca bir giriş yapacağız.

Kullanılan değişkenlerden değişkenlere değer atamaktan bahsedeceğim.Umarım iyi bir başlangıç olur: )

Değişkenler:Değişkenler bildirilirken mutlaka başına ‘@’ konulmalıdır ve adından sonra da türü belirtilmelidir.

DECLARE @degisken1 INT

DECLARE @degisken2 VARCHAR(50)

Değişkene değer atama: Değişkene değer atama set anahtar sözcüğüyle yapılır.

SET @degisken1=5

SET @degisken2=’degisken’

Bu şekilde de bildirilirken değer atanabilir :

DECLARE @degisken3 INT=3

 

Bu günlük bu kadar arkadaşlar. İyi Çalışmalar 🙂

Sorgulamalar 3

Tags

, , , , , , , , , ,

İyi Aksamlar Arkadaşlar,

Bugün yine Northwind veritabanı üzerinden sorgu örneklerine devam edeceğiz.Bu dersimiz de daha çok tablolar arasında ilişki kurarak birden fazla tablo üzerinden sorgu yapmaya çalışacağız.Umarım faydalı olur 🙂

??1996-10-16 tarihinde sipariş vermiş olan tüm müşterilerin Adres ve CompanyName bilgilerini bulunuz.

1.yol(in ile)

SELECT Address, CompanyName
FROM Customers
WHERE CustomerID IN (
SELECT CustomerID
FROM Orders
WHERE OrderDate=’1996-10-16′)

2.yol(kartezyen çarpım ile)

SELECT Address, CompanyName
FROM Customers,Orders
WHERE Customers.CustomerID=Orders.CustomerID AND
OrderDate=’1996-10-16′

Her iki SQL ifadesinin de çıktısı aşağıda ki gibi olur. 1.yol da IN ifadesiyle Orders tablosundan şartı sağlayan CustomerID’ler bulunmuş sonra bu CustomerID’ye sahip müşterilerin Address ve CompanyName bilgileri  Customers tablosundan alınmıştır.2. yol da ise Customers ve Orders tabloları CustomerID lerinin eşit olduğu yerlere göre birleştirilmiştir.(bu işleme kartezyen çarpım diyoruz)Birleştirildikten sonrada Address ve CompanyName bilgileri çekilmiştir.

kartezyen

??Herhangi bir sipariş vermeyen müşterilerin ID ve CompanyName bilgilerini bulunuz.

1.yol(exist ile)

SELECT CustomerID, CompanyName
FROM Customers AS C
WHERE NOT EXISTS (
SELECT *
FROM Orders AS O
WHERE O.CustomerID=C.CustomerID
);

EXIST:Kayıtların varlığını kontrol eder.

NOT EXIST:Kayıtların olmaması gerektiği durumda kullanılır.Mesala burada Sipariş tablosunda olmayan müşterilerin CustomerID ve CompanyName bilgileri Customers tablosundan çekilmiştir.

2.yol(except ile)

SELECT Customers.CustomerID,CompanyName
FROM Customers
EXCEPT
SELECT Customers.CustomerID,CompanyName
FROM Customers,Orders
WHERE Customers.CustomerID=Orders.CustomerID

EXCEPT:dışında anlamında kullanılır.Burada Customers ve Orders tabloları arasında kartezyen çarpım yapılmış ve Customers tablosundan burada olanların dışındaki Müşterilerin CustomerID ve CompanyName bilgileri çekilmiştir.

3.yol(not in ile)

SELECT Customers.CustomerID, CompanyName
FROM Customers
WHERE CustomerID NOT IN (
SELECT DISTINCT Customers.CustomerID
FROM Customers,Orders
WHERE Customers.CustomerID=Orders.CustomerID)

NOT IN:Bir listede aranan verinin olup olmadığını kontrol eder.Başında Not olduğu için olmaması gereken durumlarda kullanılır.

3 Sql ifadesinin de çıktısı aşağıda ki gibidir.

kartezyen

?? 1997-10-02 tarihinde verilmiş siparişlerde(Orders) görev almış olan Çalışanların(Employees) isim ve soyisimleri?

1.yol(inner join ile)

SELECT FirstName, LastName
FROM Employees
INNER JOIN Orders ON Employees.EmployeeID=Orders.EmployeeID
WHERE OrderDate=’1997-10-02′

INNER JOIN:ifadesiyle tabloları verilen şarta göre birleştiririz. Mesala burada Employees tablosu ile Orders tablosu aynı EmployeeID değerlerinde birleştirilmiştir.

2.yol(in ile)

SELECT FirstName,LastName
FROM Employees
WHERE EmployeeID IN (
SELECT EmployeeID
FROM Orders
WHERE OrderDate=’1997-10-02′
)

IN:Bir listede aranan verinin olup olmadığını kontrol eder.

3.yol(kartezyen çarpım ile)

SELECT FirstName,LastName
FROM Employees,Orders
WHERE Employees.EmployeeID=Orders.OrderID
AND OrderDate=’1997-10-02′

Her 3 Sql ifadesinin de çıktısı aşağıda ki gibidir.

kartezyen

Bu günlük te bu kadar iyi çalışmalar.Kolay gelsin 🙂

Sorgulamalar 2

Tags

, , , , , , , , , , , , , ,

Merhaba Arkadaşlar,

Bu dersimiz  isminden de anlaşılacağı gibi bir önce ki dersimizin devamı şeklinde olacak.Northwind veritabanı üzerinden örneklerle devam edeceğiz.Umarım faydalı olur : )

?? Müşterilerimizden ‘berlin’ ve ‘london’ dan olanlarını listeleyelim.

SELECT *
FROM Customers
WHERE city IN(‘berlin’, ‘london’)

IN : İçinden anlamına gelmektedir.Yani burada şehri berlin ve london olan müşterilerin tüm bilgilerini getir diyoruz.

??Hangi ülkelerden müşterilemiz var? 

SELECT DISTINCT(country)
FROM Customers

SELECT country
FROM Customers

DISTINCT: ile gelen kayıtların tekrarsız olmasını sağlıyoruz.Yani aynı ülkeden olan birçok müşterimiz olabilir bu yüzden her ülkeyi bir kez sayalım sonuç doğru çıksın diye kullanmak zorundayız.

***Kullanmazsak ne olur?                                                                          Aşağıdaki resimlerde her iki sorgununda sonucları görülmektedir.Kullanmayınca 91 kayıt çıkmısken kullanınca bu sayı 21’e düşmektedir.

2191

??Kaç farklı ülkeden müşterimiz var?

SELECT COUNT(DISTINCT(country))                                                                                FROM Customers

SONUC:21 

COUNT: fonksiyonu ile sayma işlemi yapıyoruz. Mesala bu soruda kaç farklı ülkeden müşterimiz olduğunu gördük.Yukarıda bu ülkerin hangileri olduğunu görmüştük zaten burada da toplam sayısını gördük.

??En yüksek fiyatta ki ürünün fiyatı?

SELECT  MAX (UnitPrice)                                                                                                    FROM Products

sonuc:263,50

MAX:  fonksiyonu secilen sütundaki değerlerin en büyüğünü döndürür.Bu örnekte Products tablosunun UnitPrice kolonundaki en yüksek değeri döndürür.

??En düşük fiyatta ki ürünün fiyatı?

SELECT  MIN (UnitPrice)                                                                                                    FROM Products

sonuc:2,50

MIN: fonksiyonu secilen sütundaki değerlerin en küçüğünü döndürür.Bu örnekte Products tablosunun UnitPrice kolonundaki en düşük değeri döndürür.

??CategoryID’si 1 olan ürünlerin toplam stok sayısı(UnitsInStock)?

SELECT SUM (UnitsInStock)AS ToplamStok
FROM Products
WHERE CategoryID=1

sonuc:559

SUM: fonksiyonu seçilen sütundaki değerleri toplar. Burada CategoryID’si 1 olan ürünlerin stok sayıları SUM ile toplanmıştır.

??Tüm ürünlerin fiyatlarının ortalamasını bulunuz.

SELECT AVG(UnitPrice)AS OrtalamaBirimFiyat
FROM Products

sonuc:28,8663

AVG: fonksiyonu ile verilen sütundaki değerlerin ortalamasını hesaplanır.

 

Bugünlük bu kadar arkadaşlar kolay gelsin hepinize 🙂

Sql’de Restore İşlemi

Tags

, , , , ,

Merhaba Arkadaşlar,

Bu dersimizden sonra artık yavaş yavaş Sql‘de sorgulama yapmaya başlayacağız. Sorgulamaları internette hazır olarak bulanan ve çok sık kulanılan NORTHWIND veritabanı üzerinden anlatacağım.

Bu yüzden bugün  Northwind’i  Management Studio’ya nasıl ekleyeceğinizi anlatacağım.Başlamadan önce  buradan veritabanı dosyasını indirirseniz çok iyi olur:)Yapacağımız işlemin adına RESTORE diyoruz.

(RESTORE: işlemi alınan bir backup’ın Sql server’a geri yükleme işlemidir.)

Artık başlayabiliriz, resimlerle adım adım RESTORE işlemini anlatacağım.

Adsız1

Database’e sağ tıklayıp Restore Database diyoruz.Sonra karşımıza aşağıda ki ekran geliyor.

Adsız2

To database’e veritabanımızın ismini yazıyoruz. Ben NORTHWIND yazdım.Sonra From device’ı seçip dosyayı ekleyeceğimiz bölüme geçiyoruz.

Adsız3

Burada Add diyoruz ve karşımıza çıkan ekrandan .bak uzantılı dosyamızı seciyoruz.

Adsız4

Böylece NORTHWIND’ i tüm tablo ve tablo içerikleriyle birlikte kurmuş oluyoruz.

Evet arkadaşlar bu günlük bu kadar. Sonra ki dersimizde bu veritabanı üzerinden sorgulamalarla devam edeceğiz.İyi çalışmalar 🙂