Örneklerle SQL
 
TEMEL SQL

Bu doküman Yazılım Geliştirme ekibi tarafından Eğitim Destek ekibi için hazırlanmıştır.

SQL(Structly Query Language) : Yapısal Sorgulama Dili olarak açıklanabilecek olan SQL dili
Temel olarak veritabanı üzerinde nesneler (tablo, index, görünüm) oluşturma,nesne silme,
veri seçme, veri silme, veri değiştirme gibi işlemlerin yapılmasında kullanılır.
SQL dili ilk bakışta karmaşık görünmesine karşın konuşma diline yakın olduğu için anlaşılması kolay bir dildir.SQL dili özet olarak veri yönetim komutları(SELECT, INSERT, DELETE,UPDATE) , veri tanımlama komutları( CREATE, ALTER, DROP ) komutlarından oluşmaktadır. Bu komutlar ileride örneklerle birlikte açıklanacaktır.
Vega Yazılım veritabanları üzerinde SQL komutlarının kullanımı için “AddOns” klasöründeki “DBManager.exe” programı kullanılır. Dikkat edilmesi gereken hususlar şunlardır.

1. SQL ifadeleri büyük harfle yazılmalıdır.
2. SQL ifadeleri bir yada daha fazla satırdan oluşabilmektedir.
3. Okunaklı olması için ifadeler ayrı ayrı satırlara yazılmalıdırlar.
4. Anahtar kelimeler(SELECT, DELETE vb..) kısaltılamaz yada satırlara bölünemez.
5. Firma bazlı tabloların başına “ *!F ” eklenir.( Ör: *!FTBLSTOKLAR )
6. Dönem bazlı tabloların başına başına “ *!F!D ” eklenir.( Ör:*!F!DTBLCEKGIRIS )
7. Yazılan SQL cümlesini çalıştırma için F5 tuşuna basılır.

Not: Bu dökümandaki örneklerde yazılan SQL komutları DbManager’ de SQL penceresine yazılarak F5 tuşuna basarak çalıştırılabilmektedirler.

BİR TABLODAN VERİ SEÇME İŞLEMİ

SQL Dilinde bir tablodan veri seçme işlemi SELECT komutu ile yapılır.

# SELECT İfadesinin Kullanımı :

SELECT [DISTINCT] {*,column1,column2} FROM Tablo_adi
Yukarıdaki yapıda geçen ifadelerin anlamları :
? SELECT : Tablodan veri seçileceğini gösterir.
? DISTINCT : Tekrarı olan kayıtları bir defa gösterir.(Kullanımı isteğe bağlıdır)
? * : Tüm kolonları ifade eder yani bütün alanları seçer.
? Column : Yalnızca belirtilen kolonların seçilmesini sağlar
? FROM : Belirtilen kolonların seçileceğini belirler.
? Tablo_adi : Seçme işleminin hangi tablodan yapılacağını gösterir
Yukarıda da görüldüğü veri seçme işlemi için SELECT komutu ardında neler seçileceği,
ardından FROM ifadesi ve verinin hangi tablo(lar) dan seçileceği belirtilmektedir.

# SELECT İfadesi ile Tek Bir Tablodan Veri Seçme :
Örnek 1: Carilerin bütün bilgilerinin seçilmesi :
SELECT * FROM *!FTBLCARI

Örnek 2: Stokların stok kodu,malın cinsi ve kalan bilgilerini seçmek :
SELECT
STOKKODU,
MALINCINSI,
KALAN
FROM *!FTBLSTOKLAR

? Örneklerde de dikkat edileceği üzere ;
Görüntüleme sırası SELECT ‘ ten sonraki yazım sırasıyla aynıdır.
Karakter tipli veriler Sola dayalı, Nümerik veriler Sağa dayalı gösterilmektedir.

# Kolonlara Alias( İsteğe bağlı isim) Tanımlamak :
Kolonlara alias tanımlayarak
? Gösterimdeki kolon başlığı değiştirilebilir.
? Hesaplamalarda kolaylık ve anlaşılırlık sağlanır.
? Kullanımı : Kolon isminden hemen AS ` BAŞLIK METNİ ` şeklinde yazılır.

Örnek 3: Alış faturalarından alış fiyatını alias kullanarak seçmek :
SELECT
AFIYATI AS `FATURADAKI ALIS FIYAT`
FROM *!F!DTBLALFATHAREKET
? Örnekte de dikkat edileceği üzere ;
Görüntülemede AFIYATI alanının başlığında “FATURADAKI ALIS FIYATI” yazmaktadır.

# SELECT ile Koşula Göre Veri Seçmek :
Sorgulama sonucunda seçilen kayıtları sınırlandırmak için WHERE ifadesi kullanılır.
? Kullanımı :
SELECT [DISTINCT] {*,column} FROM Tablo_adi
WHERE Koşul [AND/OR] Koşul [AND/OR] Koşul …
Yukarıdaki yapıda geçen ifadelerin anlamları :
? WHERE : Belirtilen koşullara göre seçme yapılacağını bildirir.
? Koşullar : Karşılaştırma operatörü, ifade, sabit, kolon ismi olabilir(ler)
? AND : “Ve” anlamındadır. Kaydın seçilebilmesi için AND ifadesinin sağındaki ve solundaki iki koşulun da mutlaka sağlaması gerekir
? OR : “Veya” anlamındadır. Kaydın seçilebilmesi için OR ifadesinin sağındaki ve solundaki iki koşuldan en az birini sağlaması gerekli ve yeterlidir.

Örnek 4: Bakiyesi negatif(alacaklı) olan carilerin FirmaAdı, Firma Kodunu seçmek :
SELECT
FIRMAKODU,
FIRMAADI,
FROM *!FTBLCARI
WHERE BAKIYE<0

Örnek 5: 1.Özel Kodu “Kırtasiye” olan VE Alış Fiyatı 500000 den büyük olan Stok kayıtlarının bütün bilgilerini seçmek :
SELECT *
FROM *!FTBLSTOKLAR
WHERE KOD1=`Kırtasiye` AND ALISFIYATI>500000

Örnek 6: Firma Kodu “Gıda” olan VEYA 2. Özel Kodu “Yemek” olan Cari kayıtlarının
Firma Kodu, Firma Adı,Yetkili Adı ve Telefon bilgilerini seçmek :
SELECT
FIRMAKODU,
FIRMAADI,
YETKILI,
TELEFON1
FROM *!FTBLCARI
WHERE FIRMAKODU=`Gıda` OR KOD2=`Yemek`

# Aritmetik İşlem Operatörlerini Kullanmak :
Sorgulama sonucunda seçilen kayıtlar üzerinde aritmetik işlem operatörleri olan
( *, / , + , - ) kullanılabilir.
Örnekler üzerinde bu konuyu açıklayabiliriz.
Örnek 7: Stoklar tablosundan AlışFiyatı ile Maliyetini toplayıp TOPLAM başlığı altında göstermek.
SELECT
STOKKODU,
MALINCINSI,
ALISFIYATI+MALIYET AS TOPLAM
FROM *!FTBLSTOKLAR
Not: Alış Fiyatı ile Maliyet arasında ( + ) operatörünün kullanıldığına dikkat ediniz.
Aynı şekilde ( / * + - ) operatörleride kullanılabilir.

# Karşılaştırma Operatörlerini Kullanmak :
SQL cümlenizde kullanabileceğiniz karşılaştırma operatörleri aşağıdadır.
= ? Eşittir Operatörü <> ? Eşit Değil Operatörü
> ? Büyüktür Operatörü < ? Küçüktür Operatörü
>= ? Büyük Eşittir Operatörü <= ? Küçük Eşittir Operatörü



Örnek 8: Stoklar tablosundan Alış Fiyatı 5,000,000 dan küçük olan stok bilgilerini seçmek.
SELECT * FROM *!FTBLSTOKLAR
WHERE ALISFIYATI<5000000

Örnek 8: Bakiyesi olan(Borç veya Alacak) carilerin FirmaKodu ve Telefon bilgisini seçmek.
SELECT FIRMAKODU,TELEFON1
FROM *!FTBLCARI
WHERE BAKIYE>0 OR BAKIYE<0

? Diğer Karşılaştırma Operatörleri Aşağıdadır :

IN(Liste) ? Verinin Liste içinde olup olmadığını kontrol eder.
LIKE ? Belirli bir formattaki karakterleri ifade eder.
BETWEEN ? İki değer arasını ifade eder.
IS NULL ? Verinin NULL(boş) olup olmadığını kontrol eder
Bu operatörleri örneklerle inceleyelim.

Örnek 9: Vergi Dairesi bilgisi boş olan carileri seçmek :
SELECT *
FROM *!FTBLCARI
WHERE VERGIDAIRESI IS NULL

Örnek 10: Firma Kodu alanı Gıda,Giyim,İthalat değerlerinden birine eşit olan carileri seçmek :
SELECT
FIRMAKODU,
FIRMAADI,
YETKILI
FROM *!FTBLCARI
WHERE FIRMAKODU IN (`Gıda`,`Giyim`,`İthalat`)

Örnek 11: 15.08.2003 ile 20.08.2003 tarihleri arasında açılan stok kartlarının seçilmesi :
SELECT
STOKKODU,
MALINCINSI
FROM *!FTBLSTOKLAR
WHERE KARTINACILMATARIHI BETWEEN `2003.08.15` AND `2003.08.20`

Örnek 12: Malın Cinsi alanında BEDEN kelimesi geçen stokların seçilmesi :
SELECT * FROM *!FTBLSTOKLAR
WHERE MALINCINSI LIKE `%BEDEN%`

NOT: LIKE ifadesini DOS işletim sistemindeki DIR komutuna benzetebiliriz.
Birden çok karakter yerine % işareti, tek karakter yerine _ (altçizgi) karakteri kullanılır.
Örneğin Firma Kodunun ilk harfi A,sondan bir önceki harfi K olan firmaları seçmek istersek,
Yazmamız gereken SQL cümlesi aşağıdaki gibi olacaktır :
SELECT * FROM *!FTBLCARI
WHERE FIRMAKODU LIKE `A%K_`

# Seçilen Veriyi Sıralı Göstermek :
SQL dilinde SELECT ile seçilen kayıtları istenilen alan(lara) göre sıralı halde göstermek için
ORDER BY Sütun veya Sütunlar ifadesi kullanılır.
Örneklerle inceleyelim :

Örnek 13: Cari kayıtlarını Firma Koduna göre alfabetik olarak sıralı seçmek :
SELECT * FROM *!FTBLCARI
ORDER BY FIRMAKODU

Örnek 14: Alış Fiyatı 10,000,000 dan yüksek ve 1.Özel Kodu = TÜKETİM olan stok kartlarını Stok Kodu ve Malın Cinsi alanlarına göre alfabetik sıralı olarak seçmek :
SELECT *
FROM *!FTBLSTOKLAR
WHERE (ALISFIYATI>10000000) AND (KOD1=`TÜKETİM`)
ORDER BY
STOKKODU,
MALINCINSI

BİR TABLODAKİ VERİYİ GÜNCELLEME İŞLEMİ
SQL Dilinde bir tablodaki veriyi güncelleme işlemi UPDATE komutu ile yapılır.

# UPDATE İfadesinin Kullanımı :

UPDATE tablo_adı SET sutun-1=`Yeni Değer1`, sutun-2=`Değer2`
WHERE Güncellenecek_Kayıtlar_Koşulu

Yukarıda da görüldüğü veri güncelleme işlemi için UPDATE komutu ardından hangi tablonun güncelleneceği ardından hangi sütunların güncelleneceği ve yeni değerleri
son olarak varsa güncellenecek kayıtları gösteren WHERE koşullu ifadesi.
!!! DİKKAT: Update komutunda dikkat edilmesi gereken nokta WHERE ifadesi kullanılmaz ise tablodaki bütün kayıtların güncelleneceğidir.

Örnek 15: Cari tablosunu, Firma Kodu İTHALAT olan carilerin 1.Özel Kodunu Ticari ve
2. Özel Kodunu Yabancı olarak güncellemek istersek yazacağımız SQL cümlesi :
UPDATE *!FTBLCARI
SET
KOD1=`Ticari`,
KOD2=`Yabancı`
WHERE
FIRMAKODU=`İTHALAT`

Örnek 16: Stoklar tablosundaki bütün stokların Alış Fiyatlarına 1,000,000 eklemek için yazacağımız SQL cümlesi aşağıdaki gibi olacaktır :
UPDATE *!FTBLSTOKLAR
SET ALISFIYATI=ALISFIYATI+1000000

BİR TABLODAN VERİ SİLME İŞLEMİ
SQL Dilinde bir tablodaki veriyi silme işlemi DELETE komutu ile yapılır.

# DELETE İfadesinin Kullanımı :

DELETE FROM <tablo_adı>
WHERE <Silinecek_Kayıtlar_İçin_Koşul_veya_Koşullar>

Yukarıda da görüldüğü veri silme işlemi için DELETE komutu ardından verinin silineceği tablo adı, ardından da hangi verilerin silineceğini gösteren WHERE koşullu ifadesi kullanılır.
!!! DİKKAT: Delete komutunda dikkat edilmesi gereken nokta WHERE ifadesi kullanılmaz ise tablodaki bütün kayıtların silineceğidir.
Örneklerle UPDATE ifadesini görelim.

Örnek 17: Stoklar tablosundaki Alış Fiyatı boş olan kayıtları silmek istersek :
DELETE FROM *!FTBLSTOKLAR
WHERE ALISFIYATI IS NULL

Örnek 18: Satış Faturalarının hareket satırlarının bulunduğu TBLSATFATHAREKET tablosundan IND si 105 olan stoka ait bütün hareketleri silmek istersek :
DELETE FROM *!F!DTBLSATFATHAREKET
WHERE STOKNO=105

Örnek 19: Alış Faturalarının hareket satırlarının bulunduğu TBLALFATHAREKET tablosundan EVRAKNO alanı boş(başlık bilgisi olmayan hareketler) olan hareketleri silmek istersek :
SELECT * FROM *!F!DTBLALFATHAREKET
WHERE EVRAKNO IS NULL

Örnek 20: Stok Özel Kodlarının bulunduğu TBLSTOKKODTAN tablosundaki bütün özel kodları silmek istersek
SELECT * FROM *!FTBLSTOKKODTAN

BİRDEN ÇOK TABLODAN VERİ SEÇME (TABLO BİRLEŞTİRME)
Birden çok tablodan sütün seçilmesinin gerektiği durumlarda tablo birleştirme ile yapılır.
Tablo birleştirmenin temel yapısı aşağıdaki gibidir :

FROM < Sol_Tablo >
< Birleştirme Şekli > < Sağ_Tablo > ON
< Birleştirme_Koşulu >

Bu şekilde birden çok tablo birleştirilebilmektedir.
Tablo birleştirme işlemi “İç Birleştirme(INNER)” ve “Dış Birleştirme(OUTER)” olarak iki şekilde yapılmaktadır.

# İÇ BİRLEŞTİRME (INNER JOIN):
Birleştirmenin yapıldığı her iki tablodan sadece birleştirme koşuluna uyan kayıtları veren birleştirme yöntemidir.

# DIŞ BİRLEŞTİRME (OUTER JOIN):
Tablolardan biri veya her ikisindeki bütün kayıtları veren birleştirme yöntemidir.
Sol( LEFT ), Sağ( RIGHT ), Tam( FULL OUTER ) olarak üç şekilde yapılabilir.

? LEFT JOIN : “Sol_Tablo” dan bütün kayıtları , “Sağ_Tablo” dan ise sadece birleştirme
koşuluna uyan kayıtları verir. En sık kullanılan birleştirme yöntemidir.

? RIGHT JOIN : “Sağ_Tablo” dan bütün kayıtları , “Sol_Tablo” dan ise sadece birleştirme
koşuluna uyan kayıtları verir. Nadiren kullanılan bir birleştirme yöntemidir.

? FULL OUTER JOIN : “Sol_Tablo” ve “Sağ_Tablo” dan bütün kayıtları verir.
Nadiren kullanılan bir birleştirme yöntemidir.

# Aşağıdaki kümeleri birer tablo olarak düşünürsek :
LEFT JOIN yapılırsa sonuç X ve Y bölgesindeki kayıtlar
RIGHT JOIN yapılırsa sonuç Z ve Y bölgesindeki kayıtlar
FULL OUTER JOIN yapılırsa sonuç X, Y ve Z bölgesindeki kayıtlar
INNER JOIN yapılırsa sonuç Y bölgesindeki kayıtlar



Örnek 21(INNER JOIN): Satış faturalarının başlık bilgisi TBLSATFATBASLIK tablosunda tutulmaktadır. Fatura belgelerinde kullanılan özel kod listesindeki kodlar ise TBLBELGEKODTAN tablosunda tutulmaktadır.Bu durumda TBLBELGEKODTAN tablosunda tanımlı kodların kullanıldığı satış faturalarına ait başlık bilgilerine ulaşmak istediğimizde ( koşulu her iki tablonun da sağlaması gerekir) INNER JOIN birleştirme yöntemini kullanırız.
SELECT
BASLIK.TARIH,
BASLIK.BELGENO,
BASLIK.TUTAR,
BELGEKOD.KOD,
BELGEKOD.CATEGORY AS KACINCIKOD
FROM *!F!DTBLSATFATBASLIK AS BASLIK
INNER JOIN *!FTBLBELGEKODTAN AS BELGEKOD ON
BELGEKOD.KOD=BASLIK.OZELKOD1
OR
BELGEKOD.KOD=BASLIK.OZELKOD2
Örnekte görüldüğü gibi birleştirme koşulumuz Fatura başlığındaki Özelkod1 veya Özelkod2 bilgisinin, TBLBELGEKODTAN tablosunda kayıtlı olması durumudur.

Örnek 22(LEFT JOIN): Cari Giriş Bordrolarının başlık bilgisinin tutulduğu TBLCARGIRBASLIK tablosunda bordronun işlendiği cariye ait olarak sadece FIRMANO alanı bulunmaktadır.TBLCARGIRBASLIK tablosundaki bütün bordro başlıklarını ve bu bordronun ait olduğu carilerin Firma kodu,Yetkili vb.. bilgilerini Sol birleştirme yani
LEFT JOIN yaparak görebiliriz.
Bu durumda sol tablomuz TBLCARGIRBASLIK, sağ tablomuz ise TBLCARI olur.
SELECT
BASLIK.TARIH,
BASLIK.TUTAR,
CARI.FIRMAKODU,
CARI.YETKILI
FROM *!F!DTBLCARGIRBASLIK AS BASLIK
LEFT JOIN *!FTBLCARI AS CARI ON
CARI.IND=BASLIK.FIRMANO
Örnekte görüldüğü gibi birleştirme koşulumuz başlıktaki Firmano bilgisinin Cari tablosundaki IND alanına eşit olmasıdır.


Örnek 23(RIGHT JOIN): Stok hareketlerinin tutulduğu TBLSTOKHAREKETLERI tablosunda hareketi gören stoğa ait sadece STOKNO alanı bulunmaktadır.
Stoklar tablosundan sadece hareket gören stoklara ait Ind ve Stokkodu ile harekete ait
Evrakno, Tutar, Parabirimi vb.. bilgileri Sağ birleştirme yani RIGHT JOIN yaparak
görelim.
Sol tablomuz TBLSTOKLAR, sağ tablomuz ise TBLSTOKHAREKETLERI olmaktadır.
SELECT
STOKLAR.IND,
STOKLAR.STOKKODU,
STOKHAREKET.EVRAKNO,
STOKHAREKET.TUTAR,
STOKHAREKET.PARABIRIMI
FROM *!FTBLSTOKLAR AS STOKLAR
RIGHT JOIN *!F!DTBLSTOKHAREKETLERI AS STOKHAREKET ON
STOKHAREKET.STOKNO=STOKLAR.IND
Örnekte görüldüğü gibi birleştirme koşulumuz Stok Hareketlerindeki Stokno bilgisinin Stoklar tablosundaki IND alanına eşit olmasıdır.

NOT: Yukarıda anlatılan SQL komutları ile ilgili daha ayrıntılı örnekler için Vegawin Raporlar modülündeki raporların SQL cümlelerini inceleyebilirsiniz.

 
  52062 ziyaretçi buradaydı.  
 
=> Sen de ücretsiz bir internet sitesi kurmak ister misin? O zaman burayı tıkla! <=