Yapılandırılmış sorgulama dili
SQL(Structured Query Language). Bilgisayarda tutulan verilerin kontrol
edilmesi, erişilmesi, kullanılması vb işlemlerin gerçekleşmesi için zaman
içinde standartlarının oluşturulduğu veritabanı sorgulama dili. Veritabanı
mantığı olmadan önce veriler çok farklı şekillerde dosyalarda tutuluyordu.
Dosyalarda tutulmasının avantajları olduğu gibi dezavantajları da vardı.
Özellikle:
-Verilerin tutarsızlığı ve
tekrarlanmasının önlenememesi
-Veriye erişme ve veriyi
paylaştırmada yaşanan güçlükler
-Veriyi saklama , yedeklemede
yaşanan zorluklar ve güvenliğinin tam olarak
sağlanamaması
Veritabanının
avantajları
-Verilerin merkezi denemetimde
tutulabilmesi
-Veri tutarlılığı ve veri
tekrarının minimum orana indilmesi
-Veriye erişimde kolaylık
sağlaması
-Veri depolama, saklama ve
yedeklemenin kolaylıkla yapılabilmesi
-Verinin güvenli bir
şekilde paylaşılabilmesi
-Standarlarının olması
-Tasarımın çok kolay olması .
SQL ’in kullanıcılar arasında
rağbet görmesiyle pazar payında yeri artı. Bundan dolayı firmalar
kullanıcının sql’i daha rahat kullanabilmesi için var olan standart
SQL ’e kendilerine göre standart olmayan fonksiyon ve özellikler
eklediler. Ve bir nevi kendi sql araçlarını oluşturdular. Örneğin Oracle
PL-SQL, Ms SQL Server T-SQL , Borlanda InterBase ... Projenizdeki sql
cümlelerinin bütün veritabanlarında çalışmasını istiyorsanız daha yalın olan
ANSII SQL ’ i kullanmalısınız.Bu makalede kullanılacak bütün sql cümleleri
Microsof SQL Server ’da kullanacak ve daha çok
Transact SQL üzerine yoğunlaşacağız. Makalede Transact
SQL’i t-sql olarak kullanacağım.
SQL komutları işlevlerini göre
gruplandırırsak:
DDL (Data Definition
Language) Veri tanımlama komutları
DML (Data Manuplation
Language) Veri düzenleme komutları
-
Select
-
Insert
-
Update
-
Delete
DCL (Data Control Language) Veri
kontrol komutları
Create Database : Veritabanı
oluşturmak için kullanılır.
FileName : Oluşturulacak veritabanı
dosyasının kaydedileceği yer ve yolu. Size
: Veritabanı dosyasının
boyutu. MaxSize : Dosyanın maksimum alacağı
değer. FileGrowth : Dosyasnın artma boyutu .
CREATE DATABASE Veritabanı_Adi [ ON <FILENAME> , <SIZE>,
<MAXSIZE>,
<FILEGROWTH>] [ LOG <FILENAME>, <SIZE>,
<MAXSIZE>,
<FILEGROWTH > ]
Örnek: Yeni bir veritabanı ve onun
log dosyasının yaratılması.
CREATE DATABASE cSharpNedir
ON (
NAME = cSharpNedir_dat,
FILENAME = ’f:\program files\microsoft sql
server\mssql\data\cSharpNedirdat.mdf’,
SIZE =
10MB,
MAXSIZE = 50MB,
FILEGROWTH = 5MB )
LOG ON (
NAME = ’cSharpNedir_log’,
FILENAME = ’f:\program files\microsoft sql
server\mssql\data\cSharpNedirLog.ldf’,
SIZE = 5MB, MAXSIZE = 25MB,
FILEGROWTH = 5MB )
|
Kod 1- Create
database
Create Table :
Veritabanı üzerinde tablo oluşturma ve tablo ile ilgili özelliklerinin
tanımlanması için kullanılır.
CREATE TABLE Tablo_Adi (
Alan_Isimleri Veri_Tipleri [Default
ifade] [Alan Kısıtlaması]
[Tablo_Kısıtlamalar ]
)
Alan Ismi : Oluşturulacak kolona
verilecek isim .
Veri_Tipler : Oluşturduğumuz
alanın veri tipi char, varchar, nvarchar, integer, decimal,
double, datetime, text , vb. Bazı veri tipleri veritabanından
veritabanına değişmektedir. Eğer veri karakter ise char ,
varchar(karakter uzunluğu) vb, çok uzun karakterler için text , sayı ise
int , küsuratlı sayı ise decimal yada double , tarih alanı için
datetime gibi tipler kullanabilirsiniz.
Alan Kısıtlaması : İlgili
alanın boş geçilip geçilemeyeceği durumu. NULL boş geçilebilir, NOT NULL boş
geçilemez ilgili alana kayıt girmek zorundasınız.
Tablo_Kısıtlamaları : Tabloda yapacağımız
kısıtlamalardır. Primary Key, Foreing Key, Check
lerdir.
Örnek : Departman isimli bir tablonun oluşturulması.
Bu örnekte dikkat edilecek kısımlar : Bir alanın
otomatik olarak artmasını istiyorsak ilgili alan tanımlanırken alan
kısıtlamasına IDENTITY (Başlangıç değeri , Kaçar kaçar artacağı)
ifadesinin eklenmesi gerek. Diğer bir husus alana ilk değer verme;
DEFAULT () ifadesi ile alana ilk değer verilir.Eğer ilgli alan boş
geçilirse yani değer atanmazsa ilk değeri atanacaktır.
CREATE TABLE Departman
( DepartmanID int IDENTITY (1, 1) NOT NULL
, //DepartmanId birden başlayıp birer birer
otomatik olarak artacaktır.
DAdi nvarchar (20) DEFAULT(’’)
,
//DAdi alanına değer atanmaması durumunda NULL değeri
yerine ’’ (boşluk) atanması
KurulusTarihi smalldatetime NULL
, //smalldatetime t-sql
özgu bir veri titpidir.Standarı DateTime
CONSTRAINT PK_Departman PRIMARY KEY CLUSTERED (
DepartmanID ) //İlgili primary key tanımı
)
|
Kod 2- En yalın
bicimde create tablo ifadesi
Örnek: Tabloda çeşitli kısıtlamalar (Constrains)
oluştururulması. Ve iki tablo arasında ikincil anahtarlar(foreing key)
tanımlaması.
Bu örnekte dikkat edilecek kısımlar : Tekrarlanması
istenmeyen alanların tekil (unique) tanımlanması. Bir alana belli değerler
dışında değer girilmesi istenmiyorsa kısıtlama CHECK (Alan=’Deger1’ ,
Alan=’Deger2’, ...,Alana=2Deger2’) olarak tanımlanmalıdır.
CREATE TABLE Personel (
PersonelId int NOT NULL ,
TCKimlikNo char (11) NOT NULL ,
Adi varchar (30) NOT NULL ,
Soyadi varchar (50) NOT NULL ,
Maas decimal(18, 2) NOT NULL
DEFAULT (0), // Bu alana değer atanmaması durumunda ilk değer
verme ile 0 değerini atanmış oldu
PDepartmanId int NOT NULL ,
Cinsiyet char (1) NULL ,
CONSTRAINT PK_Personel PRIMARY KEY
CLUSTERED(PersonelId), //Primary Key tanımı
CONSTRAINT IX_Personel UNIQUE
CLUSTERED ( TCKimlikNo ) , //TC Kimlik numarasını
istemiyoruz.
CONSTRAINT FK_Personel_Departman FOREIGN KEY
(PDepartmanId) REFERENCES Departman (DepartmanID), //Başka
bir tablodaki bir alanı referans vererek ikincil anahtar (foreing
key) tanımlama
CONSTRAINT CK_Personel CHECK
(Cinsiyet = ’K’ or Cinsiyet = ’E’) //Cinsiyet alanına
’E’ ve ’K’ değerleri dışında değer atanmaması
)
|
Kod 3- Tabloda
kısıtlamaların tanımlanması ve iki tablo arasında ilişki kurulması
Örnek : Personel tablosundaki bir personele ait mal
bilgilerinin tutulacağı bir tablo oluşturalım.
Bu örnekte dikkat edilecek kısımlar : Personel
tablosunda bir personelin silinmesi durumunda PersonelMal tablosunda o
personele ait bilgilerin silinmesi için uygun ikincil anahtar (foreing
key) tanımlayalım. Bunlar
ON DELETE CASCADE : Referans edilen
tablodaki kayıt yada kayıtların silinmesi durumunda referans alan tabloda
ilişkili kayıtların da silinmesi .
ON UPDATE CASCADE : Referans edilen tablodaki kayıt yada kayıtların
guncellenmesi durumunda referans alan tabloda ilişkili kayıtların da
güncellenmesi.
CREATE TABLE PersonelMal (
MalId int NOT NULL ,
PPersonelId int NOT NULL ,
Adi nvarchar (50) NOT NULL ,
Bedeli decimal(18, 2) NOT NULL ,
CONSTRAINT PK_PersonelMal PRIMARY KEY CLUSTERED
(MalIdMalId, PPersonelId ), // Birincil anahtarı (Primaty
key) tanımlarken sadece tek alan olması gerekmez.Bu iki veya daha fazla alanda
olabilir.
CONSTRAINT FK_PersonelMal_Personel FOREIGN
KEY(PPersonelId) REFERENCES Personel (PersonelId) ON DELETE
CASCADE //Personel tablosundaki ilgili
kayıt silinmesi durumunda ona ait kayıtıların da silinmesi için gerekli
tanımlama.
)
|
Kod 4- Master
detay tablolarda iki tablo arasındaki foreing key in on delete cascade olarak
tanımlanması.
Oluşturduğumuz tabloların MS SQL
Server Enterprice Menegerda diyagramların görüntüsü.
Create View(Görünüm) :Fiziksel
olarak olmayan fakat çeşitli sorgular sonucunda elde edilen
verilerin sanal bir tablo olarak gösterilmesini sağlayan yapılar. Bu
yapıların avantajı; veriye erişimi daha rahat kılmak ve kullanıcının asıl
tablolarda değişiklik yapmasını engellemek.
CREATE VIEW View_Adi AS
Sorgu Cümlesi [View_Kısıtlaması]
View_Adı : View yapısına vereceğimiz
isim
Sorgu_Cümlesi : View oluştururken
kullanacağımız sorgu cümlesi
View_Kısıtlaması :View işleminde hata
oluşması durumundaki davranış şekilleri .Bunlar [WITH CHECK OPTION
CONSTRAINT] view yapısında hata olmasını engeller bir diğeri [WITH READ ONLY]
View yapısınde sadece okuma yapılabileceğini belirtir. Bunun dışındaki
durumlarda hata vermesini sağlar.
Örnek: Belli bir departmanda maaşı
1200 den küçük olan personelin maaşını 25 ile toplayıp yeni bir maaş hesaplayan
bir view oluşturma. Burda kullanmış olduğumuz select ve inner join
terimlerini daha sonra ayrıntılı olarak inceleyeceğiz.
CREATE VIEW YeniMaas AS
SELECT TCKimlikNo, Adi, Soyadi,
(Maas + 25) as Y_Maas //as Yardımcı terimi ile (Maas+
25) de oluşacak sonuca yeni isim veriyoruz
FROM Personel
INNER JOIN Departman ON
DepartmanId = PDepartmanId // Departman ve Personel
tabloları arasındaki birleştirme işlemi
WHERE Maas < 1200 AND PDepartmanId= 1
WITH CHECK OPTION CONSTRAINT ck_YeniMaas
// View de hata olmasını engelleyen ilgili kısıtlama
|
Kod 5- Create View
Create Index :
Tabloda bulunan belirli sutunlardaki değerlere hızlı erişim
için kullanılan sıralama tekniği .Ayrıca indexin tekil (unique) özelliği
verilerek sutundaki verinin tekrarlanmasını önler.
Örneğin birincil anahtarlar (primary key) da
aslında bir indextirler. Tanımlama işlemi yapılırken otomatik olarak
indexlenirler.
CREATE INDEX Index_Adi ON
Tablo_Adi(Alanlar)
Tablo_Adi : Indexi tanımlayacağımız
tablo adı.
Alanlar : İlgili tablodaki
indexleyeceğimiz alan isimleri
CREATE INDEX Ix_Personel_AdSoyad ON Personle(Adi,
Soyadi); // Indek oluştururur. Erişimde kolaylık sağlar.
CREATE INDEX Ix_Personel_TCKimlik ON PERSONLE
(TCKimlikNo ) UNIQUE // Unique .İlgili alanın tekrarlanmasını
önler
|
Şekil
6- Create Index.
Bu makalemizde create komutunun genel
kullanımına örnekler verdik. Bir sonraki makalemizde Alter ifadesini
inceleyeceğiz.
Makale:
SQL Diline Giriş ve Create Komutu ADO.NET ve SQL Feryat Olcay
|