Merhabalar, bu yazı hazırlayacağım üç kısımlık postgreSQL’ de Database Dizaynı ve temel SQL kılavuzunun ikinci kısmıdır.
Bu yazıda ele alınacak başlıklar şu şekildedir:
1-) Veri Tipleri.
2-) Tablo Oluşturma.
3-) Tablo Silme.
4-)Tablolarla Çalışmak, Temel SQL Sorguları.
1-) Veri Tipleri
a) String Alanlar İçin
- CHAR(n): Tutacağınız string değer kaç karakterden oluşursa oluşsun bellekte sabit bir yer kaplar. Yani sakladığınız verinin büyüklüğüne göre değişkenlik göstermez. O yüzden char, sabit uzunlukta veri tipi olarak bilinir. Sürekli benzer veya aynı verilerle çalışıyorsanız char kullanmanız tavsiye edilir böylece database daha hızlı işlem yapabilir. Örnek olarak T.C kimlik numaraları hep 11 karakterden oluştuğu için char kullanmanız daha verimli olacaktır. Aynı şekilde cinsiyeti E/K şeklinde tuttuğunuz durumlarda da char kullanabilirsiniz.
- VARCHAR(n): Varchar, bellekte sakladığınız veri türünün büyüklüğüne göre yer kaplamaktadır. Eğer tutacağınız alan değişken ise varchar kullanmanız performans açısından uygun olacaktır. Adları, adresleri, açıklamaları vb. verileri saklarken varchar kullanabiliriz.
b) Text Alanları İçin
- Text: Genellikle büyük ölçekli metinler için kullanılır. Önemli kısım şudur ki: Türü text olan bir değerde sıralama ve indexleme yapamazsınız. Yani bu değerler için ORDER BY ve WHERE koşulları çalışmaz.
c) Integer Alanları için
- SMALLINT(-32768, +32768)
- INTEGER(2 milyon): Çoğu durum için integer veri tipi kullanılır.
- BIGINT(10**18 ish)
d) Float Alanlar için
- REAL(32-bit): 7 basamaklı hassasiyete sahiptir. Genellikle yaklaşık değerlerin bize yettiği durumlarda kullanılır.
- DOUBLE PRECISION(64-bit): 14 basamaklı hassasiyete sahiptir. Doğruluk değerinin olabildiğince gerçeğe yakın olmasını istediğimiz durumlarda kullanırız. Örnek: hava sıcaklığı ortalaması.
- NUMERIC: Genellikle para, ücret gibi özellikleri betimlemek için kullanılır. Kaç basamak ile işlem yapması gerektiğini belirleyebileceğimiz bir türdür.
e) Tarih Alanları İçin
- TIMESTAMP(YYYY-MM-DD HH:MM:SS): Tarih ve saati belirtir.
- DATE(YYYY-MM-DD): Tarihi tutar.
- TIME(HH:MM:SS): Saati tutar.
2-) Tablo Oluşturma
- İsmi users olan ve 3 adet özelliği/kolonu bulunan bir tablo.
- id özelliği SERIAL türünden olduğu için her kayıt eklendiğinde otomatik artacaktır.
- email özelliğinde bulunan UNIQUE anahtar kelimesi sayesinde aynı emaile sahip 2 kullanıcı bulunamayacak.
- id özelliği primary key olarak ayarlanmıştır.
3-) Tablo Silme
- users adındaki tablo silinmiştir.
4-)Tablolarla Çalışmak, Temel SQL Sorguları
a) Ekleme(Insert) İşlemi
- INSERT INTO [tablo_ismi] (kolon_ismi) VALUES (degerler);
- Bu operasyon ile tablomuza veri girişi yapıyoruz.
- İlk ekleme işlemini ele alırsak:
- users tablosunda bulunan name özelliğine Chuck, email özelliğine csev@umich.edu eklenmiştir.
- Böylelikle users tablosunda ismi Chuck email adresi de csev@umich.edu olan bir nesne yaratılmıştır.
b) Silme(Delete) İşlemi
- DELETE FROM [tablo_ismi] WHERE [şart];
- users tablosunda emaili ted@umich.edu olan tüm kayıtlar silinmiştir.
Dikkat edilmesi gereken nokta şu ki: eğer WHERE koşulunu yazmazsak tabloda bulunan tüm kayıtlar silinir.
c) Güncelleme(Update) İşlemi
- UPDATE [tablo_ismi] SET [degerler] WHERE [şart];
- users tablosunda emaili csev@umich.edu adresine eşit olan tüm kayıtların name değeri Charles olarak değiştirilmiştir.
Yine unutulmaması gereken nokta: Eğer WHERE koşulunu yazmazsak tabloda bulunan tüm nesnelerin name değeri Charles olarak güncellenir.
d) Seçme(Select) İşlemi
- SELECT * FROM [tablo_ismi] WHERE [koşul];
- Tabloda bulunan nesneleri yani satırları listelememizi sağlar.
- İlk sorgu users tablosunda bulunan tüm nesneleri listeler.
- İkinci sorgu users tablosunda bulunan email değeri csev@umich.edu değerine eşit olan nesneleri listeler.
e) Sıralama(Sorting) İşlemi
- SELECT * FROM [tablo_ismi] ORDER BY [özellik];
- users tablosunda bulunan nesneler email özellikleri karşılaştırılarak artana doğru sıralanır. Bu sıralama ascending olarak adlandırılır. Eğer hangi yöne doğru sıralama yapacağını belirtmezsen postgre senin için ascending sıralama yapar.
- Eğer email yerine rakamsal bir özellik kullanılsaydı kavramak daha kolay olabilirdi ama string değerlerde de değişen pek fazla bir şey yok. Sorgumuz alfabetik bir sıralama yaparak ilk harfleri karşılaştırarak A’ dan Z’ ye doğru bir sıralama gerçekleştiriyor.
- Eğer descending bir sıralama yapmak istersek:
SELECT * FROM USERS ORDER BY email DESC;
- Eğer ascending bir sıralamayı database’ in insiyatifine bırakmadan yapmak istersek:
SELECT * FROM USERS ORDER BY email ASC;
f) Özellik İçinde Arama İşlemi
- SELECT * FROM [tablo_ismi] WHERE [özellik_ismi] LIKE ‘%[aranacak_karakter]%’;
- users tablosunda bulunan name özelliğinin içinde “e” karakteri bulunan tüm nesneleri listeler.
‘%e%’ : içinde e harfi bulunan tüm kayıtları getirir.
‘%e’ : Başı önemli değil sonu e harfi ile biten tüm kayıtları getirir.
‘e%’ : Sonu önemli değil e harfi ile başlayan tüm kayıtları getirir.
g) Sınırlandırma İşlemi
- İki adet çok önemli anahtar kelimemiz vardır. Bunlar: LIMIT ve OFFSET.
- LIMIT gösterilecek olan nesnelerin kaç adet ile sınırlı olması gerektiğini söyler. Genellikle bu özelliği sayfalama da kullanırız. Örnek olarak bir sayfada 12 adet ürünün gösterilmesini istiyorsak LIMIT 12 koşulunu kullanarak kolayca işin üstesinden gelebiliriz.
- OFFSET ise sıralaması yapılan nesnelerin kaçıncı sıradan itibaren gösterilmesi gerektiğini belirtir. Default değeri sıfırdır.
h) Sayma(Count) İşlemi
- Listede kaç adet eleman olduğunu bize döndüren sorgulardır.