BÖLÜM-3
SQL'DE ARİTMETİKSEL İFADELER VE FONKSİYONLAR GRUPLANDIRARAK İŞLEM YAPMA Bir tablo üzerindeki bilgileri bazı özelliklere göre gruplandırarak listeleme yapabiliriz.Bunun için kullanılan komut GROUP BY sözcükleridir. Örnek: Her bölümdeki ortalama maaş nedir? Personel tablosundaki satırlar,bölüm numaralarına göre (bolumno ) gruplandırılarak,her bir grubun maaş ortalaması ayrı ayrı hesaplanarak listelenebilir. SELECT bolumno,AVG (brut)FROM personel GROUP BY bolumno; Avg: Avg sözcüğü matematiksel ortalama hesaplamak için kullanılır. Bolumno AVG(brut) 1 25000000 2 45000000 3 78000000 Örnek: Her bölümdeki en yüksek maaşı alan kişiler listelenmek istendiğinde: SELECT bolumno,MAX (brut),ad,soyad FROM personel GROUP BY bolumno; Gruplandırarak kümeleme fonksiyonlarını uygularken, koşul da verilebilir. Bu durumda, grup üzerindeki hesaplamalarla ilişkili koşul belirtilirken HAVING sözcüğünü kullanmak gerekir. Örnek: En yüksek maaşın, 90000000 'dan fazla olduğu bölümlerde personele ait ortalama maaşları listeleyiniz? SELECT bolumno,AVG(brut)FROM personel GROUP BY bolumno HAVING AVG (brut) < 90000000; Personel tablosunda aşağıdaki bilgiler bulunsun. Bolumno Brut 1 25000000 1 145000000 2 78000000 3 120000000 1 18000000
Yukarıdaki SELECT komutunun sonucunda,
Yukarıda uygulanan SELECT komutu,her
bölümdeki erkek personele ait ortalama brüt maaşı hesaplayarak
(erkek personel .T. ile belirtilmiş) ve erkek personel maaş
ortalaması, 90000000'dan yüksek olan bölümler listelenecektir.Komutun çıktısı aşağıdaki gibidir:
BİRDEN FAZLA TABLOYU İLİŞKİLENDİREREK
SORGULAMA
Bölüm:
Bu tablolarla ilişkili olarak aşağıdaki
soruyu soralım:Çalışan her personel ve bu personelin
yöneticisiyle ilgili bilgiler nelerdir?
Sicil SGvnN Ad Soyad Dtrh Adres Cin Brut B_no
Bolum_adı Bolum_no Gir_Trh Personel ve bölüm tablolarının,Müşterek alan olan bölüm numarası üzerinde JOIN (birleştirme) işlemine tabi tutulması sonucu elde edilen bilgi: Sicil SGvnN Ad Soyad Dtrh Adres B_no Personel ve bölüm tablolarında sadece her iki tabloda aynı olan bölüm numaralarına ait satırlar alınarak birleştirilmiş ve her iki tablonun alanlarından büyük bir tablo oluşturulmuştur.Listelene birleştirilmiş tabloda,her iki tablodan alınmasına rağmen tablolarda ortak olan alanların tekrarlanmadığı görülmektedir. Bunun için SELECT komutunda * sembolü yerine sadece,sonuçta yazılması istenen sütun başlıkları kullanılmaktadır.
BİR TABLONUN FARKLI İSİMLERDEKİ EŞDEĞERLERİ
İLE SORGULAMA
Sicil SGvnN Ad Soyad Dtrh YonSGn
Bu SELECT komutu ile,personel tablosunun A
ve B isimli birer kopyası oluşturulur.Bu kopyalara personel
kütüğünün eşdeğer yada takma adları (aliases) adı verilir.SELECT
komutu ile,personel tablosunun eşdeğeri olan (kopyası) olan A
tablosundaki yönetici sosyal güvenlik numarası,personel tablosunun
diğer eşdeğeri olan B tablosundaki sosyal güvenlik numarasına eşit
olan satırları kontrol ederek her personele ait istenilen bilgileri
listelemektedir.Ayrıca bu personelin yöneticisi ile istenilen
bilgileri de listelemektedir.
Personel tablosu
Sonuç:
Bazı sorgulamalar,özelliği itibari ile içiçe SELECT komutunun kullanılmasını gerektirebilir. İçteki SELCT komutunun bulunduğu sonuç,dıştaki SELECT komutunun
işlevini yerine getirmesi için kullanılır. SELECT * FROM Alinandersler WHERE Donem ='961' AND ali_ogr_num IN (SELECT ogr_num FROM ogrenci WHERE ogr_bol_kod='11'); Buradaki komutların işleyişi: Önce Alınandersler tablosunda öğrenci numarası ali_ogr_num gruplanır.Ali_ogr_no alt sorgu için girdi olarak kullanılır.Eğer ali_ogr_num,alt sorudaki oluşturulan şartlara uyan bir öğrenciyse sonuç tablosunda yer alacaktır. |