Temel SQL Sorguları I

Temel SQL Sorguları I

Temel SQL sorguları ile alakalı olan bu yazı dizimin ilk bölümünde Veri Tanımlama Dili (Data Definition Language), Veri Kontrol Dili (Data Control Language), SQL veri tipleri ve Constraints'lerden kısaca bahsedeceğim.

 

T-SQL İfade Tipleri 

T-SQL içerisinde 3 farklı ifade tipi bulunmaktadır.

 

Veri Tanımlama Dili (Data Definition Language) 

Veri Kontrol Dili (Data Control Language) 

Veri İşleme Dili (Data Manipulation Language)

 

Veri Tanımlama Dili (Data Definition Language - DDL)

Veri tabanında nesneler oluşturmak için gerekli olan ifadeleri sağlamaktadır. Bu ifadeler, veri tabanı veya tablo gibi yeni bir nesnenin oluşturulması, var olan nesne üzerinde değişiklikler yapılması veya nesnenin yok edilmesi için kullanılır. Üzerinde işlem yapılan nesnenin ne gibi özellikleri ve alanları olacağı bu ifadeler içerisinde belirlenir. Create, Alter ve Drop olmak üzere 3'e ayrılır.

 

Create: Veri tabanı üzerinde nesne oluşturmak ya da tanımlamak için kullanılan komuttur. Söz dizimi aşağıdaki gibidir :

Create Nesne Türü Nesnenin İsmi 

 

Örnek : Parametreleri ile bir veri tabanı oluşturmak

Create Database Universite 
On  
 (    
   Name = Universite ,
   Filename = 'C:\universite.mdf' ,
   Size = 5mb ,
   Maxsize = 10mb ,
   Filegrowth = 1mb
 )

 

Bir veritabanı oluşturulduğunda mdf ve ldf  olmak üzere iki dosya oluşturur. Mdf dosyası veritabanımızken ldf dosyası ise veritabanında yapılan işlemlerin kaydını tutan log dosyamızdır. Eğer veritabanındaki özelliklere varsayılan değerler yerine kendi değerlerimizi vermek istiyorsak on yazar ve iki parantez içerisinde parametrelerimize istediğimiz değerleri veririz. Eğer ldf dosyamızın da parametrelerini kendimiz belirtmek istiyorsak üstteki kodun hemen altına log on yazıp parantez içerisinde yukarıdaki kodda yer alan parametreleri kullanarak istediğimiz değerleri veririz.

 

Name : Veritabanımızın ismini taşır.

Filename : Veritabanımızın hangi ad ile nereye kaydedileceğini belirtiriz uzantısını mdf olarak belirtmeyi unutmamalıyız.

Size : Veritabanımızın boyutunu belirteceğimiz kısım. Bir veritabanı dosyası en az 5mb boyutunda oluşturulabilir. Daha küçük bir boyutta oluşturulamaz.

Maxsize : Veritabanının maksimum boyutunu belirteceğimiz kısım.

FileGrowth : Veritabanında yaptığımız her işlem karşılığında veritabanının ne kadar büyüyeceğini belirteceğimiz kısımdır.

 

Create Database Universite 
Go

Eğer yukarıdaki kodu yazarsak veritabanının ve log dosyasının özelliklerini belirtmediğimiz için varsayılan değerlerine göre oluşturulacaktır.

 

T-SQL’de Veri Tipleri : İlişki (Tablo) oluştururken ilişki içerisindeki her alanın hangi tipte veri taşıyabileceğini belirleyen bazı veri tipleri bulunmaktadır. T-SQL’de bulunan temel veri tiplerinden bazıları şunlardır :

 

Metinsel Veri Tipleri

char(n) : Sabit uzunluklu veri kümesi saklayan veri tipidir. Bu veri tipini kullanan bir sütunda , girilecek her veri aynı uzunlukta olmalıdır . Telefon numaraları gibi.

nchar(n) : Unicode türünden sabit boyutta veri saklar. En fazla 4000 karakter tutulabilir.

varchar(n) : Değişken uzunlukta veri saklar. En fazla 8000 karakter tutulabilir. varchar(7) şeklinde yaptığımız bir tanımlamada ‘ibrahim’ dediğimiz de 7 baytlık değer kaplar ve ‘esma’ dediğimiz de ise 4 baytlık yer kaplar.

nvarchar(n) : Unicode türünden ve değişken uzunlukta veri saklar. En fazla 4000 karakter tutulabilir.

varchar(MAX) : varchar veri tipi ile aynı özelliklere sahiptir ve 2 GB’a kadar veri tutabilmektedir.

nvarchar(MAX) : nvarchar veri tipi ile aynı özelliklere sahiptir ve 2 GB’a kadar veri tutabilmektedir.

text : ASCII türünden metin saklamak için kullanılır. 2 GB’a kadar sınırı vardır.

ntext: Unicode türünden metin saklamak için kullanılır. 2 GB’a kadar sınırı vardır.

 

Sayısal Veri Tipleri 

int : Yaklaşık -2 milyar ile +2 milyar arasındaki tamsayı değerlerini tutar.

bigint : Yaklaşık -263 ile +263 arasındaki tamsayı değerleri tutar.

smallint : Yaklaşık -32 bin ile +32 bin arasındaki tamsayı değerlerini tutar.

tinyint : 0-255 arasındaki tamsayı değerlerini tutar.

float(n) : Kayan noktalı sayı değerlerini tutar. -1.79e+308 ile 1.79E+308 arasında değer tutabilir. n, 1 ile 53 arasında değer alabilir. 1 ile 24 arasında olduğunda 7 haneye kadar hassasiyet ve 4 byte yer ayrılması söz konusudur. 25 ile 53 aralığı için ise 15 haneye kadar hassasiyet ve 8 byte yer ayrılması söz konusudur. Varsayılan olarak n değeri 53’tür.

real : -3.40e+38 ile 3.40e+38 arasında değerler alabilir. 7 haneye kadar hassasiyet sunar ve 4 byte yer kaplar. Bu veri tipi float(24)’ün karşılığıdır. Eğer 7 haneye kadar hassasiyet gerekiyorsa real tipi varsayılan float tipi yerine tercih edilebilir.

money : Yaklaşık -922 milyar ile +922 milyar arasındaki değerleri tutar. Bu tip genelde parasal değerlerin tutulacağı alanlarda kullanılır.

 

Tarihsel Veri Tipleri

datetime : 01.01.1753 ile 31.12.9999 arasındaki tarih ve zaman bilgisini tutar.

smalldatetime: 01.01.1900 ile 06.06.2079 arasındaki tarih ve zaman bilgisini tutar.

date: 01.01.0001 ile 31.12.9999 arasındaki tarih bilgisini tutar.                                                                                                                                                                                        

time : 00:00:00.0000000 ile 23:59:59.9999999 arasındaki zaman bilgisini tutar.

 

Diğer Veri Tipleri 

bit : Boolean değerler tutmak için kullanılan veri tipidir. Sadece 1 veya 0 değerlerini alabilir. 1 True, 0 False değerlerini temsil eder.

image : Resim dosyalarının veri tabanında tutulması için kullanılan veri tipidir. 2 GB’a kadar resim dosyası tutabilmektedir.

xml : XML dosyalarını ve XML kodlarını saklayabilen veri tipidir. 2 GB’a kadar veri taşıyabilir.

binary(n) : Sabit uzunluktaki binary veriyi tutmak için kullanılır. Maksimum uzunluğu 8000 byte’ tır. Varsayılan uzunluğu ise 1 byte’ tır.

varbinary(n) : Değişken uzunlukta binary veriyi tutmak için kullanılır. Maksimum uzunluğu 8000 byte’ tır. Varsayılan uzunluğu ise 1 byte’ tır.

varbinary(MAX) : Maksimum 2 GB binary veriyi tutabilen veri tipidir.

 

Örnek : İlişki oluşturmak

Create Table Bolum 
( 

// BolumID int tipinden veri alır, birden başlar, birer birer otomatik olarak artar ve boş geçilemezdir. 

BolumID int IDENTITY (1, 1) Not Null,

// BolumAd nvarchar tipinden en fazla 20 karakterlik veri alır ve alanına değer atanmaması durumunda Null yerine ' ' (boşluk) atanır.

BolumAd nvarchar (20) Default(’’),

Tarih smalldatetime Null

)

 

Alter : Varolan bir nesne üzerinde değişiklikler yapmak için kullanılır. Create komutunda olduğu gibi değiştireceğiniz nesneye göre farklı parametreler alabilmektedir.

 

Örnek

Bir nitelik (kolon) üzerinde değişiklik yapmak istediğimizde

Alter Table Ogrenci 
Alter Column AdSoyad nvarchar(30) Not Null 

 

Örnek

Bir nitelik eklemek istediğimizde

Alter Table Ogrenci 
Add Ogrno int      

 

Örnek

Bir nitelik silmek istediğimizde

Alter Table Ogrenci
Drop Column Ogrenci

 

Drop: Veri tabanındaki herhangi bir nesneyi silmek için kullanılır.

 

Genel kullanımı

Drop Nesne Tipi Nesne Adı

 

Örnek

Drop Database Universite

 

Veri Kontrol Dili (Data Control Language - DCL) 

T-SQL’de veri kontrol ifadeleri veri tabanı üzerindeki kullanıcılara ve rollere yetki vermek için kullanılmaktadır. T-SQL’de 3 adet veri kontrol komutu bulunmaktadır. Bu komutlar şunlardır:  

 

GRANT : Kullanıcıya veritabanına erişebilmesini veya T-SQL ifadeleri çalıştırabilmesini sağlayacak yetkileri verir.

 

Örnek

Grant {All veya izinler} // İzinlerden kastı create table,update vs.
To {hesaplar} // Hangi kullanıcılara.

 

DENY : Kullanıcının belirli bir alana erişimini engellemek veya belirli T-SQL ifadelerini çalıştıramamasını sağlamak amacıyla kullanılır.

 

Örnek

Deny { All veya izinler} To {kullanıcılar}  

 

REVOKE : Daha önceden GRANT veya DENY ile verilmiş yetki veya engelleri kaldırmak için kullanılır.

 

Örnek

Revoke {All veya izinler} {To veya From} {hesaplar}

 

Veri kontrol ifadelerini çalıştırabilmek için veri tabanına bağlı olan kullanıcının sysadmin, dbcreator, db_owner veya db_securityadmin rollerinden birine sahip olması gerekmektedir.

Ayrıca sunucuya dışarıdan bir erişim sağlamak için bir giriş (login) oluşturulmalıdır.

 

Örnek

Create Login Taner1 With Password =’123456’

Bu rol ile veri tabanına bir kullanıcı olarak erişim için örnek olarak aşağıdaki satırlar yazılmalıdır

Create User Taner
For Login Taner1 // Eğer User adı ile Login adı aynı ise For Login satırına gerek kalmaz.

 

Anahtarlar (Keys) : Bir kayıt içerisindeki farklılıkları ve nitelikleri gösteren belirleyicilerdir.

Bir ilişki içerisinde bulunabilecek anahtarlar sunlardir :

 

Birincil anahtar (Primary key - PK)

Tekil anahtar (Unique key - UK)

Referans anahtar (Foreign key - FK)

Birleşik anahtar (Composite key – CK)

 

Birincil anahtar (Primary key - PK) : İlişki içerisindeki satırları birbirinden ayırt eder. Birincil anahtar olan bir nitelik (sütun) aynı ilişki içerisinde tekrarlanamaz. Aynı zamanda NULL değeri de alamaz.

 

Tekil anahtar (Unique key - UK) : Birincil anahtardan ayrılan tek farkı null değeri alabilmesidir.

 

Referans anahtar (Foreign key - FK) : İlişkide bulunan veri başka bir ilişki içerisindeki veri ile ilişkilendirilir. İki ilişki arasında yapılan bu ilişkilendirme ile referans anahtar olarak tanımlanmış alana sadece ilişkilendirdiği ilişkinin alanındaki veriler eklenebilir.

 

Birleşik anahtar (Composite key – CK) : Birden fazla alanın birleştirilmesiyle birincil anahtar görevini üstlenecek tanımlamalar yapılabilir. Bunlar birleşik anahtar olarak adlandırılır.

 

Örnek : İlişki oluşturma aşamasında anahtarların kullanımı

Create Table Kitap
(
id int,
barkod_no int,
ad varchar(24),
// id'yi Birincil Anahtar yaptık
Constraint pk_kod Primary Key (id),
// barkod_no'yu Referans Anahtar yaptık. Bilgiler ilişkisindeki id niteliği ile ilişkilendirdik
Constraints fk_num Foreign Key (barkod_no) References bilgiler(id)
// Check Constraint diyoruz buna bu örnekte ad niteliğine aktarılan değerlerin 24 karakter olup olmadığını kontrol eder
Constraints ck_ad Check (ad < 24),
)

 

Örnek : Önceden oluşturulmuş bir ilişkiye anahtar veya anahtarlar eklemek

Alter Table Kitap
Add Constraint pk_kod Primary Key(id), 
Add Constraint chck_ad Check (ad < 20),
Add Constraint fk_num Foreign Key (barkod_no) References bilgiler(id),
Add Constraint def_ad Default 'Bilinmiyor' For ad

 

Makalemin ikinci bölümünde Veri İşleme Dili (Data Manipulation Language) kısmından devam edeceğim.