Useful shortcuts for vi editor

Showing posts with label t-sql. Show all posts
Showing posts with label t-sql. Show all posts

Tuesday 10 May 2011

Tablo içi verilerden kurtulma

Tablolarımızdan tamamen kurtulmak yerine (DROP) tablonun içindeki verilerden kurtulmak isteyebiliriz. Bunun için TRUNCATE sql komutunu kullanabiliriz.

Kullanımı gayet basittir.

TRUNCATE komutunu çalıştırmadan önce tabloda var olan yabancıl anahtarların (foreign keys) silinmesi gerekmektedir.

TRUNCATE TABLE [tablo_ismi]

Örneğin örnek veritabanımızdan Öğrenciler tablosunun içindeki verileri silmek isteyelim.

TRUNCATE TABLE [Ogrenciler]

Herkese iyi çalışmalar. J

Sunday 8 May 2011

T-SQL’de Constraint Konusu (Kısıtlar)

T-SQL Constraint konusunu inceleyemeye çalışacağız.

Kısıtlar çeşitlerine göre 5 başlıkta incelenmektedir. Bunlar;
  • NOT NULL
  • DEFAULT
  • UNIQUE
  • CHECK
  • PRIMARY AND FOREIGN KEY

Sırayla bu ifadeler nasıl kullanılıyor aşağıdaki tablo yardımıyla bakalım.

CREATE TABLE Sinavlar
(
SinavID int NOT NULL UNIQUE,
FK_OgrenciID int REFERENCES Ogrenciler (OgrenciID) NOT NULL,
FK_DersID int REFERENCES Ders(DersID) NOT NULL,
Notu int NOT NULL CHECK (Notu =>0 AND Notu <=100),
Tarih date DEFAULT GETDATE()
)

NOT NULL:

Tablo içindeki istenilen verilerin boş kalmasını engellemek için kullanılan bir kısıttır.

  • Sınavlar tablosunda SinavID ve Notu sütunlarının değerinin boş kalmaması istendi.

Tablo oluşturduktan sonra da kısıtlarımızı yazabiliriz;

ALTER TABLE Sinavlar
ALTER COLUMN Notu int NOT NULL

DEFAULT:

Tablo içindeki istenilen verilere herhangi bir değer atanmamışsa otomatik olarak bir değer yazılması anlamı taşıyan bir kısıttır.

  • Sınavlar tablosunda Tarih sütununun değeri, eğer bir değer atanmazsa o anda tabloya girilen kayıt (insert işlemi) anındaki tarih bilgisi olması istendi.

Tablo sonrası kısıt yazımı;

ALTER TABLE Sinavlar
ALTER COLUMN Tarih SET DEFAULT GETDATE()

İlgili kısıdı tablodan kaldırmak için;

ALTER TABLE Sinavlar
ALTER COLUMN Tarih DROP DEFAULT

UNIQUE:

Tablo içindeki istenilen verilerin diğer verilerden farklı olmasını sağlayan bir kısıttır.

  • Sınavlar tablosunda SinavID sütununun değeri, benzersiz (unique) olması sağlandı.

Tablo sonrası kısıt yazımı;

ALTER TABLE Sinavlar
ADD CONSTRAINT uq_SinavID UNIQUE (SinavID)

İlgili kısıdı tablodan kaldırmak için;

ALTER TABLE Sinavlar
DROP CONSTRAINT uq_SinavID

CHECK:

Tablo içindeki istenilen verilerin belirli bir kural aralığında olmasını sağlayan bir kısıttır.

  • Sınavlar tablosunda Notu sütunun değeri 0 ila 100 arasında olması sağlandı.

Tablo sonrası kısıt yazımı;

ALTER TABLE Sinavlar
ADD CONSTRAINT chk_Not CHECK (Notu=>0 AND Notu=<=100)

İlgili kısıdı tablodan kaldırmak için;

ALTER TABLE Sinavlar
DROP CONSTRAINT uq_chk_Not

PRIMARY KEY:

Tablo içindeki her bir kaydın farklılığını gösteren, her bir satıra bir kimlik kazandıran bir anahtardır. Her bir tablo için en fazla bir adet primary key (birincil anahtar) tanımlanabilir ve birincil anahtar sütunu boş değer (null) alamaz. Unique ile primary key yaptıkları aynıdır. Primary key tanımlandığında otomatik olarak unique kısıdı tabloya eklenir. Ayrıca unique kısıdı birincil anahtardan farklı olarak istenilen sayıda bir tabloda tanımlanabilir.

Tablo sonrası kısıt yazımı;

ALTER TABLE Sinavlar
ADD CONSTRAINT pk_SinavID PRIMARY KEY (SinavID)

İlgili kısıdı tablodan kaldırmak için;

ALTER TABLE Sinavlar
DROP CONSTRAINT pk_SinavID

FOREIGN KEY:

Tabloları birbirine bağlamak için kullanılan bir anahtardır. Türkçe olarak İkincil veya yabancı anahtar denilebilir.

  • Sınavlar tablosunda FK_OgrenciID ve FK_DersID sütununları Ogrenciler ve Ders tablolarındaki birincil anahtarlar ile eşleşmektedir.

Tablo sonrası kısıt yazımı;

ALTER TABLE Sinavlar
ADD CONSTRAINT fk_OgrenciID FOREIGN KEY (FK_OgrenciID)
REFERENCES Ogrenciler(OgrenciID)

İlgili kısıdı tablodan kaldırmak için;

ALTER TABLE Sinavlar
DROP CONSTRAINT fk_OgrenciID

Herkese iyi çalışmalar. J

Friday 29 April 2011

T-SQL’de köşeli parantez kullanımı

T-SQL veritabanına yeni tablo eklerken tablo isminde iki veya daha fazla kelimelik ise bunun birleştirilmesi veya aralarına bir karakter(nokta, alt, üst çizgi, vb.) konulması sorgu sırasında karışıklık çıkmaması adına istenir. İlla tablo ismim aralarında boşluk olsun derseniz üzülmeyin köşeli parantez size yardım edecektir. J

Örnek olarak veri tabanımızdaki tablolunun ismi Calisanlar Iletisim olsun ve bu tabloda olan çalışanların ad ve soyadlarını tek sütunda gösterelim. Yazacağımız T-SQL kodlar aşağıdaki gibidir;

--köşeli parantez kullanımı
SELECT Ad + ' ' + Soyad AS [Ad ve Soyadı]
FROM [Calisanlar Iletisim]

Not:
Köşeli parantez, veritabanı, saklı yordam, tetikleyiciler, vb. tanımlanırken veya sorgu sonucunda sütun isminin gösteriminde de kullanılabilir.

İyi çalışmalar. J

Sunday 24 April 2011

T-SQL’de Karakter Dizileri İncelemesi

T-SQL iki çeşit karakter dizisi vardır; bunlar character strings ve unicode character strings olarak geçer.

Character Strings üç başlıkta toplanır; bunlar char, varchar ve text gibidir.

Unicode Strings de üç başlıkta toplanır; bunlar nchar, nvarchar ve ntext gibidir.

Görüldüğü üzere Unicode da yalnızca başına n harfi eklenmiştir. Aralarındaki tek fark böyle ifade edilmektedir. Unicode kavramını daha önceki yazılarımızda belirtmiştik. Tekrar üzerinden geçmek gerekirse, kısaca bize daha fazla karakter/harf desteği sağlamaktadır.
Sırayla bunların ne olduğuna bakalım.

Character strings;

Char:

Tanımı: Sabit uzunlukta karakter dizisi
Tanımlandırılması: char (n) (n = karakter sayısı)
Bellekteki Kapladığı Alan: n kadar byte yani her bir karakter veri tipi 1 byte (n= 1 ila 8000 byte arasında yer kaplar.)
Bellekte Alabileceği En Fazla Yer: 8000 byte yer kaplar.

Varchar:

Tanımı: Değişken uzunlukta karakter dizisi
Tanımlandırılması: varchar (n | max) (n = karakter sayısı)
Bellekteki Kapladığı Alan: n kadar byte + fazladan 2 byte (n = 1+ (+2) ila 8000 byte arasında yer kaplar.)
Bellekte Alabileceği En Fazla Yer: varchar (max), Yaklaşık 1 gigabyte eş değer 1073741824 karakter kadar.

Text:

Tanımı: Sabit uzunlukta karakter dizisi ve servis sayfa kodlamalarında kullanılıyor. Microsoft ileride ntext ve image tipleri gibi bu tipi de tuşlamak istiyor. J
Tanımlandırılması: text (n) (n = karakter sayısı)
Bellekteki Kapladığı Alan: n kadar byte (n = 1 ila 8000 byte arasında yer kaplar.)
Bellekte Alabileceği En Fazla Yer: 8000 byte

Unicode strings;

Nchar:

Tanımı: Sabit uzunlukta Unicode karakter dizisi
Tanımlandırılması: nchar (n) (n = karakter sayısı)
Bellekteki Kapladığı Alan: n kadar byte yani her bir karakter veri tipi 1 byte (n = 1 ila 4000 byte arasında yer kaplar.)
Bellekte Alabileceği En Fazla Yer: 4000 byte yer kaplar.

NVarchar:

Tanımı: Değişken uzunlukta Unicode karakter dizisi
Tanımlandırılması: nvarchar (n | max) (n = karakter sayısı)
Bellekteki Kapladığı Alan: n * 2 kadar byte + fazladan 2 byte (n = 1 (*2) + (+2) ila 4000 byte arasında yer kaplar.)
Bellekteki Alabileceği En Fazla Yer: nvarchar(max), Yaklaşık yarım gigabyte’a eş değer 536870912 karakter kadar.

NText:

Tanımı: Sabit uzunlukta karakter dizisi ve servis sayfa kodlamalarında kullanılıyor. Microsoft ileride text ve image tipleri gibi bu tipi de tuşlamak istiyor. J
Tanımlandırılması:  ntext (n) (n = karakter sayısı)
Bellekteki Kapladığı Alan: n * 2 kadar byte (n = 1 (*2) ila 4000 byte arasında yer kaplar.)
Bellekteki Alabileceği En Fazla Yer: 4000 byte arasında yer kaplar.

Herkese iyi çalışmalar. J

Tuesday 12 April 2011

T-SQL’de Veritabanı Oluşturma ve Silme İşlemleri

T-SQL’de veritabanı oluşturma ve silme işlemleri nasıl yapacağız bunu öğreneceğiz.

Oluşturmak istediğimiz veritabanın ismi ornek_vt olsun.

-- master hem kullanıcı hem de Adaptive Server işlerini kontrol etmekte
USE
master
GO
-- daha önce oluşturulmuşsa
IF  EXISTS (
   SELECT name
       FROM sys.databases
       WHERE name = N'ornek_vt'
)
-- veritabanı sil
DROP DATABASE ornek_vt
GO
-- yeni veritabanı oluştur
CREATE DATABASE ornek_vt
GO

Ornek_vt isimli veri tabanımızı silmek isteyelim.

-- master hem kullanıcı hem de Adaptive Server işlerini kontrol etmekte
USE
master
GO
-- daha önce oluşturulmuşsa
IF  EXISTS (
   SELECT name
       FROM sys.databases
       WHERE name = N'ornek_vt'
)
-- veritabanı sil
DROP DATABASE ornek_vt
GO

Yorum satırlarına ek yapmak gerekirse; sistem yöneticisi (system admin.) olarak veri tabanı oluşturmak için mutlaka master veri tabanı kullanmak gerekir. Veri tabanı aramada ‘N’ önek (prefix) açılımı National Language Character Set olarak geçmektedir yani Unicode karakterler barındırdığını belirtir.

Bu yazımızda T-SQL kodlarıyla nasıl veritabanı oluşturulacağını ve nasıl silineceğini gördük. 

Tekrar görüşmek üzere sağlıcakla kalın. J

Saturday 2 April 2011

T-SQL’de decimal/numeric ve float veri tipleri karşılaştırması

T-SQL sıkça kullanılan decimal, numeric ve float veri tiplerini biraz tokuşturmak istiyorum. J

Öncelikle şunu belirtelim decimal ile numeric arasında hiçbir fark yok yalnızca ismi farklıdır. J

Float ile decimal/numeric arasında şöyle bir fark bulunmakta; decimal/numeric veri tipleri tanımlandığı noktadan sonraki basamak değerine (scale) göre tam sonucunu verir. Decimal tipinde örneğin; decimal (5,2) ile decimal (5,4) tanımları birbirinden farklıdır. Float tipinde bu ayrım yapılamamaktadır (scale tanımı yok.). Decimal/Numeric tipindeki bir değeri float tipine çevirdiğimizde doğal olarak veri kaybı yaşayabiliriz.

Bu veri kaybının istenmeyen alanlarından biri de, para ile ilgili yaşanan hesaplamalar olabilir. O yüzden veri tabanında veri tiplerini oluştururken para için decimal, money veya smallmoney tipleri kullanılması önerilir. Bunun sebebi daha önce bahsettiğimiz noktadan sonraki basamak konusudur.

Aşağıdaki ekran görüntüsünden anlaşılacağı gibi; float tipi, money tipine göre noktadan sonra basamak destek vermediği için kitap fiyatı money tipine çevrilirken noktadan sonra 
2.basamakta olan 5 sayısı, 6’ya yuvarlanmıştır.


Konuyla ilgili burayı inceleyebilirsiniz.

Sağlıcakla kalın. J

Saturday 26 March 2011

T-SQL’de veritabanı ismini değiştirme


T-SQL kodlarıyla daha önce var olan veritabanın ismini değiştirebiliriz. Bunun için T-SQL sağladığı sp_renamedb saklı yordamı (stored procedure) kullanabiliriz.

Örnek olarak daha önce oluşturduğumuz veritabanın ismi eski_vt olsun ve bu veritabanın ismini yeni_vt olarak değiştirmek istediğimizi varsayalım. Bunun için şu kodları sorgu ekranında yazmamız yeterli olacaktır.

/*Veritabanı ismi değiştirme*/
EXEC sp_renamedb 'eski_vt' , 'yeni_vt'
GO