Beyza'nın Blogu

SQL

Veri Tipleri

Verileri veritabanında tutarken aşağıdaki tiplere uygun olacak şekilde hazırlamamız gerekmektedir.

char(n): Değişmez uzunluklu karakter dizilimi. Karakter sayısı belli olan nesneler için kullanılabilir.
varchar(n): Değişken boyutlarda değişken tutmaya yarayan değişken. Karakter ekledikçe hafızada eklenen karakter kadar yer kaplar.
int: Tam sayıları tutmak için kullanılır. Hafızada 4 byte2lık yer kaplar.
smallint: Hafızada int’e göre daha az yer kaplar.
numeric(p,d): Kesirli sayıları saklamak için kullanılır. p toplam basamak sayısını, d ise ondalık basamak sayısını belirler. Tam sayılar ve ondalıklı sayılar için yüksek doğruluk sağlar.
real: Kesirli sayılar için kullanılır ve yaklaşık olarak 4 byte’lık bir hafıza kaplar.
double precision: Daha büyük kesirli sayılar için kullanılır ve yaklaşık olarak 8 byte’lık bir hafıza kaplar.
float(n): kesirli sayılar için kullanılır. n değeri, depolanan değerin hassasiyetini belirler. real ve double precision veri türlerinin daha genel bir versiyonudur.

İlişkisel veritabanları tablolar üzerine kuruludur.

1) Tablonun oluşturulması:

create table ile tablomuzu oluşturmaya başlarız.

» create table sube                                       // tabloya “sube” adını verdik.
(
sube_adi char(15) not null,                        // not null kullanarak şube adının boş bırakılamayacağını belirttik.
sube_sehri char(30),                                  // burada not null kullanılmamış yanı şehir bilgisini boş bırakabiliriz.
varlik int
)

» create table sube
(
sube_adi char(15) not null,
sube_sehri char(30),
varlik int,
primary key (sube_adi)                             // tabloda eşi benzeri olmaması(unique) gereken nesneyi primary key ile belirtiriz.
)

2) Tablonun silinmesi ve değiştirilmesi:

drop table -> silme
alter table -> değiştirme (kolon ekleyip silebiliriz)

» drop table sube                                                    // sube adlı tablo direkt olarak veritabanından silinir.

» alter table sube add telefon_no char(15)     // sube adlı tabloya 15 karaktere sahip telefon_no kolonu eklendi.

» alter table sube drop telefon_no                    // sube adlı tablodan telefon_no kolonunu siler.

3) Tablonun içine koyduğumuz verileri genellikle sorgularız. SQL'de çoğunlukla bu kısım kullanılır.

select ozellik_adi
     from tablo_adi
     where istenilen_kosullar

» select sube_adi
   from sube
   where sube_sehri=’Ankara’

distinct -> tekrarlı verilerden sadece bir tanesini göster.(Buna özetini göstermekte denebilir.)

» select distinct sube_adi
   from borc

➤ all -> verilerin hepsini gösterir yani tekrarlı olup olmadığına bakmaz.

» select all sube_adi
   from borc

* sembolü bütün değerleri göster anlamındadır.

» select * from sube                   // sube tablosundaki tüm içerikleri gösterir.

4) Tabloda sorgu yaparken daha da spesifikleştirmek adına koşul ifadeleri kullanırız.

where -> istediğimiz özelliği bulmada kullanılır.
and -> birden fazla koşulun aynı anda sağlanmasını gerektirir.
not -> belirtilen koşulun tersi anlamına gelir.
or -> bir veya daha fazla koşuldan en az birinin sağlanmasını gerektirir.
between -> iki koşul arasındaki değerleri bulmak için kullanılır.

» select sube_adi
   from sube
   where sube_sehri=’İstanbul’ and varlik > 1200                      // İstanbul’da ve varlığı 1200’den fazla olan şubeleri bulur.

» select sube_adi
from sube
where sube_sehri=’İstanbul’ not varlik > 1200 // İstanbul’da ve varlığı 1200’den fazla olamayan şubeleri bulur.

» select sube_adi
   from sube
   where sube_sehri=’İstanbul’ or varlik > 1200                        // İstanbul’da veya başka bir şehirde varlığı 1200’den fazla olan şubeleri bulur.

» select sube_adi
   from sube
   where varlik > 1200                                                                      // İstanbul’da veya başka bir şehirde varlığı 1200’den fazla olan şubeleri bulur.

» select sube_adi
   from sube
   where varlik between 1200 and 3000                                                 // Varlığı 1200 ve 3000 arasında olan şubeleri listeler.


join -> kartezyen çarpım yapar, farklı tablolardaki verileri birleştirerek ilişkili olan verileri sorgulatır.
as -> hem kolonlar için hem tablolar için isim değiştirmede kullanılır.

5) Satır değişkenleri:

from -> tablolara isim vermek için kullanılır.

» select musteri_adi, T.hesap_numarasi,S.miktar
   from borçlu as T, kredi as S
   where T.hesap_numarasi = S.hesap_numarasi

6) Dizgi işlemleri: Hafızanın kullanımı açısınıdan problemli işlemlerdir. Hafızayı yavaşlatabilir.

% -> Bulunan her şey anlamındadır. Başta, sonda ve hem başta hem sonda kullanılabilirç

» select musteri_adi
   from musteri
   where musteri_adresi like ‘%Ana Cadde%’                      // Müşteri adreslerinden içinde Ana Cadde geçenleri listeler.

\ -> Kaçış karakteridir. % ve gibi karakterleri metinsel ifade olarak belirtmek için kullanılır.

» like ‘Ana Cadde\%’ escape ‘\’                                           // Ana Cadde% ifadesi sorguda aranır.

|| -> İki dizgiyi birleştirir.

7) Sıralama işlemleri:

order by -> bir seçim işlemi yaptığımızda verilerimizi belli bir düzende sıralamak için kullanılır.

» select distinct musteri_adi,
   rom borc_alan,kredi
   where borc_alan hesap_numarasi = kredi.hesap_numarasi and sube_adi= ‘Beyoğlu’
   order by musteri_adi                                                                                                                                       // Müşteri adına göre sıralama yapr.

asc -> artan sırada sıralamak için kullanılır.

» order by musteri_adi asc                            // A’an Z’ye artan şekilde sırlar.

desc -> azalan sırada sıralamak için kullanılır.

» order by musteri_adi desc                         // Z’den A’ya azalan şekilde sırlar.

8) Küme operatörleri: Birlerşim, kesişim ve fark işlemleri.

union -> iki sorgudan alınan verileri tek bir tabloda birleştir.

» select musteri_adi from borc_veren
   union
   select musteri_adi from borc_alan

intersect -> iki sorgudan alınan verilerden sadece ortak olan satırlarını alır.

» select musteri_adi from borc_veren
   intersect
   select musteri_adi from borc_alan                                // Hem borç alıp hem borç verenleri listeler.

except -> iki sorgudan alınan verilerden farklı olanları çıkartır

» select musteri_adi from borc_veren
   except
   select musteri_adi from borc_alan                        // Borç verenlerden borç alanları çıkar sadece borç verenler kalır.

9) Toparlama(aggregate) fonksiyonları:

avg -> kolonun ortalama değerini alır.
min -> kolonun minimum değerini alır.
max -> kolonun maksimum değerini alır.
sum -> kolunun toplam değerini alır.
count -> kolondaki değer sayısını alır.

» select avg(bakiye)
   from hesap
   where sube_adi = ‘Bakırköy’                       // Bakırköy şubesinde bulunan hesaplardaki bakiyelerin ortalamasını al.

» select count(*)
   from musteri                                            // Müşteri saysını bul.

» select count (distinct musteri_adi)
   from borc_veren                                        // Borç veren tablosundaki müşteri sayısını bul

10) Gruplama fonksiyonları:

group by -> Belirtilen koşula göre verileri gruplar. Ayrıca bize aggregate fonskiyonları kullanma şansı verir.

» select sube_adi, count (distinct musteri_adi)
   from borc_veren,hesap
   where borc_veren.hesap_numarası=hesap.hesap_numarası
   group by sube_adi                                                 // Her şubede kaç farklı müşterinin borcu olduğunu öğrenmek için kullanılır.

having -> where gibi kullanılır fakat where’den farklıdır. Gruplama işleminden sonra eğer şart belirtmek istiyorsak kullanılır.(group by ile kullanılır diyebiliriz)

» select sube_adi, avg(bakiye)
   from hesap
   group by sube_adi                                                                  // Her şubedeki ortalama bakiye değerleri gösterir.
   having avg(bakiye) > 1200 // Hesaptaki ortalama bakiye değeri 1200’den yüksek olanları gösterir.

11) Null(boş) değerler:

null-> Herhangi bir değeri olmayan satırlarda kullanılır. null hangi işlem yapılırsa yapılsın null’dır.

» select hesap_numarasi
   from kredi
   where miktar is null

▷ null hangi işlem yapılırsa yapılsın null’dır.

– null > 5 = null
– null <> null = null
– null = null

unkown -> Bilinmeyen değerlerdir.

OR:  unkown or true = true
        unkown or false = unkown
        unkown or unkown = unkown

AND:  true and unkown = unkown
           false and unkown = false
           unkown and unkown = unkown

NOT:  not unkown = unkown

▷ Null değerler ile Toparlama (Aggregate) fonksiyonları kullama:

-> sum ‘da null değerler 0 olarak kabul edilir.
-> count(*) ‘da null değerler hiç yokmuş gibi düşünülür.

12) İç içe sorgular: Sınırsız sayıda alt sorgu (subquery) yazarak işlemimize devam edebiliriz.

subquery’ler genellikle select-from-where ifadeleriyle yazılan sorgulardır. Genel mantık subquery’lerden gelen verileri tutup üst query yazmaktır.

in -> Küme içerisinde var olup olmadığını arar.
not in -> Küme içerinde yok olup olmadığını arar.

» select distinct musteri_adi
   from borc_alan                                                                 // 2) Borç alan müşterilerin arasından borç veren müşterileri getir.
   where musteri_adi
   in (select musteri_adi from borc_veren)                  // 1) Borç veren tablosundan müşteri isimlerini al.

» select distinct musteri_adi
   from borc_alan                                                                  // 2) Borç alan müşteriler arasından, aynı zamanda borç veren                                                                                                                      olmayan müşterilerin listesini getir.
   where musteri_adi
   not in (select musteri_adi from borc_veren)            // 1) Borç veren tablosundan müşteri isimlerini al.

Sorguları okurken en içten başlamak her zaman kolaylık sağlar.

» select distinct musteri_adi
   from borc_alan, kredi
   where borc_alan.hesap_numarasi=kredi.hesap_numarasi and
   sube_adi=’Bakırköy’ and                                   // Bakırköy şubesinden kredi alan
  (sube_adi,musteri_adi) in                                // Müşteriler arasından aynı zamanda
  (select sube_adi,musteri_adi
   from borc_veren,hesap
   where borc_veren.hesap_numarasi=hesap.hesap_numarasi)              // Borç veren müşterileri seçer.

13) Küme karşılaştırmaları:

» select distinct T.sube_adi
   from sube as T, sube as S
   where T.varlik > S.varlik and S.sube_adi=’Bakırköy’

➤ some -> Şartın en az bir kayıtta sağlanması gerektiğini belirtir.

» select sube_adi
   from sube
   where varlik > some
  (select varlik
   from sube
   where sube_sehri=’İstanbul’)

all -> Şartın hepsini sağlaması gerektiğini belirtir.
not unique -> Tekrarlı olmayan verileri alır.
with -> Geçici bir sonuç kümesi oluşturur ve sorgunun geri kalanında kullanılabilir.

14) View kullanımı:

view -> Bir sanal tablodur. Diğer başka tabloları birleştirir ve çıkan sonucu saklama imkanı sağlar. Güvenlik anlamında kullanıcıları kısıtlandırmak için kullanılabilir. İşi parçalara bölme, problemleri basitleştirme ve özetleştirme anlamında kullanılabilir.

» create view v as <sorgu ifadesi>

» create view tum_musteriler as
  (select sube_adi, musteri_adi
   from borc_veren, musteri_adi
   where borc_veren.hesap_numarasi = hesap.hesap_numarasi)
   union
  (select sube_adi, musteri_adi
   from borc_alan,kredi
   where borc_veren.kredi_numarasi = hesap.kredi_numarasi)

depend directly -> Bir view’in diğer view ile doğrudan bağlantılı olması. Eğer bir view oluşturulen başka bir view’den veri alıyorsak depend directly denir.
depend on -> Direkt olarak birbiriyle bağımlı olmayan view’lerden bahseder. Eğer view’lerden birinin silinmesi diğerini etkilemez.
recursive -> Bir view’in kendi üzerindeki bazı verilerden oluşturulması anlamına gelir.

15) Veri tabanındaki değişiklikler:

delete -> Veritabanından satır siler.

» delete from hesap
    where sube_adi=’Denizli’                       // Denizli’de hesabı olan herkesi sil.

insert into -> Satır ekler ve value ile kullanılır. Value sıralaması önemlidir.

» insert into hesap
   values (‘A-9732′,’Pamukkale’,1200)

 ya da

» insert into hesap (sube_adi, bakiye, hesap_numarasi)
   values (‘Pamukkale’,1200,’A-9732′)                          // Diğer kolonlara eklenmeyen değerleri null olarak tamamlar.

Ekleme yapılarken bir tabloya diğer tablolardan veriler çekilip eklenebilir.

update -> Veritabanında değişiklik yapmaya yarar ve set ile kullanılır.

» update hesap
   set bakiye=bakiye*1.06
   where bakiye > 10000                        // bakiye değeri 10000’in üstünde olanları 1.06 kadar arttır.

Scroll to Top