SQL ile Excel Karşılaştırması
Değişik ekranlardan veya internet sayfalarından veritabanına girilmiş bilgilerden SQL sorgu cümleleri kullanılarak SQL'de raporlama yapılır.
Şimdi SQL'i Excel ile adım adım karşılaştıralım:
Excel'de her bir kolon için o kolonlara tek tek Eşittir işareti ve ardından amaca yönelik atama işlemi yapılır veya gerekli fonksiyon yazılır.
Filtreleme
Fonksiyon Kullanımı
Excel'de fonksiyon kullanımında Eşittir işaretinden sonra fonksiyon adı ve parantez içinde parametreleri yazılır.
=year(today())
=yıl(bugün())
SQL'de fonksiyon kullanımında ise Select teriminden sonra fonksiyon adı ve parantez içinde parametreleri yazılır.
Örnek:
Select year(getdate())
---------------------------------------------------------------------------------------------------------------------------
Tablolar Arası İlişki
Önce Excel'de tablolar arası ilişkiyi görelim:
Bilindiği gibi Excel'de tablolar arası ilişki en çok DüşeyAra fonksiyonuyla kurulmaktadır. Tabii her bilgi getirilecek hücreye bu fonksiyon tek tek yazılmaktadır.
İki tablo arasında ortak bir kolon olmalıdır. Bu kolon da, bilginin getirileceği tabloda birinci kolon olmak zorundadır.
Bu ortak kolon, bilginin gösterileceği tabloda DüşeyAra fonksiyonundaki Aranan Değer parametresinde belirtilmektedir.
Bir örnek verecek olursak aralarında ilişki kuracağımız Sınavlar ve Dersler tabloları olsun. Her iki tabloda da 'Ders Kodu' kolonu ortak kolon olacaktır.
=DüşeyAra(DersKodu;Dersler;2;0)
Burada Sınavlar tablosundaki Ders Kodu kolonunun hemen sağındaki kolona 'Ders Adı' bilgisini getirtmiş olalım.
Şimdi de SQL'de tablolar arası ilişkiyi ele alalım.
Burada da tablolarımız, Excel örneğimizdeki Sinavlar ve Dersler tabloları olacak.
Veritabanında DersID, SinavID gibi kayıtları belirten kolonlar vardır. Bu kolonların bilgileri doğal sayılardır.
Bu iki tablo arasında ilişki kurulmasını sağlayacak bir ortak kolon bulunmalıdır. Örneğimizdeki iki tablo arasında ortak kolon da DersID kolonu olsun. Yani bu kolon iki tabloda da bulunacak. Bu ortak kolonda değer doğal sayı olacak.
Dersler tablosundaki DersID kolonunda bir sayı bir kez yazılabilecek, yani tekrarsız olacak. Çünkü bu sayı kayıt için bir belirteç olarak kullanılacak. Bir sayı birden fazla kullanılırsa o sayının hangi kayıt olduğu belli olmaz. Ayrıca bu tablonun hiç bir kaydında bu kolonu boş bırakılamaz olarak tanımlanır. Çünkü bir kaydın belirteç bilgisi olmazsa o kayda erişmek istediğimizde erişilemez.
Sinavlar tablosundaki DersID kolonunda ise bir sayı birden fazla yazılabilir. Her bir yazılış, Dersler tablosundaki bu DersID kaydına bir erişimi gösterir. Bu DersID numaralı Sınav kaydında her bir Sınav için kullanıldığında bu DersID ilgili Sınav kaydına yazılacaktır.
Dersler tablosundaki DersID kolonu Primary Key olarak ve Sinavlar tablosundaki DersID ise bir referans olduğundan Foreign Key olarak tanımlanmalıdır.
Dersler tablosundan DersAdi, DersAlanKodu Sinavlar tablosundan ise SinavTarihi, SinavTipiKodu, SinavSiraNo bilgilerini getirtecek olalım.
Join cümleciği Select cümlesinin devamı olarak yazılır.
from Sinavlar
left join Dersler on Dersler.DersID = Sinavlar.DersID
Ana tablomuz Sinavlar olduğu için önce bu tabloya bağlandık, sonra bu (soldaki) tabloyu esas alarak Dersler tablosuna bağlandık. Select ile from arasında yazdığımız kolon isimleriyle de hangi kolonlardan bilgi getireceğimizi belirtmiş olduk.
---------------------------------------------------------------------------------------------------------------------------
Koşullu ve Gruplu Toplama vs. İşlemleri
Excel'de bu amaçla özellikle ÇokETopla fonksiyonu kullanılır. Bu fonksiyonda birinci parametrede hangi kolonun toplanacağı belirtilir. Gruplandırmalar ve filtrelemeler ise, bu parametreden sonraki Ölçüt Aralığı ve Ölçüt ikilileriyle oluşturulur.
Excel'deki ÇokETopla fonksiyonuna, SQL'de aşağıdaki Sum, Where, And içeren Select cümlesi tam karşılık gelmektedir.
sum(Miktar) as ToplamMiktar
from Satislar
where Tarih = '20100101' and BayiID = '3'
Buradaki where Tarih = '20100101' and BayiID = '3' cümleciği Eğer ölçütlerine karşılık gelmektedir ve sum(Miktar) as ToplamMiktar cümleciği ise toplama işlemini yapar.
SQL'de bu amaçla ayrıca Group By cümleciği kullanılır. Group By cümleciğinde ilgili kolonlardaki birden fazla grup ve bu grupların toplama vs. işlem sonuçları listelenir. Her bir grup bir Eğer ölçütüne karşılık gelir. Group By cümleciği yazılırken, hangi kolonlara göre gruplama yapılacağı belirtilir. Select teriminden sonra gruplama kolonları yazılır. Bu kolonların ardından da Sum fonksiyonu kullanılarak ilgili kolonda toplama işlemi yaptırılır. Bu Group By cümleciği, belirtilen gruplama kolonunda bulduğu tüm grupları listeler ve karşılarına grup toplamlarını yazar. Bu listeleme Excel Pivot'a benzer. Bizim burada belirttiğimiz ÇokETopla ile uyum sağlamak için koşullu toplama yaptırmak üzere, Group By cümleciğine bir koşul cümleciği eklememiz gereklidir. Burada yazabileceğimiz koşul cümleciği, Having terimiyle yazılabilmektedir. Having'ten sonra ise mantıksal kontroller yazılır.
Excel ÇokETopla Örneği:
MSSQL Koşullu ve Gruplu Toplama örneği:
İç İçe Fonksiyon ve İç İçe Select
Excel'de bir fonksiyonun sonucu olan değer, bu fonksiyonu çağıran fonksiyonda çağıran parametreye gelir. İç içe fonksiyonları, matematikteki gibi Bileşik Fonksiyon olarak adlandırırız.
Örnek=Sin(Radyan(45)) bileşik fonksiyonu, önce 45 derecenin Radyan karşılığını bulur, bulduğu bu sonuç Sinüs fonksiyonunda kullanılır.
SQL'de de bir Select cümlesinin sonucu olan değer, bu Select cümlesinin yazıldığı yere gelir. SQL'de bu türden İçteki Select cümleleri Sub Query olarak adlandırılır.
Örnek
Konuya devam olarak SQL Tablo İlişkileri yazımı okumanızı tavsiye ederim.
SQL ile Excel Karşılaştırmasına neden ihtiyaç duyulduğuna ilişkin SQL ile Excel Karşılaştırması Hakkında sayfasındaki bilgileri okumanızı tavsiye ederim.