VERĐTABANI YÖNETĐM SĐSTEMLERĐ Öğr.Gör.Sedat Telçeken ANADOLU ÜNĐVERSĐTESĐ FEN FAKÜLTESĐ MATEMATĐK BÖLÜMÜ 2005 2006 Bahar Dönemi SQL Fonksiyonları Fonksiyonlar SQL içinde bazı hesaplamaları yapabilmektedir. Bu fonksiyonları programlama dillerinde varolduğu gibi algılamak mümkündür. Fonksiyonlar; argümanları girdi olarak alır ve bir sonuç üretir. ÖRNEK : A dersinden en yüksek not alan öğrenciyi bulmak gerektiğinde, Sayısal değerlerin toplanması, yuvarlanması, Tarih değerleri üzerine işlem yaparken, num -> char, Char->num yaparken. 1
Fonksiyon çeşitleri Tek Satır Fonksiyonlar : Tek girdili tek çıktılı fonksiyonlar olarak tanımlanabilir. Tablonun bir satırı için uygulanır. Çok Satır Fonksiyonlar : Çok girdili tek çıktılı fonksiyonlardır. Bir grup satıra uygulanır. Tek Satır Fonksiyonlar Bunlar tablonun her bir satırına uygulanan fonksiyonlardır. Karakter fonk. Sayısal fonk. Tarih fonk. Dönüştürme fonk. Genel fonk. Tanımlanması Fonksiyon adı (sütun ifade, [argümanlar] ) Fonksiyon adı : SQL fonksiyonudur, değiştirilemez. Sütun : Herhangi bir tabloya ilişkin sütun adı. Đfade : herhangi bir karakter dizisi ya da hesaplama ifadesi. Argümanlar : Fonksiyonlar birlikte kullanılacak argümanlar 2
Karakter Fonksiyonları Karakter verilerini girdi, çıktı olarak ise karakter ya da sayısal veri veren fonksiyonlardır. LOWER : Alfebatik karakterleri küçük harfe dönüştürür. SQL> SELECT LOWER(Adı) AS K_Đsimler FROM Öğrenci; UPPER : Lower ın tam tersini yapar. INITCAP : Đlk harfi büyük, diğerlerini küçük yapan fonksiyon. CONCAT : Katarları birleştirmek için kullanılır. ile aynı işi yapar. SUBSTR : (sütun ifade, m, [n]) Bir katarın m. Karakterinden itibaren n karakterlik yeni bir katar oluşturur. LENGTH : Bir sütunun ya da katarın içerdiği karakter sayısını verir. Sayısal Fonksiyonlar ROUND : yuvarlatma. ROUND ( sütun ifade, n) ROUND(MAAŞ,2) TRUNC : Kesmek için kullanılır. TRUNC ( sütun ifade, n) TRUNC(MAAŞ,2) SQL> SELECT Adı, Ücret AS Aylık, Ücret/30 AS Günlük, TRUNC(Ücret/30) AS Budanmış Günlük FROM Personel; MOD : Mod alma işlemidir. MOD(33,4) -> 1 değerini verir. 3
Tarih Fonksiyonları MONTHS_BETWEEN(tarih1,tarih2) iki tarih arasındaki ayın hesabını verir. ADD_MONTHS(tarih,n) Tarih e n ay eklendiğinde hangi tarihe gelineceğini verir. NEXT_DAY(tarih, gün ) haftanın belirli bir gününün bir sonra hangi tarihe karşılık geldiğini bulmak için kullanılır. LAST_DAY(tarih) Belirlenen tarihe ilişkin ayın en son gününü verir. Tarih Fonksiyonları ÖRNEKLER SQL> SELECT Adı, Giriş_Tar, MONTHS_BETWEEN(SYSDATE,Giriş_Tar) AS Ay FROM Personel; SQL> SELECT Adı, Giriş_Tar, MONTHS_BETWEEN(SYSDATE,Giriş_Tar) AS Ay FROM Personel WHERE MONTHS_BETWEEN(SYSDATE,Giriş_Tar)<200; SQL> SELECT Adı,Giriş_Tar,ADD_MONTHS(Giriş_Tar,6) FROM Personel; SQL> SELECT Adı, Giriş_Tar, LAST_DAY(Giriş_Tar) FROM Personel; 4
Dönüştürme Fonksiyonları Karakter, sayısal ve tarih verilerinin birbirlerine dönüştürülmesi ve biçimlendirilmesi işlemlerinde kullanılır. TO_CHAR(Tarih veya sayı, biçimlendirme ifadesi ) TO_NUMBER(katar, biçimlendirme ifadesi ) TO_DATE(katar, biçimlendirme ifadesi ) Biçimlendirme Đfadesi YYYY, YEAR, MM, MONTH, DD, DY, DAY AM,PM, HH, MI, SS 9, 0 $, L, (.), (,) Dönüştürme Fonksiyonları TO_NUMBER: SQL> SELECT 1234 AS KAR 50*TO_NUMBER( 1234 ) AS SAYISAL FROM DUAL; DUAL; varolmayan bir tablo olduğu zaman ORACLE da kullanılır. TO_DATE: SQL> SELECT Adı, Giriş_Tar WHERE Giriş_Tar>TO_DATE( OCAK 1,1995, MONTH DD, YYYY ); 5
Genel Fonksiyonlar NVL fonksiyonu : Sütunlarda Null değerini alan hücrelere istenen bir değeri atayan fonksiyondur. NVL(sütun, NULL yerini alacak değer ) SQL> SELECT Adı, Ücret, Komisyon, Ücret*12+NVL(Komisyon,0) AS TOPLAM ; DECODE fonksiyonu : Programlama dillerinde kullanılan CASE, IF..THEN..ELSE denetim deyimlerinin SQL de karşılığı yoktur! Bunların yerine DECODE dan yararlanılır. DECODE(sütun ifade, koşul1,sonuç1) [,koşul2,sonuç2,...] [varsayılan sonuç]); Genel Fonksiyonlar Personel arasında görevi MEMUR olanlara %10, ŞEF olanlara %15, MÜDÜR olanlara %20 zam yapılacaktır. Diğerlerinde ise herhangi bir değişiklik olmayacaktır. SQL> SELECT Adı,Görevi,Ücret, DECODE(Görevi, MEMUR,Ücret*1.1, ŞEF,Ücret*1.15, MÜDÜR,Ücret*1.2, ÜCRET) AS Yeni Ücret ; 6
Đç içe fonksiyonlar Bazen fonksiyonlar iç içe parantezler içerisinde sıralanabilir. Örneğin DECODE(TRUNC(ROUND(..))) gibi. Böyle durumlarda en içteki fonksiyonun çıktısı bir dıştaki fonksiyonun girdisi olacak şekilde işlem yapılır. VERĐLERĐN GRUPLANMASI VE ANALĐZĐ Tek satır fonksiyonları, tablonun bir satırına uygulanıyordu. Bir grup satıra bir fonksiyon uygulanması durumunda çoklu satır fonksiyonları (grup fonksiyonları) kullanılır. FONKSĐYONLAR Tek satır fonk. Çoklu satır fonk. 7
Grup Fonksiyonları Grup fonksiyonları tablonun tüm satırlarına uygulanabildiği gibi, GROUP BY sözcüğü ile alt gruplara da uygulanabilir. SELECT [sütun,] grup fonksiyonu(sütun) FROM tablo [WHERE koşul]; Grup Fonksiyonları AVG fonksiyonu : Ortalama alır, girdisi sayısal olmalıdır. SQL> SELECT AVG(Not) AS ORTALAMA FROM Öğrenci_Not; SUM fonksiyonu : Sütunların değerlerini toplar, girdisi sayısal olmalıdır. SQL> SELECT SUM(Notlar) / Count(Notlar) AS Dönem_Ort FROM Öğrenci_Not; MAX ve MIN fonksiyonları : sütundaki maksimum ve minimum satır değerlerini döndürür. 8
Gruplama Đşlemleri SELECT [sütun,] grup fonksiyonu(sütun) FROM tablo [WHERE koşul] [GROUP BY sütun] [ORDER BY sütunu]; Örnek : Her bölümde çalışan personel sayısını, ücret toplamını ve ortalama ücretleri hesaplayan SQL deyimi: SQL> SELECT Bölüm_No, COUNT(Adı) AS SAYI SUM(Ücret) AS Toplam, AVG(Ücret) AS Ortalama GROUP BY Bölüm_No; GROUP BY kullanımında Dikkat SELECT deyimi içinde grup fonksiyonları, sütun isimleri ile birlikte kullanılabilirler, Ancak grup fonksiyonları GROUP BY sözcüğü olmadan kullanılamaz. SELECT Bölüm_No, COUNT(*) ; YANLIŞ SELECT Bölüm_No, COUNT(*) DOĞRU GROUP BY Bölüm_No; 9
GROUP BY kullanımında Dikkat GROUP BY ile sütunların takma isimleri kullanılamaz GROUP BY ile tanımlanan grupların, artan sırada olduğu var sayılır, Sırayı ters yönde değiştirmek için ORDER BY kullanılır. GROUP BY içinde belirtilen sütun isimleri grup fonksiyonları içerisinde olmak zorunda değildir. SELECT Bölüm_No, AVG(Ücret) GROUP BY Bölüm_No; GROUP BY içinde belirtilen sütun isimleri SELECT listesinde yer almak zorunda değildir. SELECT AVG(Ücret) GROUP BY Bölüm_No; Birden fazla sütuna göre gruplama GROUP BY ile birden fazla sütuna göre gruplama da yapılabilir. ÖRNEK : Her bölümü ve bölüm içindeki görevlere göre personeli gruplayarak bu bazda ücret toplamları elde etmek için; SQL> SELECT Bölüm_No, Görevi, SUM(Ücret) GROUP BY Bölüm_No, Görevi; 10