Değerli öğrencilerim merhaba. Veri tabanı dersinde yazdığımız örneklerin tamamını burada paylaşıyorum. Kendi notlarınızla karşılaştırır, defterlerinize yazdığınız notlarda hatalar varsa aşağıdaki örneklere bakarak gerekli düzenlemeleri yaparsınız.
Öğrenciliğin doğası gereği derse gelip, örnekleri yapıp, örneklerin üzerine kendi ifadelerinizle notlar almış olmalısınız. Yazılan ifadelerin ne işe yaradığını, gerekli açıklamaları kendiniz yazmış olmalısınız. Yine de yazdığım bu örneklerin üzerine müsait oldukça daha ayrıntılı açıklamalar yazmaya çalışacağım. Hepinize başarılar dilerim...
::--::--:: SQL: Structured Query Language ::--::--::
SQL (Structured Query Language), veritabanlarına erişmek ve yönetmek için kullanılan yapısal sorgulama dilidir. SQL, verilerin depolanması, güncellenmesi, silinmesi ve sorgulanması gibi birçok işlemi gerçekleştirmek için kullanılabilir.
SQL, ilişkisel veritabanları için özel olarak tasarlanmıştır ve verilerin düzenli bir şekilde depolanmasına, organize edilmesine ve aranmasına yardımcı olur. SQL, önceden tanımlanmış bir dizi komut (SELECT, INSERT, UPDATE, DELETE vb.) kullanarak veritabanlarına erişir.
SQL, hem büyük ölçekli işletmelerin hem de küçük işletmelerin kullanabileceği bir teknolojidir. Birçok programlama dili ve veritabanı sistemi, SQLi desteklemektedir. SQL, kullanımı kolay, öğrenmesi kolay ve çok yönlü bir programlama dilidir ve birçok veritabanı yönetim sisteminin temelini oluşturur.
::--::--:: T-SQL ::--::--::
T-SQL (Transact-SQL), Microsoft SQL Server veritabanı yönetim sistemi tarafından kullanılan bir sorgu dili ve programlama dili olarak hizmet verir. T-SQL, SQL standartlarına ek olarak,
programlama özellikleri sağlar.
T-SQL, birçok özellik sunar, örneğin:
* Veritabanı işlemlerini gerçekleştirmek için SQL sorguları kullanır
* Prosedürler, fonksiyonlar, tetikleyiciler, saklama prosedürleri ve diğer programlama nesneleri ile yapılandırılmış programlama sağlar
* Değişkenler, koşullu ifadeler, döngüler ve diğer kontrol yapıları sağlar
* Dizinleme, tablo ve dizeler gibi bir dizi veri türü sağlar
* T-SQL sorguları, veritabanı yönetim sistemi tarafından kullanılan özel bir yöntemle optimize edilebilir, bu nedenle yüksek performans elde edilir.
* T-SQL, Microsoft SQL Server veritabanı yönetim sistemi ile birlikte kullanıldığında, veritabanı işlemlerini gerçekleştirmek için güçlü bir araçtır. Aynı zamanda, T-SQL ile yazılan uygulamalar, yüksek performans ve güvenilirlik ile karakterizedir.
::--::--:: PL/SQL - Oracle tarafından geliştirilmiştir. ::--::--::
PL/SQL (Procedural Language/Structured Query Language), Oracle veritabanı yönetim sistemi tarafından kullanılan bir programlama dilidir. PL/SQL, Oracle veritabanı yönetim sistemi ile birlikte kullanıldığında, veritabanı işlemlerinin gerçekleştirilmesi için yüksek düzeyde özelleştirilmiş bir programlama dilidir.
SQL yapısal olarak 3 gruba ayrılır:
--1- DDL (Data Defination Language / Veri Tanımlama Dili)
CREATE - aLTER - DROP
--2- DML (Data maniplation lang. / Veri İşleme dili)
SELECT - INSERT - UPDATE - DELETE
--3- DCL (DATA control lang. / Veri kontrol dili)
REVOKE - GRANT - DENY
-----------------------------------------
/* açıklama açıklama...
www.aliosmangokcan.com
bu alan açıklama/yorum satırlarını gösterir */
--------------------------------------
::--::--:: SQL Server Veri Tipleri ::--::--::
bit: 0 ve 1 verisini tutmak için... true/false (cinsiyet, medeni durum..)
binary: (ikilik sistem). 8000byte a kadar binary veri alabilir.
varbinary
char(n): alfanümerik veriler için...
-- ÖRNEK: ad char(15)
varchar(n): alfanümerik veriler için...
-- ÖRNEK: ad varchar(15)
nvarchar(n) : alfanümerik veriler için...
datetime: 1753 - 9999
smalldatetime: 1900 - 2079
image: resim, sunu, excel dosyalarını ikili formatta saklayabildiğimiz...
int: -2milyar küsur ile +2milyar arası tam sayıları tutar
tinyint: 0 - 255 arası tam sayıları tutar
bigint: oldukça büyük bir tam sayı aralığı girişi iiçin kullanılır.
uniqe-identifier: 16byte uzunluğunda hexadecimal (16lık sayı tabanı)
text: çok uzun alfanümerik değerler için... 2GB
float(n): ondalık sayılar için....
money / smallmoney
decimal: 38 basamağa kadar tam sayı için.... virgüllü sayıları da tutar
::--::--:: CREATE komutu ::--::--::
--Veritabanı ve tablo oluşturmak için kullanılır.
create database veritabanı_adı
ON
Primary (Name=dosya_adı,
filename=fiziki_dosya_adı, -- .mdf dosya
size=dosya_boyutu, --default 2MB
maxsize=maksimum_dosya_boyutu,
filegrowth=dosya_artış_miktarı) -- default 1MB
LOG ON
(Name=dosya_adı,
filename=fiziki_dosya, --.ldf dosya
size=dosya_boyutu,
maxsize=maks_dos_boyutu,
filegrowth=dos_art_miktarı)
--ÖRNEK 1:
create database deneme2
--ÖRNEK 2:
create database okul2
on
(name='okul2_dat',
filename='d:\okuldat2.mdf',
size=10,
maxsize=50MB,
filegrowth=5)
LOG ON
(name=okul2_log,
filename='d:\okullog2.ldf',
size=5MB,
maxsize=25MB,
filegrowth=5MB)
::--::--:: Create Table ::--::--::
create table tablo_adi(
sütun1 veritipi1,
sütun2 veritipi2,
...
sütunN veritipiN)
--ÖRNEK 3:
use deneme2 -- tek sefere mahsus
create table personel(
pers_id int not null,
adi varchar(25),
soyadi varchar(30))
--ÖRNEK 4:
create table ogrenci(
ogr_no int NOT NULL Primary Key,
ad_soyad varchar(25),
yas tinyint)
--ÖRNEK 5:
create table personel2(
pers_id int,
ad_soyad varchar(50),
sehir varchar(15),
unique(pers_id))
--ÖRNEK 6:
create table ogrenci2(
ogr_no int identity(1,3) not null, --SEED (1) -- increment(3)
adi varchar(25),
soyadi varchar(30),
bolum nchar(50) DEFAULT 'Bilgisayar')
--ÖRNEK 7:
create table notlar(
ogr_no int not null,
ders_kodu varchar(25) not null,
vize tinyint,
final tinyint,
constraint birlesikPK Primary Key (ogr_no,ders_kodu)
)
--ÖRNEK 8:
create table notlar2(
ogr_no int,
ders_kodu varchar(5),
vize int CHECK (vize>=0),
final int CHECK (final>=0))
--ÖRNEK 9:
create table odeme(
id int,
bursiyer varchar(50),
burs int,
constraint chkburs CHECK (burs>=0 and burs<=3000))
--IN, NOT IN, LIKE Kullanımı
IN ifadesi yerine OR,
NOT IN ifadesi yerine AND
LIKE
% (yüzde işareti) birden fazla karakteri ifade eder/gösterir.
_ (alt çizgi) bir tek karakteri ifade eder.
[HARF] herhangi bir karakteri (kendisini ifade eder)
[^HARF] kendisi dışında (köşeli parantez içinde yazılanın haricinde)
[A-Z] A ile Z arasında bir karakteri gösterir
--ÖRNEKLER 10:
ÖRN: LIKE '%T%' --> içinde T olanlar/geçenler
ÖRN: LIKE '_G%' --> ikinci karakteri G olanlar
ÖRN: LIKE '_ _ N' --> üç farfli son harfi N
ÖRN: LIKE '[SA]%' -->ilk harfi/karakteri S veya A olanlar
ÖRN: LIKE '%[B-K]' --> son karakteri B ile K arasında olan
ÖRN: LIKE '[2-8][4-7]' --> ilk hanesi 2-8, ikinci hanesi 4-7 arasında
ÖRN: LIKE '[^B-N][^MOZ][A-K]' --> ilk karakteri B-N arasında olmayan,
ikinci karalteri M,O veya Z olmayan, üçüncü karalteri A-K arasında olan
--ÖRNEK 11:
use deneme2
create table urunler(
urun_kodu varchar(4) not null,
urun_adi varchar(25) not null,
constraint chkkod CHECK (urun_kodu IN('A089','A090','A011','A111') OR
urun_kodu LIKE 'A9[0-9][0-9]'))
ürün kodu : a089, a090, a011, a111 veya A900-A999
--ÖRNEK 12:
create table musteri(
mkod int not null Primary Key,
Mad varchar(50) not null,
msoyad varchar(50),
madres varchar(255),
mtel varchar(11),
mail varchar(100))
create table arac(
aracno int not null Primary Key,
model int not null,
marka varchar (50),
plaka varchar(15),
fiyat int,
constraint chkfiyat CHECK (fiyat>=0 AND fiyat<=100000),
tarih smalldatetime,
constraint chkmodel CHECK (model LIKE '[1950-2023]'))
create table kiralama(
mkod int not null,
aracno int not null,
tarih smalldatetime,
constraint fk_mkod FOREIGN KEY (mkod) REFERENCES musteri (mkod),
constraint fk_aracno FOREIGN KEY (aracno) REFERENCES arac(aracno),
constraint pk_key PRIMARY KEY (mkod,aracno))
/* referans tabloda satır silindiğinde diğer tablolardan da silinmesi veya refereans
tabloda veriler güncellendiğinde diğer tablolarda da güncellenmesi için:
ON DELETE CASCADE, ON UPDATE CASCADE */
--ÖRNEK 13:
create table ...
..
..
constraint fk_mkod FOREIGN KEY (mkod) REFERENCES musteri (mkod)
ON UPDATE CASCADE ON DELETE CASCADE,
constraint fk_aracno FOREIGN KEY (aracno) REFERENCES arac(aracno),
ON UPDATE CASCADE ON DELETE CASCADE,
constraint pk_key PRIMARY KEY (mkod,aracno))
::--::--:: ALTER ile veritabanı nesnelerinin özelliklerini değiştirme ::--::--::
- Tabloya sonradan sütun eklemek:
Alter table tabloadı ADD sütunadı özellik
--ÖRNEK 14:
ALTER TABLE kiralama ADD testtarihi smalldatetime not null
-- Tabloda istenen üstünu silmek için:
ALTER TABLE tabloadı DROP COLUMN sütunadı
--ÖRNEK 15:
alter table kiralama DROP COLUMN testtarihi
-- Tabloda sütun özelliklerini değiştirmek için:
ALTER TABLE tabloadı ALTER COLUMN sütunadı özellikleri
--ÖRNEK 16:
ALTER TABLE arac ALTER COLUMN plaka nvarchar(20)
--ÖRNEK 17:
alter table musteri add myasi int
alter table musteri add check (myasi>0)
--ÖRNEK 18:
alter table arac drop chkfiyat
alter table arac alter column fiyat float
alter table arac add constraint chkfiyat CHECK (fiyat>=0 AND fiyat<=100000)
::--::--:: DROP ile DB veya tablo silme ::--::--::
Alter drop: db nesnelerinin özelliklerini silmek için...
drop : db nesnesi (tabloları veya db) silmek için...
Truncate - en garantili kayıt silme için
Delete
--ÖRNEK 19:
drop table gecici
--ÖRNEK 20:
drop database xyz --xyz isimli db'yi siler
DML (Veri işleme dili)
Select - insert - update - delete
::--::--:: SELECT ile listeleme işlemleri ::--::--:: (Devamı ilerideki kısımlarda)
select sütunadı veya * from tabloadı where koşul
--ÖRNEK 21:
select * from personel
::--::--:: INSERT ile veri girişi ::--::--::
INSERT INTO tabloadı VALUES (değer1,değer2,değer3....)
INSERT INTO tabloadı(sütun1,sütun3,sütunx..) VALUES (değer1,değer3,değerx...)
--ÖRNEK 22:
create table personel(
pers_id int not null,
ad varchar(25),
soyad varchar(50),
sehir varchar(20),
mail varchar(100),
maas int check (maas>0))
insert into personel values (1,'ali','can','van',
--ÖRNEK 23:
insert into personel(pers_id,ad,mail) values (3,'ahmet',
select * from personel
--ÖRNEK 24: herkes istediği bir sütun NULL olacak şekilde kendi bilgilerini girsin.
insert into personel (pers_id, ad, soyad, mail, maas)
VALUES (2,'Mehmet','Başaran',
insert into personel(pers_id,ad,soyad,mail)values(4,'utku','bolat',
insert into personel(pers_id,ad,mail,maas) values (4,'ibrahim',
::--::--:: UPDATE ile veri güncelleme ::--::--::
UPDATE tabloadı set sütun1=değer1, sütun2=değer2, sütunx=değerx... where koşul
--ÖRNEK 25:
select * from personel
update personel set sehir='Bingöl' where pers_id=3
--ÖRNEK 26:
update personel set ad='Hakkı',soyad='Bulut' where maas>50000
--ÖRNEK 27:
update personel set maas=99999 where maas is null
--ÖRNEK 28:
update personel set mail=
--ÖRNEK 29:
update personel set sehir='Afyonkarahisar' where (maas>10000 and maas<50000) or soyad like '%n'
::--::--:: DELETE ve TRUNCATE ile veri silme işlemi ::--::--::
DELETE from tabloadı where koşul
--ÖRNEK 30:
delete from personel where ad like 'c%'
select * from personel
--ÖRNEK 31:
delete from xyz --xyz isimli tablodaki tüm veriler silinir
----TRUNCATE de veri silmek için kullanılır. Ancak daha temiz bir silme yapar.
truncate table xyz
::--::--::--:: DCL (DATA control lang. / Veri kontrol dili) ::--::--::--::
REVOKE - GRANT - DENY
GRANT: kullanıcının kayıt yapmasına ve SQL çalıştırmasına izin verir.
DENY: kullanıcıyı kısıtlar
REVOKE: izin ve kısıtlamaları kaldırır.
/* Grant {ALL veya izinler} ON {izin alanı} TO {kullanıcılar}
On ifadesi tablo için kullanılır
veritabnı düzeyinde işlem için TO yeterli */
veritabanı için: create database, create table, backup database, create view
tablo için: select, update, insert, delete
yordam için: execute
::--::--:: Server Seviyesi Roller ::--::--::
Bulkadmin: Bulk Insert yetkisine sahip olurlar. Başka bir veri kaynağından veya EXCEL den veri çekme işlemleri için kullanılır.
DBcreator: Veritabanı Create, Alter, Drop, veya veritabanı restore edebilir.
Diskadmin: bu yetkiye sahip olanlar disk dosyalarını yöntebilir.
Processadmin: tüm processleri yönetebilir, görebilir veya KILL komutuyla processleri sonlandırabilir.
Public: default yetkili kullanıcı. SQL e bağalanabilir,başka bir işlem yapamaz.
securityadmin: kullanıcı yetkilendirme işlemleri yapabilir. Grant, deny, revoke... şifreleri sıfırlayabilir..
serveradmin: sunucu genelinde yapılandırma yapabilir, sunucuyu değiştirebilir, kapatabilir
setupadmin: stored procedure işlemleri, linked server ekleyebilir, kaldırabilir.
sysadmin: En yetkin rol. database yöneticileri dışındakilere verilmemeli.
::--::--::--:: veritabanı Seviyesi Roller ::--::--::--::
db_owner: veritabanı düzeyinde en yetkin rol.
db_securityadmin: bazı özel roller için yetkilendirme yapabilir, rol üyeliğini değiştirebilir.
db_accessadmin: win oturum açma, sql server açma işlemleri için veritabanına erişim ekleyebilir
db_backupoperator: bu role sahip olanlar db yi yedekleyebilir.
db_ddladmin: ddl komutlarını çalıştıraiblir.
db_datawriter: tablolara veri girişi yapabilir
db_datareader: veritabanındaki verileri okuyabilir
::--::--:: SELECT ile listeleme işlemleri ::--::--::
--ÖRNEK 32:
select * from kargo
--ÖRNEK 33:
select gon_ad,TC from kargo
--ÖRNEK 34:
select * from kargo where s_no>=4
--ÖRNEK 35:
select ucret from kargo where ucret>40 and ucret<85
--ÖRNEK 36:
select gon_ad,gon_soyad from kargo where gon_sube='izmir'
veya
select gon_ad,gon_soyad from kargo where gon_sube like 'izmir'
--ÖRNEK 37:
select * from kargo where var_sube!='şırnak'
veya
select * from kargo where var_sube not like 'şırnak'
veya
select * from kargo where not var_sube like 'şırnak'
veya
select * from kargo where var_sube<>'ŞıRNak'
--ÖRNEK 38:
select tc from Kargo where gon_sube='izmir' or gon_sube='trabzon'
veya
select tc from kargo where gon_sube IN ('izmir','trabzon')
--ÖRNEK 39:
select gon_ad,gon_soyad from kargo where ucret<80 or gon_ad is NULL
--ÖRNEK 40: adı üç harfli ikinci harf L VEYA soyadı G ile bitenler
select * from kargo where gon_ad like '_l_' or gon_soyad like '%g'
--ÖRNEK 41:
select tc,ucret from kargo where tc like '6%5'
--ÖRNEK 42:
select orderID, shipname from orders
--ÖRNEK 43:
SELECT orders.Shipname, customers.city from orders, customers
--ÖRNEK 44:
select * from customers where city LIKE 'London'
SELECT * FROM Customers WHERE city='London'
--ÖRNEK 45:
select * from customers where city='Madrid' OR region is NULL
--ÖRNEK 46:
select customerID, address from customers where address LIKE '%er%'
--ÖRNEK 47:
select * from customers where customerID LIKE 'FR%'
AND country IN ('Italy','Germany')
--ÖRNEK 48:
select * from customers where customerId LIKE 'N_R%'
--ÖRNEK 49:
select * from customers where country='Germany' OR country='Italy'
::--::--::--:: distinct: tekrarlı satırları önlemek ::--::--::--::
--ÖRNEK 50:
select distinct madres from musteri
::--::--::--:: order by (ASC - DESC) ::--::--::--::
select * from tabloadı order by referanssütun ASC --(artan)
veya
select * from tabloadı order by referanssütun -- (artan)
--ÖRNEK 51:
select * from musteri order by myasi
--ÖRNEK 52:
select * from musteri order by 3 DESC
--ÖRNEK 53:
select mkod,mad,msoyad from musteri order by 3 DESC
::--::--::--:: order by ile referans sütuna göre sıralama ::--::--::--::
--ÖRNEK 54:
select * from musteri order by myasi,madres DESC
--ÖRNEK 55:
select * from customers order by country ASC,contactname DESC
--ÖRNEK 56:
select * from customers order by 9 ASC,3 DESC
::--::--::--:: sütunlar için takma isim kullanma ::--::--::--::
--ÖRNEK 57:
select companyname AS "şirket",city AS "şehir" from customers
veya
--ÖRNEK 58:
select companyname "şirket",city AS "şehir" from customers
--ÖRNEK 59:
select mad "AD", myasi+5 "YENİ YAŞ",mail from musteri
--ÖRNEK 60:
alter table musteri alter column myasi float
select mad 'AD', msoyad "SOYAD",myasi*0.5 "YARIM" from musteri
--ÖRNEK 61:
select mad 'AD', msoyad "SOYAD",(myasi/2)+3 "YARIM" from musteri
--ÖRNEK 62:
select mad 'AD', msoyad "SOYAD",myasi+((myasi*50)/100) "ZAMLI YAŞ" from musteri
--ÖRNEK 63:
select mad+' '+msoyad AS "BİLGİLER" from musteri
--ÖRNEK 64:
select * from musteri
where myasi>=23 AND myasi<=28 AND madres='Ağrı' AND mkod>2 order by 3 --msoyad Artan
--ÖRNEK 65:
select madres from musteri where madres NOT IN ('Ağrı') order by 1 DESC
veya
select madres from musteri where madres!='Ağrı'
--ÖRNEKLER 66:
create table urunler2(
urun_no int identity(1,1) not null,
urun_adi varchar(100),
urun_fiyati float,
constraint chkfiyatt CHECK (urun_fiyati>=0 AND urun_fiyati<=1000),
urun_adedi int,
constraint chkadet CHECK (urun_adedi>=0 AND urun_adedi<=100),
islem_tarihi smalldatetime,
sevk_adresi varchar(50))
insert into urunler2 values ('Salça',3.25,100,'07.01.2019','İzmir')
insert into urunler2 values ('Pirinç',5.75,100,'06.02.2019','İzmir')
insert into urunler2 values ('Bulgur',3.30,90,'05.03.2019','Afyon')
insert into urunler2 values ('Zeytin Yağı',24.75,85,'04.04.2019','Konya')
insert into urunler2 values ('Ayçiçek Yağı',17.25,99,'03.05.2019','Aksaray')
insert into urunler2 values ('Makarna',1.77,98,'02.06.2019','Hakkari')
insert into urunler2 values ('Şehriye',1.22,100,'01.11.2019','Bursa')
select 3*5,3+5
select 3*5 "ÇARPIM",3+5 AS "TOPLAM"
select urun_fiyati+(urun_fiyati*0.25) AS "Yeni Fiyat" from urunler2
select * from urunler2
--ÖRNEK 67:
select SUBSTRING (urun_adi,2,3) AS 'Kısaltma' from urunler2
--ÖRNEK 68:
select SUBSTRING(sevk_adresi,1,1)+'.'+urun_adi "A.Soyad" from urunler2
--ÖRNEK 69:
select RIGHT (sevk_adresi,1)+'.'+urun_adi AS 'Ad Soyad' from urunler2
--ÖRNEK 70:
select UPPER (sevk_adresi) from urunler2
--ÖRNEK 71:
select LOWER (urun_adi), UPPER(sevk_adresi) "Adres" from urunler2
--ÖRNEK 72:
select urun_adi,LEN(urun_adi) As "uzunluk1",
urun_adedi,LEN(urun_adedi) as "uzunluk2" from urunler2
--ÖRNEK 73:
select urun_adi,REPLACE(urun_adi,'Salça','baharat') 'Yeni' from urunler2
--ÖRNEK 74:
select REVERSE(urun_adi) as 'ters isim' from urunler2
--ÖRNEK 75:
select ABS(-0.45) as mutlak from urunler2
--ÖRNEK 76:
select urun_adi,ROUND(urun_fiyati,1) as "yuvarlanmış" from urunler2
--ÖRNEK 77:
select POWER (2,3) as "küp alma"
--ÖRNEK 78:
select SQRT(64)
--ÖRNEK 79:
select SUM(urun_adedi) 'Toplam Ürün' from urunler2
--ÖRNEK 80:
select SUM(urun_fiyati) "Toplam" from urunler2
where islem_tarihi>='3.3.2019'
--ÖRNEK 81:
select SUM(urun_adedi) "Toplam Ürün" from urunler2
where urun_no>2 AND urun_no<=7 AND sevk_adresi like '%a' OR sevk_adresi like '%i'
--ÖRNEK 82:
select ROUND(AVG(urun_fiyati),2) as "ortalama fiyat" from urunler2
--ÖRNEK 83:
select MAX(urun_Adedi),MIN(urun_fiyati) from urunler2
--ÖRNEK 84:
select MAX(islem_tarihi) from urunler2
--ÖRNEK 85:
select COUNT(urun_adi) as "Çeşit sayısı" from urunler2
--ÖRNEK 86:
select COUNT(distinct sevk_adresi) from urunler2
::--::--::--:: TRANSACTION ::--::--::--::
SQL TRANSACTION yapıları, bir dizi işlemi bir arada çalıştırarak, bu işlemlerin bütünlüğünü ve tutarlılığını sağlar. Bir TRANSACTION, bir veya birden fazla SQL sorgusundan oluşur ve bu sorguları içeren bir mantıksal işlem birimidir.
TRANSACTION başlatıldıktan sonra, tüm işlemler bir arada çalıştırılır ve bu işlemlerden herhangi birinde hata oluşursa, TRANSACTION geri alınarak tüm işlemler önceki durumuna geri döndürülür. Bu, veritabanında tutarlılığı korur ve herhangi bir veri kaybını veya bütünlük ihlalini önler. Ayrıca, TRANSACTION yapıları, birden fazla kullanıcının aynı veriler üzerinde çalıştığı durumlarda, bir kullanıcının yaptığı değişikliklerin diğer kullanıcıların verilerini etkilemesini önler.
Özetle, TRANSACTION yapıları, veritabanındaki işlemleri atomik, tutarlı, izole edilmiş ve dayanıklı (ACID) şekilde yürütmek için kullanılır.
/*
begin transaction
update hesaplar set bakiye=bakiye-1000 where hesap_no=1071
update hesaplar set bakiye=bakiye+1000 where hesap_no=1453*/
-- transaction_log:
Bir SQL veritabanında yapılan tüm işlemlerin kaydedildiği bir dosyadır. Bu dosya, veritabanı yönetim sistemleri tarafından kullanılır ve veritabanındaki herhangi bir değişikliği kaydetmek için kullanılır. Transaction log, veritabanında yapılan tüm değişikliklerin bir kaydını tutar. Bu değişiklikler, veri ekleme, güncelleme, silme veya başka bir işlem olabilir. Transaction log aynı zamanda, veritabanındaki işlemleri geri alma veya geri yükleme işlemlerinde de kullanılır. Transaction log, veritabanı yöneticilerine, veritabanındaki herhangi bir değişikliği takip etme ve geri alma olanağı sağlar. Ayrıca, veritabanındaki işlemlerin güvenliğini arttırır ve veri kaybını önlemeye yardımcı olur. Özetle, transaction log, bir veritabanında yapılan tüm işlemlerin kaydedildiği bir dosyadır ve veritabanı yöneticilerine, veritabanındaki işlemleri takip etme ve geri alma olanağı sağlar.
-- COMMIT:
COMMIT, bir TRANSACTION bloğu içinde yapılan değişiklikleri veritabanına kalıcı olarak kaydetmek için kullanılan bir SQL komutudur. Bir TRANSACTION bloğu, bir veya birden fazla SQL sorgusundan oluşur ve bu sorguları içeren bir mantıksal işlem birimidir. Bu blok, veritabanında yapılan değişiklikleri geçici olarak saklar ve işlemlerin tutarlılığını korumak için kullanılır. COMMIT komutu, TRANSACTION bloğunda yapılan değişiklikleri veritabanına kalıcı olarak kaydeder. Yani, bir TRANSACTION bloğu içinde yapılan değişiklikler, COMMIT komutu çalıştırılmadan önce veritabanında kalıcı olarak kaydedilmezler.
COMMIT komutu ayrıca, TRANSACTION bloğunun sona erdiğini ve yapılan değişikliklerin kalıcı olarak kaydedilebileceğini belirtir. Böylece, COMMIT komutu işlemin tamamlanmasını sağlar ve veri tabanındaki verilerin bütünlüğünü korur.
-- ROLLBACK:
ROLLBACK, bir TRANSACTION bloğu içinde yapılan değişiklikleri geri almak için kullanılan bir SQL komutudur. ROLLBACK komutu, TRANSACTION bloğunda yapılan değişiklikleri geri alır ve veritabanındaki verileri TRANSACTION bloğunun başlangıcındaki duruma geri getirir. Yani, bir TRANSACTION bloğu içinde yapılan değişiklikler, ROLLBACK komutu çalıştırıldığında geri alınır ve veritabanındaki veriler önceki durumuna döndürülür.
----------
save transaction noktaismi
commit/rollback transaction nokta_ismi
--ÖRNEK 87 :
use Northwind
Begin transaction
update Orders set ShipAddress='Gültepe' where ShipCountry='France'
update orders set ShipCity='İzmir' where ShipAddress='Gültepe'
select * from Orders where ShipCity='İzmir'
Rollback
select * from orders
--ÖRNEK 88 :
Begin transaction
save transaction nokta1
update Orders set ShipAddress='Gültepe' where ShipCountry='France'
update orders set ShipCity='İzmir' where ShipAddress='Gültepe'
select * from Orders where ShipCity='İzmir'
rollback transaction nokta1
UPDATE Orders SET ShipCity ='Manisa' WHERE ShipCity = 'Reims'
select * from Orders
rollback
::--::--:: T-SQL değişken tanımlama ::--::--::
DECLARE komutu, T-SQL de değişken tanımlamak için kullanılan bir komuttur.Bu komut ile değişkenlerin türü, adı ve varsayılan değeri belirtilir. DECLARE komutu aynı zamanda bir dizi değişkeni tanımlamak için de kullanılabilir.
* DECLARE @degisken_adi veri_tipi
* Yerel değişkenin önüne @ işareti gelir.
* Değişkene değer atamak için SET ya da SELECT kullanılır.
set/select @degisken=atanan_değer
declare @sayi int
declare @karakter varchar(15)
declare @sayi int,@karakter varchar(15)
--ÖRNEK 89 :
declare @sayi1 int, @sayi2 int, @toplam int
set @sayi1=35
set @sayi2=75
set @toplam=@sayi1+@sayi2
select @toplam as 'Toplam'
--ÖRNEK 90 :
declare @pahali money
select @pahali=max(Freight) from Orders
select @pahali as 'En yüksek fiyat'
::--::--::--:: Sistem Fonksiyonları ::--::--::--::
T-SQLde sistem fonksiyonları, veritabanı yönetimi ve sorgulama işlemleri için kullanılan önceden tanımlanmış işlevlerdir. Bu fonksiyonlar, SQL Server tarafından sağlanır ve sorgulama veya saklanmış prosedürler gibi farklı T-SQL kodları içinde kullanılabilir. T-SQLde sistem fonksiyonları, farklı kategorilere ayrılır ve her bir kategori farklı bir görevi yerine getirir.
Bazı sistem fonksiyonu kategorileri şunlardır:
Dizgi Fonksiyonları: Metin işleme işlemleri için kullanılan fonksiyonlar.
Matematiksel Fonksiyonlar: Matematiksel işlemler için kullanılan fonksiyonlar.
Tarih ve Saat Fonksiyonları: Tarih ve saat işlemleri için kullanılan fonksiyonlar.
Dönüştürme Fonksiyonları: Veri türü dönüştürme işlemleri için kullanılan fonksiyonlar.
İfadeler ve Yönergeler: SQL Server hakkında bilgi sağlayan fonksiyonlar.
Sistem fonksiyonları, veritabanı yönetimi işlemleri için de kullanılabilir. Örneğin, OBJECT_ID() fonksiyonu,
bir nesne adı belirtildiğinde ilgili nesnenin IDsini döndürür. DB_NAME() fonksiyonu, geçerli veritabanının
adını döndürür. DATABASEPROPERTYEX() fonksiyonu, veritabanı özellikleri hakkında bilgi sağlar.
Sistem fonksiyonları, T-SQL kodunu daha okunaklı ve daha kolay anlaşılır hale getirir. Ayrıca, sorgu ve
saklanmış prosedürlerde değişkenler veya parametreler gibi farklı T-SQL yapılarıyla birlikte kullanılabilirler.
Sistem fonksiyonlarının başına @@ işareti gelir. Tüm kullanıcılar için geçerli olan fonksiyonlardır.
Sql server hakkında tanımlanmış ve bilgi almak için kullanılan fonksiyonlar.
@@ERROR : T-SQLde kullanılan bir sistem değişkenidir ve son yürütülen SQL ifadesinde oluşan hata kodunu içerir. Bu değişken, bir SQL ifadesi işlendiğinde, özellikle INSERT, UPDATE veya DELETE ifadelerinde oluşan bir hata durumunda, hata kodunu yakalamak için kullanılır. @@ERROR değişkeni, hata kodunu saklar ve bu kod, kullanıcıya bir hata mesajı veya hata işleme kodu göstermek için kullanılabilir.
Not: Bu fonksiyon hatanın sebebini doğrudan açıklamaz, yalnızca hata kodunu sağlar.
--ÖRNEK 91:
select 10/0
select @@ERROR
--ÖRNEK 92:
select * from sys.messages
-- ÖRNEK 93:
select 10/0
select * from master.dbo.sysmessages where ERROR=@@ERROR
@@SERVICENAME : T-SQLde kullanılan bir sistem değişkenidir ve SQL Server hizmetinin adını döndürür. Bu değişken, SQL Server hizmetinin adına ihtiyaç duyulduğunda kullanılır. Örneğin, bazı SQL Server özelliklerini yapılandırmak için, SQL Server Configuration Manager aracılığıyla SQL Server hizmetinin adını bilmek gerekebilir. @@SERVICENAME değişkeni, bu adı elde etmek için kullanılabilir.
--ÖRNEK 94:
select @@SERVICENAME
@@SERVERNAME : SQL Serverın adını döndürür. Örneğin, bir SQL Server örneğine bağlanmak veya bir SQL Serverdan bir başka SQL Servera bağlanmak için, SQL Server adını bilmek gerekebilir. @@SERVERNAME değişkeni, bu adı elde etmek için kullanılabilir.
--ÖRNEK 95:
select @@SERVERNAME
@@VERSION : SQL Server sürümünün bilgisini döndürür. Bu değişken, bir SQL Server kurulumunun sürüm bilgisine ihtiyaç duyulduğunda kullanılır. Örneğin, bir uygulamanın, veritabanına erişirken, kullanılan SQL Server sürümüne uygun bir sorgu oluşturması gerekebilir. @@VERSION değişkeni, bu amaçla kullanılabilir.
--ÖRNEK 96:
select @@VERSION
Bu örnek SQL Server sürümünün bilgisini döndürür, örneğin "Microsoft SQL Server 2019 (RTM-CU14)
(KB5005630) - 15.0.4138.2 (X64)" gibi. Bu bilgi, SQL Server sürümünü belirlemek veya sürüm bilgisini
kullanarak SQL Server özelliklerini yaplandırmak için kullanılabilir.
@@LANGUAGE : T-SQLde kullanılan bir sistem değişkenidir ve kullanılan dilin adını döndürür.Bu değişken, bir SQL Server kurulumunun hangi dil ayarlarının kullanıldığına ihtiyaç duyulduğunda kullanılır. Örneğin, bir veritabanının, kullanılan dil ayarlarına uygun bir şekilde sorgulanması gerekebilir. @@LANGUAGE değişkeni, bu amaçla kullanılabilir.
--ÖRNEK 97:
select @@LANGUAGE as 'Kullanılan Dil'
Bu örnek/sorgu, kullanılan dilin adını döndürür, örneğin "us_english" veya "turkish". Bu bilgi, bir veritabanında kullanılan karakter kümesinin veya bir SQL Server özelliğinin doğru şekilde yapılandırılması için kullanılabilir.
@@LANGID : T-SQLde kullanılan bir sistem değişkenidir ve kullanılan dilin Microsoftun dil kimliği (LCID) numarasını döndürür. Bu değişken, bir SQL Server kurulumunun hangi dil ayarlarının kullanıldığına ihtiyaç duyulduğunda kullanılır. Örneğin, bir veritabanının, kullanılan dil ayarlarına uygun bir şekilde sorgulanması gerekebilir. @@LANGID değişkeni, bu amaçla kullanılabilir.
--ÖRNEK 98:
select @@LANGID
Bu sorgu, kullanılan dilin LCID numarasını döndürür, örneğin "1033" (ABD İngilizcesi) veya "1055" (Türkçe) gibi. Bu bilgi, bir veritabanında kullanılan karakter kümesinin veya bir SQL Server özelliğinin doğru şekilde yapılandırılması için kullanılabilir.
@@MAX_CONNECTIONS : SQL Servera aynı anda açılabilen maksimum bağlantı sayısını belirler. SQL Server, aynı anda birçok kullanıcının veritabanına erişebilmesine izin verir ve her bir kullanıcı bağlantı noktası aracılığıyla erişim sağlar. @@MAX_CONNECTIONS değişkeni, SQL Serverda aynı anda açılabilecek en fazla bağlantı sayısını belirler.
--ÖRNEK 99:
select @@MAX_CONNECTIONS
@@DATEFIRST : T-SQLde kullanılan bir sistem değişkenidir ve haftanın ilk gününü belirler. SQL Serverda, haftanın ilk günü varsayılan olarak Pazartesidir. Ancak bazı ülkelerde veya bölgelerde haftanın ilk günü farklıdır (örneğin, ABDde haftanın ilk günü Pazar). @@DATEFIRST değişkeni, haftanın ilk gününü belirler ve bu değişkenin değeri 1 ile 7 arasında değişir. 1, Pazartesiyi, 2, Salıyı, 3, Çarşambayı ve böyle devam eder.
@@ROWCOUNT : Son sorgunun etkilediği satır sayısını döndürür. @@ROWCOUNT değişkeni, sorgu sonrasında etkilenen satır sayısının öğrenilmesi gereken durumlarda oldukça faydalıdır. Örneğin, bir INSERT sorgusunun kaç satır eklediğini öğrenmek için kullanılabilir veya bir DELETE sorgusunun kaç satır sildiğini öğrenmek için kullanılabilir.
--ÖRNEK 100:
delete from personel where adi like '%a%'
select @@ROWCOUNT
@@IDLE : SQL Serverdaki anlık durum bilgilerini sağlayan bir sistem değişkenidir. Bu değişken, SQL Serverın CPU ve bellek kullanımı, işlem sayısı, bekleyen işlem sayısı, bekleme süreleri ve diğer sistem performansı verileri gibi çeşitli bilgileri sağlar. @@IDLE değişkeni, SQL Serverın anlık durumunu gösterir ve ne kadar süredir boşta olduğunu döndürür. Bu değişkenin değeri, SQL Serverın ne kadar süredir boşta olduğuna bağlı olarak değişir ve bu bilgi, SQL Server performansının analizinde faydalı olabilir.
::--::--::--:: GO ile yığın oluşturma ::--::--::--::
T-SQL'de "GO" ifadesi, bir yığın (batch) işlemini sonlandırmak ve bir sonraki yığın işlemine geçmek için kullanılan bir ayırıcıdır. T-SQL'de yığın, birden fazla SQL ifadesinden oluşan ve bir arada çalıştırılabilen bir kod bloğudur.
Bir yığın, T-SQL editöründe veya bir SQL betiği dosyasında birden fazla SQL ifadesini içerebilir. T-SQLde yığın oluşturma mantığı, her yığın işleminin birbirinden bağımsız olarak çalıştırılabilmesini sağlamaktır. Yani, bir yığın işlemi başarılı bir şekilde tamamlandıktan sonra, bir sonraki yığın işlemi başlatılabilir.
T-SQL ifadeler
..
GO -- Yığın1
T-SQL ifadeler
...
GO --Yığın2
--ÖRNEK 101:
declare @deger int
set @deger=30
go
select @deger
::--::--:: Print ile ekrana mesaj yazdırma ::--::--::
select 'deneme deneme'
print 'deneme deneme'
--ÖRNEK 102:
declare @sayi1 int, @sayi2 int,@sayi3 int
set @sayi1=22
set @sayi2=44
set @sayi3=@sayi1*@sayi2
print 'Toplam'
print '-------'
print @sayi3
::--::--::--:: TABLO Tipi DEĞİŞKEN ::--::--::--::
T-SQL tablo tipi değişken, bir tablo yapısına sahip ve T-SQL kodlarında geçici olarak kullanılabilen bir değişken türüdür. Tablo tipi değişkenleri, bir tablonun sütunlarının adları, veri tipleri ve sıralama özellikleri gibi bilgileri içerir. Bu değişkenler, T-SQL kodlarında geçici bir tablo gibi kullanılabilir.
Tablo tipi değişkenler, özellikle çok sayıda satırı veya birçok sütunu olan geçici verilerle çalışmak gerektiğinde faydalıdır. Bir tablo tipi değişkeni, bir T-SQL kodunda birçok işlem sırasında kullanılabilir ve sonunda işlem tamamlandığında yok olur. Bu sayede, veri tutmak için gereksiz yere fiziksel bir tablo oluşturulması veya silinmesi gerekmez.
--Kullanım Şekli:
declare @degiskenismi TABLE (degisken1 veritipi,degisken2 veritipi)
--ÖRNEK 103:
declare @personel table(
no int identity(1,1),
ad_soyad varchar(100) not null,
yas int)
insert into @personel values ('Sude kalyoncu', 65)
insert into @personel values ('Mehmet Başaran', 22)
select * from @personel order by ad_soyad
--ÖRNEK 104:
create table kitap(
ktp_no int identity(1,1),
ktp_adi varchar(100),
yazar_adi varchar(25),
yazar_soyad varchar(50),
sayfa_sayisi int,
fiyat int)
insert into kitap values ('abc','ali','can',350,40)
insert into kitap values ('dsadf','alim','cincan',200,30)
insert into kitap values ('jgjgh','halil','baycan',400,55)
insert into kitap values ('trty','salim','caner',100,13)
select * from kitap
declare @yazar table(yazar_no int)
insert into @yazar values (1),(3),(4)
select ktp_no,ktp_adi,sayfa_sayisi from kitap where ktp_no IN (select * from @yazar)
::--::--::--:: OUTPUT işlemi ::--::--::--::
inserted : insert, update
deleted : delete,update
output alınacak_sütunlar into aktarılacak_yer
--ÖRNEK 105:
declare @eklenenler table(
ad varchar(25),
soyad varchar(25),
fiyat money)
insert into kitap
output inserted.yazar_adi,inserted.yazar_soyad,inserted.fiyat into @eklenenler
values ('mağaradakiler','cemil','meriç',355,60)
select * from @eklenenler
--ÖRNEK 106:
declare @silinenler table(
ad varchar(50),
fiyat money)
delete from kitap
output deleted.ktp_adi,deleted.fiyat into @silinenler
where fiyat>55
select * from @silinenler
::--::--::--:: IF ...ELSE yapısı ::--::--::--::
Bu yapı, T-SQL kodlarında koşullu ifadelerin kullanılmasını sağlar.If-else yapısı, belirli bir koşulu değerlendirir ve koşul doğruysa belirtilen kod bloğunu çalıştırır. Aksi takdirde, else bloğunda belirtilen kodlar çalıştırılır.
IF Koşul
Koşula bağlı ifadeler/kodlar
ELSE IF koşul
Koşula bağlı kodlar
...
..
ELSE
kodlar
* çalıştırılacak kodlar birden fazla satırdan oluşuyorsa BEGIN - END arasına yazılmalıdır.
* if koşulu içinde Select kullanılacaksa, sorgudan tek değer dönmelidir..
--ÖRNEK 107:
IF EXISTS (select * from kitap where ktp_no>10)
print 'Kayıt Sayısı 10dan fazladır'
ELSE
begin
select ktp_no,ktp_adi,yazar_adi from kitap where ktp_no<=10
print 'Kayıt sayısı 10 veya daha azdır'
end
--ÖRNEK 108:
declare @ktp_sayisi varchar(20)
select @ktp_sayisi=count(*) from kitap
if (@ktp_sayisi<=5)
begin
print 'Kitap sayısı: ' + @ktp_sayisi
print 'Kitap sayısı az'
end
else if (@ktp_sayisi>5 and @ktp_sayisi<=10)
begin
print 'Kitap sayısı: ' + @ktp_sayisi
print 'Yeni kitaplar gerekli'
end
else
begin
print 'Kitap sayısı: ' +@ktp_sayisi
print 'Kitap sayısı yeterli'
end
::--::--::--:: CASE ...WHEN-THEN yapısı ::--::--::--::
Birden fazla koşul gerektiren durumlarda if-else yerine kullanılır
--1
case kontrol_edilecek_değer
when aldığı_değer1 then sonuç1
when aldığı_değer2 then sonuç2
..
...
ELSE sonuç_x
end
--2
case
when karşılaştrma1 then sonuç1
when karşılaştırma2 then sonuç2
..
else
end
--ÖRNEK 109:
select ktp_adi,yazar_adi,fiyat,'GÖRÜŞ'=
case
when fiyat>40 then 'PAHALI'
when fiyat>30 and fiyat<=40 then 'NORMAL'
when fiyat>15 and fiyat<=30 then 'UCUZ'
ELSE 'BEDAVA'
end
from kitap
::--::--:: WHILE döngüsü BREAK, CONTINUE yapısı ::--::--::
Koşul sağlandığı sürece (True değeri döndüğü sürece) kod/kodlar çalıştırılır.
WHILE koşul
Begin
kodlar
end
* Tekrarlanmasını istediğimiz işlem tek satırdan oluşuyorsa Begin-End olmasa da olur
Break: İstenilen işlem basamağında döngüden çıkar
Continue: Bulunulan işlem basamağını atlayıp sonraki basamaktan devam eder
select 3 + 3
select 3 + '3'
select '3' + '3'
select '3' + 'B'
select 3 + 'B'
cast / convert : string ile diğer veri tiplerini birleştirme/dönüştürme
cast(değer AS yeniveritipi)
convert(yeniveritipi,değer)
--ÖRNEK 110:
1den 5e kadar sayıların karesi
declare @sayac int
set @sayac=1
while @sayac<=5
begin
print cast(@sayac as varchar(10)) + ' karesi :' + cast(@sayac*@sayac as varchar(10))
set @sayac=@sayac+1
end
--ÖRNEK 111:
Kitap tablosundaki fiyat ortalaması 35TL üzeri olana kadar fiyatları %5 artıralım artıralım
select * from kitap
-- select avg(fiyat) from kitap
-- update kitap set fiyat=fiyat*5/100+fiyat
select 'Ortalama Fiyat =' + cast(avg(fiyat) as varchar(15)) from kitap
while (select avg(fiyat) from kitap)<=57
begin
update kitap set fiyat=fiyat*5/100+fiyat
select ktp_adi,fiyat from kitap
end
select 'Yeni ortalama fiyat =' +cast(avg(fiyat) as varchar(15)) from kitap
--ÖRNEK 112: break kullanımı
declare @sayac int
set @sayac=1
while @sayac<=10
begin
if @sayac=8
begin
set @sayac=@sayac+1
break
end
print cast(@sayac as varchar(10))+ ' karesi :' + cast(@sayac*@sayac as varchar(10))
set @sayac=@sayac+1
end
--ÖRNEK 113: continue kullanımı1
declare @sayi int = 0
while (@sayi<10)
begin
set @sayi = @sayi+1
if @sayi = 8 continue;
print cast(@sayi as varchar(15)) +
' sayısının karesi = ' +
cast(@sayi*@sayi as varchar(15))
end
--ÖRNEK 114: continue kullanımı2
declare @sayac int
set @sayac=1
while @sayac<=10
begin
if @sayac=8
begin
set @sayac=@sayac+1
continue
end
print cast(@sayac as varchar(10))+ ' karesi :' + cast(@sayac*@sayac as varchar(10))
set @sayac=@sayac+1
end
::--::--::--:: GOTO ::--::--::--::
koşulsuz dallanma için kullanılır.
etiket:
...
..
.
goto etiket
::--::--::--:: RETURN ::--::--::--::
koşulsuz olarak kodların çalışmasını sonlandırır
::--::--::--:: WAITFOR ::--::--::--::
Delay: belirlenen zaman kadar kodların çalışmasını erteler
Time: belirlenen zamanda kodları çalıştırır
--ÖRNEKLER 115:
waitfor time '21:19:00' -- kodlar 21.19'da çalışır
waitfor delay '21:19:00' -- kodlar 21 saat 19dk sonra çalışır
waitfor delay '00:00:15'
select * from kitap
::--::--:: STORED PROCEDURE (SAKLI YORDAMLAR) ::--::--::
Yordamlar, bir veritabanı yönetim sistemi tarafından yürütülür ve SQL sorgularını, veri işleme işlevlerini, kontrol yapılarını ve diğer programlama öğelerini içerebilir. Stored Procedure, sıklıkla tekrarlanan görevleri otomatikleştirmek için kullanılır.
Stored Procedureler birkaç avantaj sağlar. Bunlar şunları içerir :
* Veritabanı işlemlerini gerçekleştirmek için optimize edilmiş bir yöntem sağlarlar. Çünkü Stored Procedureler, veritabanında saklandıkları için, veritabanı yönetim sistemi tarafından optimize edilebilirler. Bu, veritabanı işlemlerinin daha hızlı gerçekleştirilmesine ve daha az kaynak tüketilmesine neden olur.
* Güvenlik sağlarlar. Stored Procedureler, veritabanı yöneticisi tarafından izin verilen kullanıcılara açık olabilir. Bu, veritabanına yapılan erişimleri kontrol etmek ve veritabanı güvenliğini artırmak için kullanılabilir.
* Tekrar kullanılabilirler. Stored Procedureler, aynı görevi birçok kez gerçekleştirmek için kullanılabilirler. Bu, kod tekrarını azaltır ve uygulamaların daha düzenli hale gelmesini sağlar.
System Stored Procedure
Local Stored Procedure
Extended Stored Procedure
::--::--:: System Stored Procedure ::--::--::
System Stored Procedure, Microsoft SQL Serverda bulunan önceden tanımlanmış saklı prosedürlerdir. Bu prosedürler, veritabanı yönetimi ve diğer sistem düzeyi görevleri için kullanılabilirler. System Stored Procedureler, "sp_" ön adıyla başlayan adlarla tanımlanır ve sistem veritabanında saklanırlar.
System Stored Procedureler, kullanıcılar tarafından kullanılan normal Stored Procedurelerden farklıdır. Normal Stored Procedureler, uygulama özelliklerini veya iş mantığını uygularken, System Stored Procedureler, veritabanı yönetimi veya sistem düzeyi görevlerini gerçekleştirir.
Örnekler arasında, veritabanı yedekleme ve geri yükleme, veritabanı onarımı, kullanıcı hesapları yönetimi, veritabanı istatistiklerinin yeniden derlenmesi ve yeniden oluşturulması, depolama motoru ayarları ve diğer birçok görev yer alabilir.
--ÖRNEK 116:
select * from sys.messages
sp_addmessage 50002,16,'Otomatik artan sütun için değer girmişsiniz'
select * from sys.messages where message_id=50002
--ÖRNEK 117:
sp_addmessage 50002,16,'Değiştik gardaş',@with_log=TRUE,@replace='REPLACE'
--ÖRNEK 118:
sp_addtype sayi,int,'null'
aktif veri tabanında yeni veri tipi oluşturuyor
create table abc(
fiyat sayi,
ad varchar)
--ÖRNEK 119:
sp_configure 'user options',10
--ÖRNEK 120:
sp_configure 'remote access',0
--ÖRNEK 121:
sp_addlogin 'deneme5',123456
go
sp_adduser 'deneme5','xyz'
::--::--:: LOCAL STORE PROCEDURE ::--::--::
Local Stored Procedure, bir veritabanında tanımlanan ve veritabanı içinde saklanan özelleştirilmiş bir prosedürdür. Bu prosedürler, belirli bir veritabanı ile ilişkili olan uygulamalar tarafından kullanılabilir.
Local Stored Procedurlar, uygulama geliştiricilerinin veritabanı işlevlerini organize etmelerine ve yönetmelerine yardımcı olur. Bu prosedürler, veritabanı işlevlerini kolaylaştırabilir ve işlemleri daha hızlı hale getirebilir.
Local Stored Procedureler, veritabanı nesneleri olarak tanımlanırlar ve T-SQL dilinde yazılırlar. Bu prosedürler, parametreler aracılığıyla çeşitli işlevler gerçekleştirebilirler ve veritabanı işlemleri için uygun bir arayüz sağlarlar.
Local Stored Procedurler, uygulama güncellemelerinde ve veritabanı değişikliklerinde kullanılabilir. Bu prosedürler, veritabanı işlevlerini güncelleştirmek veya yeniden yapılandırmak için kolay bir yol sağlarlar.
create -- local proc oluşturmak için
alter -- değişiklik yapmak için (create kullanımı ile aynı kullanıma sahip)
execute / exec -- çalıştırmak için
drop -- silmek için
--ÖRNEK 122:
create procedure listele5
as
select * from kitap where yazar_adi like '%h%'
exec listele5
listele5
--ÖRNEK 122:
alter procedure listele5
as
select * from kitap where yazar_adi like '%a%'
listele5
--ÖRNEK 123:
drop procedure listele5
::--::--:: NOCOUNT ::--::--::
NOCOUNT, bir SQL sorgusunun sonuç kümesinde etkilenen satır sayısının gösterilip gösterilmeyeceğini belirleyen bir T-SQL ifadesidir. NOCOUNT komutu, bir SQL sorgusu çalıştırıldığında, işlem sırasında etkilenen satır sayısı hakkında bilgi veren ekstra bir satır döndürülmesini engeller. Bu özellik bazen performansı artırmak için kullanılabilir, çünkü etkilenen satır sayısının her sorgu sonucunda döndürülmesi gerekmeyebilir ve gereksiz yere ağ trafiği ve bellek kullanımına neden olabilir.
set nocount off --default olarak böyle zaten
set nocount on
::--::--:: Store Procedure'lerde Çıkış Parametresi Kullanmak ::--::--::
Yordamlar istenilen işlemleri yaptıktan sonra elde ettiği sonucu yordamın çağrıldığı yere göndermek için çıkış parametresi kullanılır. 2 parametre var: RETURN ve OUTPUT
Output: yordamdan dönen değeri parametre olarak çağrıldığı yere gönderir. Yordam için yazılan parametreler ve veri tiplerinden sonra OUTPUT kullanılmalıdır.
--ÖRNEK 124:
create procedure toplam(@sayi1 int, @sayi2 int,@sonuc int output)
as
set @sonuc=@sayi1+@sayi2
declare @a int
exec toplam 75,85,@a output
print @a
--ÖRNEK 125:
create procedure carpma(@s1 int, @s2 int, @s3 int, @sonuc int output)
as
set @sonuc=@s1*@s2*@s3
print 'Sonuç = ' +cast(@sonuc as varchar(10))
declare @a int
exec carpma 5,10,15,@a output
--ÖRNEK 126:
create procedure kitapbul(@yazar varchar(41))
as
select * from kitap where yazar_adsoyad=@yazar
--test
kitapbul 'Cem'
--ÖRNEK 127:
Aranılan kitap varsa kitap fiyatı / adeti artırılsın. kitap yoksa listeye eklensin
alter procedure kitap_bul (@kitap varchar(25))
as
if (select count(*) from kitap where ktp_adi = @kitap) > 0
update kitap set fiyat = fiyat + 5
else
insert into kitap (ktp_adi, fiyat) values (@kitap, 50)
::--::--:: Kullanıcı Tanımlı Fonksiyonlar ::--::--::
Standart fonksiyonlar --> avg, sum, substring,min, max...
* KTF lar 1 veya daha fazla değeri geri döndürebilir.
* Yordamlarda olduğu gibi dışarıdan, birden fazla değer alabilir
* fonksiyonlar SQL ifadleri içinde yer alabilir
::--::--:: Scalar-Valued Functions ::--::--::
Scalar-valued function, tek bir değer döndüren ve parametreleri olan bir fonksiyondur. Bu tür fonksiyonlar, bir sorguda bir ifade olarak kullanılabilir ve geri döndürdüğü tek değer, diğer sorguların bir parçası olarak kullanılabilir.
Scalar-valued functions, bir SQL Server veritabanında oluşturulabilir ve genellikle bir dize işleme, matematiksel bir işlem veya bir tarih işlemi gerçekleştirmek gibi tek bir değerli hesaplamalar yapmak için kullanılır.
READONLY : fonksiyona gelen değerin fonksiyon içinde değiştirilmesini önler.
RETURNS : scaler fonksiyondan dönen değerin veri tipini belirler
WITH ENCRYPTION : fonksiyondan dönen bilgiyi gizler
WITH SCHEMABINDING : tablodaki yapısal değişikliği önler (table-valued)
Örneğin, aşağıdaki örnek, "Product" tablosundaki bir ürünün fiyatını iki katına çıkaran bir scalar-valued function kullanır :
CREATE FUNCTION DoublePrice(@ProductId int)
RETURNS money
AS
BEGIN
DECLARE @Price money
SELECT @Price = Price FROM Products WHERE ProductId = @ProductId
RETURN @Price * 2
END
Bu scalar-valued function, "ProductId" parametresi ile çağrılabilir ve geri döndürdüğü değer, "Price" alanındaki
değerin iki katıdır. Örneğin, aşağıdaki sorgu, "ProductId" 1 olan ürünün fiyatını iki katına çıkarır:
SELECT dbo.DoublePrice(1) as 'Yeni Fiyat'
--ÖRNEK 128:
create function buyuk_harf(@gelen varchar(max))
returns varchar(max)
as
begin
return UPPER(@gelen)
end
--test
select dbo.buyuk_harf(yazar_adsoyad),fiyat from kitap
--ÖRNEK 129:
create function top_fiyat(@gelen varchar(max))
returns int
as
begin
declare @toplam int
select @toplam=sum(fiyat) from kitap where ktp_adi=@gelen
return @toplam
end
--test
select dbo.top_fiyat('bu ülke')
select dbo.top_fiyat('fjgh')
::--::--:: TABLE-VALUED FUNCTIONS ::--::--::
Table-valued functions, bir SQL Server veritabanında oluşturulan ve bir tablo döndüren özel bir tür fonksiyondur. Bu tür fonksiyonlar, bir sorguda bir ifade olarak kullanılabilir ve sonuçlar diğer sorguların bir parçası olarak kullanılabilir.
Table-valued functions, özellikle birden fazla satır döndürmek isteyen hesaplamalar veya sorgular için kullanışlıdır. Bu tür fonksiyonlar, içsel olarak bir SELECT ifadesi içerir ve herhangi bir WHERE, GROUP BY veya ORDER BY de dahil edebilir.
Örneğin, aşağıdaki örnek, "OrderDetails" tablosundaki bir siparişin tüm ayrıntılarını içeren bir table-valued function kullanır :
CREATE FUNCTION GetOrderDetails (@OrderId int)
RETURNS TABLE
AS
RETURN
(
SELECT * FROM OrderDetails WHERE OrderId = @OrderId
)
Bu table-valued function, "OrderId" parametresi ile çağrılabilir ve sonuç olarak "OrderDetails" tablosundan "OrderId" parametresine eşleşen tüm satırları döndürür. Örneğin, aşağıdaki sorgu, "OrderId" 1 olan siparişin tüm ayrıntılarını döndürür :
SELECT * FROM dbo.GetOrderDetails(1)
--ÖRNEK 130:
create function ktpsayfa(@sayfa int)
returns table
as
return (select * from kitap where sayfa_sayisi>@sayfa)
--test
select ktp_adi from dbo.ktpsayfa(300)
::--::--:: CURSOR (imleç) Kullanımı ::--::--::
TAGS: 'sql komutları','sql örnekleri','t-sql komutları','t-sql örnekleri', 'dml komutları', 'dcl komutları','data defination language', 'data maniplation language', 'data control language', 'select örnekleri', 'sql select komutu', 'sql create komutu', 'sql alter komutu', 'sql drop komutu', 'sql insert komutu','sql update komutu', 'sql delete komutu', 'sql revoke komutu', 'sql grant komutu', 'sql deny komutu', 'sql açıklama satırı', 'sql store procedure', 'sql triggers', 'sql yordamlar', 'sql tetikleyiciler', 'sql functions', 'sql fonksiyonlar', 'sql if-else yapısı', 'sql when-then yapısı'