Merhaba,
Çözüm Haber dergisinin bu ilk sayısında ve bundan sonraki sayılarında, Sql komutlarını tanıtarak, Çözüm Bilgisayar Yazılımlarındaki kullanım şekillerinden örnekler vereceğiz.
Aşağıdaki uygulamalar, Çözüm Yazılımlarının ana menüsündeki F9-Sql İşlemlerinde uygulanmıştır. Sizler de bu örnekleri aynı menüde uygulayabilirsiniz.
Bu ilk sayımızda, Hasta kayıtlarımızı cinsiyetlerine göre gruplandırarak, grafik olarak raporlayacağız. Öncelikle bazı sql komutlarını öğrenmemiz gerekiyor.
SELECT
Tablo veya view (görüntü) içerisindeki veri satırlarını geri döndürür. SELECT komutunda sonra mutlaka FROM komutu kullanılmalıdır. FROM, geri döndürülecek verilerin kaynağını belirler.
SELECT * FROM hasta
komutu ile, hasta tablosundaki tüm alanlar görüntülenir.
SELECT hs_key, hs_ad, hs_soyad FROM hasta
komutu ile hasta tablosundaki 3 alan görüntülenir. FROM komutundan sonra, tablo ismi yazılabileceği gibi view ismi de yazılabilir.
CREATE OR REPLACE / DROP VIEW CREATE [OR REPLACE] VIEW viewname AS viewquery
Tablo ile aynı özellikleri taşıyan fakat içerisinde kayıt bulundurmayan nesnelerdir. SELECT komutu ile içeriği görüntülenmek istendiğinde, içindeki sql cümleciğini çalıştırır ve sonuçları tablo şeklinde döndürür.
CREATE VIEW hastarap AS SELECT hs_key, hs_ad, hs_soyad, cinsiyet FROM hasta
Viewname, yeni oluşturduğumuz view'a vereceğimiz isimdir. Örnekte hastarap ismi verilmiştir. Viewquery, view oluşturma esnasında, esas alınan sorgu ifadesidir. View'ın içeriği bu sorgu ifadesine göre belirlenir.
Örnekte, viewquery olarak SELECT hs_key, hs_ad, hs_soyad, cinsiyet FROM hasta ifadesi yazılmıştır.
Komutunu çalıştırdığımızda, hastarap adlı bir view oluşturulur. SELECT ifadesi ile view içeriği görüntülenmek istendiğinde, view oluşturma esnasında belirtilen viewquery cümleciği çalıştırılır ve sonuç olarak döndürülür.
SELECT * FROM hastarap
Sql'i çalıştırıldığında, viewquery olarak belirlenen SELECT hs_key, hs_ad, hs_soyad, cinsiyet FROM hasta çalıştırılır ve bu sorgunun sonucu geri döndürülür. Bu durumda, yukarıdaki sql'in sonucu şu şekilde olacaktır.
Sütun isimleri olarak, hs_key yerine dosya, hs_ad yerine ad, hs_soyad yerine soyad yazalım. Bunun için hastarap view'ına ait viewquery ifadesini değiştirmemiz gerekecek. Bunu iki şekilde yapabiliriz.
HS_KEY
|
HS_AD
|
HS_SOYAD
|
CINSIYET
|
1
|
SAADET
|
GÜNDÜZER
|
K
|
2
|
ZAFER
|
İLDEŞ
|
E
|
3
|
SEVGİ
|
DUMAN
|
K
|
İlk olarak DROP VIEW hastarap yazıp, öncelikle ilk oluşturduğumuz view'ı drop ederiz ve sonra yeni haliyle tekrar oluştururuz.
CREATE VIEW hastarap AS SELECT hs_key AS dosya, hs_ad AS ad, hs_soyad AS soyad, cinsiyet FROM hasta
Ya da, CREATE OR REPLACE komutunu kullanarak (bu durumda DROP komutunu kullanmamıza gerek kalmaz), öncekinin üzerine tekrar oluştururuz.
CREATE OR REPLACE VIEW hastarap AS SELECT hs_key AS dosya, hs_ad AS ad, hs_soyad AS soyad, cinsiyet FROM hasta
Yukarıdaki sql'i çalıştırdıktan sonra, SELECT * FROM hastarap denildiğinde aşağıdaki sonucu elde ederiz.
DOSYA
|
AD
|
SOYAD
|
CINSIYET
|
1
|
SAADET
|
GÜNDÜZER
|
K
|
2
|
ZAFER
|
İLDEŞ
|
E
|
3
|
SEVGİ
|
DUMAN
|
K
|
DECODE
DECODE(Alan, Aranan Değer, Sonuç [,Aranan Değer, sonuç...] [,default) Komut içerisinde if (eğer) ifadesinin kullanılmasıdır. Alan, şarta tabi tutacağımız alanı ifade eder. Aranan Değer, Alan içerisinde aradığımız değerdir.. Sonuç ise, eğer alandaki değer aranan değer ise, geri döndürülür. Şöyle ki; HASTA tablosunda kayıtlı olan hastalarımızın cinsiyet bilgisi cinsiyet alanında; Erkek için E, Kadın için K olarak saklanır. SELECT * FROM hastarap ifadesi çalıştırıldığında yukarıdaki sonucu elde etmiştik. Şimdi, DECODE komutunu kullanarak K harfi yerine Kadın yazdıralım.
CREATE OR REPLACE VIEW hastarap AS SELECT hs_key AS dosya, hs_ad AS ad, hs_soyad AS soyad, DECODE(cinsiyet, 'K', 'Kadın') AS kcinsiyet FROM hasta
Yukarıdaki ifadeyi çalıştırarak hastarap' ı tekrar oluşturalım ve arkasında SELECT * FROM hastarap diyelim.
HS_KEY
|
HS_AD
|
HS_SOYAD
|
KCINSIYET
|
1
|
SAADET
|
GÜNDÜZER
|
Kadın
|
2
|
ZAFER
|
İLDEŞ
|
|
3
|
SEVGİ
|
DUMAN
|
Kadın
|
Görüldüğü üzere Zafer İLDEŞ' in cinsiyet alanında herhangi bir değer yazmıyor ve cinsiyet alanı yerine yenicinsiyet alanı oluştu. Şimdi erkekler için de bir sütun oluşturalım.
CREATE OR REPLACE VIEW hastarap AS SELECT hs_key AS dosya, hs_ad AS ad, hs_soyad AS soyad, DECODE(cinsiyet, 'K', 'Kadın') AS kcinsiyet, DECODE(cinsiyet, 'E', 'Erkek') AS ecinsiyet FROM hasta
Yukarıdaki ifadeyi çalıştırarak hastarap'ı tekrar oluşturalım ve arkasından SELECT * FROM hastarap diyelim.
HS_KEY
|
HS_AD
|
HS_SOYAD
|
KCINSIYET
|
ECINSIYET
|
1
|
SAADET
|
GÜNDÜZER
|
Kadın
|
|
2
|
ZAFER
|
İLDEŞ
|
Erkek
|
|
3
|
SEVGİ
|
DUMAN
|
Kadın
|
Kadın ve Erkekler için oluşan bu iki sütunu, yine DECODE komutunun özelliklerini kullanarak birleştirelim ve yeni cinsiyet alanı yerine cinsiyet alanı oluşturalım.
CREATE OR REPLACE VIEW hastarap AS SELECT hs_key AS dosya, hs_ad AS ad, hs_soyad AS soyad, DECODE(cinsiyet, 'K', 'Kadın', 'E', 'Erkek') AS cinsiyet FROM hasta
HS_KEY
|
HS_AD
|
HS_SOYAD
|
CINSIYET
|
1
|
SAADET
|
GÜNDÜZER
|
Kadın
|
2
|
ZAFER
|
İLDEŞ
|
Erkek
|
3
|
SEVGİ
|
DUMAN
|
Kadın
|
İkinci şartı ortadan kaldırarak, DECODE komutunu biraz daha kısaltabiliriz.
CREATE OR REPLACE VIEW hastarap AS SELECT hs_key AS dosya, hs_ad AS ad, hs_soyad AS soyad, DECODE(cinsiyet, 'K', 'Kadın', 'Erkek') AS cinsiyet FROM hasta
Görüldüğü üzere, 'Erkek' için herhangi bir şart yazılmadı. Bunun anlamı, cinsiyeti K olanlara Kadın, diğer kayıtlara Erkek yazılacağıdır.
COUNT
COUNT(ifade)
Verilen ifadedeki veya bir sütun içerisindeki değerleri sayar ve geri döndürür. Tek başına kullanılabileceği gibi, bir veya birkaç alanla birlikte de kullanılabilir, bu durumda GROUP BY ifadesinin kullanılması gerekir.
SELECT COUNT(*) FROM HASTA ifadesi, hasta tablosundaki kayıt sayısını geri döndürür.
COUNT(*)
|
300,741
|
Cinsiyetlerine göre hasta sayılarını almak için
SELECT cinsiyet, COUNT(*) AS toplam FROM HASTA GROUP BY cinsiyet şeklinde bir ifade yazılmalıdır.
CİNSİYET | TOPLAM |
Kadın | 118,118 |
Erkek | 182,583 |
Bir veya birden fazla alanla birlikte COUNT, AVG, SUM, MAX, MIN, STDDEV, VARIANCE gibi komutlar kullanıldığında GROUP BY komutunun kullanılması gerekir. Şimdide DECODE komutunu kullanarak, K yerine Kadın, E yerine Erkek yazdıralım.
SELECT DECODE(cinsiyet, 'K', 'Kadın', 'Erkek') AS cinsiyet , COUNT(*) AS toplam FROM hasta GROUP BY DECODE(cinsiyet, 'K', 'Kadın', 'Erkek')
Bu sonucu grafik olarak görmek için Ctrl+G tuşuna basınız.
DUAL
Son olarak, SELECT ifadesiyle birlikte kullanılan DUAL komutunu inceleyelim. SELECT komutu kullanılırken, FROM komutundan sonra kaynak belirtilmelidir. Oracle'ın fonksiyonlarını kullanırken (SYSDATE, ROUND, ABS, TAN, COS, CEIL vb.) eğer bu fonksiyonlar bir tablo ile kullanılmayacaksa, kaynak yerine DUAL yazılır. Örneğin, oracle'ın sistem tarihini
SELECT SYSDATE FROM DUAL ifadesi ile öğrenebiliriz.
123.45 sayısını yuvarlatılmış halini bulmak için SELECT ROUND(123.45) FROM dual yazmamız gerekir.