Bu Derste Öğrenecekleriniz: 1- Sorgulama Yaparken Gruplama (GROUP BY) 2- Gruplamada Koşul Kullanımı (HAVING) 3- Sorgulama Yaparken Sıralama (ORDER BY) 4- Sorgulamalarda İşlem Yapma 5- Güncellemelerde İşlem Yapma Aşağıdaki şemaya dikkat edin. Sorgulamalarımızı genellikle bu şemaya göre yapacağız. SQL de bir sorgulama cümlesinin özeti aşağıdaki gibidir. Koşul ifadesine kadar olan kısmı daha önce işlemiştik. Bu dersimizde sorgulamalarda gruplama, having koşul ifadesi ve sırlamayı da öğreneceğiz. SELECT seçim_listesi FROM tablo_kaynağı [ WHERE koşul_ifadesi ] [ GROUP BY gruplama_ifadesi ] [ HAVING koşul_ifadesi ] [ ORDER BY sıralama_şartı [ ASC DESC ] ] 1 Bartın MYO Bilgisayar Programcılığı Öğr. Gör. Bayram AKGÜL 2013-2014 Güz Dönemi
1. Sorgulama Yaparken Gruplama (GROUP BY) Sınavlar tablosundan bir derse ait vize, final ortalamaları alınmak istenince aşağıdaki gibi bir kod yazılabilir. SELECT AVG(VİZE) AS [VİZE ORTALAMA], AVG(FİNAL) AS [FİNAL ORTALAMA] WHERE [DERS KODU] = 'BPR255' Fakat bu kod ile sadece bir derse ait ortalama alınmış olur. Bununla beraber ortalamasını görmek istediğimiz ders kodunu bilmemiz gerekiyor. Sınavlar tablosundaki tüm derslere ait ortalamaları görmek istediğimiz durumda tüm dersleri ders koduna göre gruplayıp sonra ortalamalarını almamız gerekiyor. Bunu SQL de aşağıdaki kod ile sağlayabiliyoruz. SQL de sorgulamalarda kayıtları gruplamak için GROUP BY anahtar sözcüğü kullanılır. SELECT [DERS KODU], AVG(VİZE) AS [VİZE ORTALAMA], AVG(FİNAL) AS [FİNAL ORTALAMA] Not: GROUP BY kullanmak için kesinlikle AVG, SUM, MAX, MIN, COUNT fonksiyonlarından biri veya bir kaçı kullanılmalıdır. Eğer her bir öğrencinin vizelerden (veya finallerden) aldıkları notların ortalamalarını almak istersek bu durumda aşağıdaki gibi bir sorgulama yazabiliriz. SELECT [ÖĞRENCİ NO], AVG(VİZE) AS [VİZELER ORTALAMASI] GROUP BY [ÖĞRENCİ NO] 2 Bartın MYO Bilgisayar Programcılığı Öğr. Gör. Bayram AKGÜL 2013-2014 Güz Dönemi
2. Gruplamada Koşul Kullanımı (HAVING) Belirtilen bir grup veya bir küme işlemi için bir arama koşulu olarak kullanılır. HAVING genellikle GROUP BY deyimi ile beraber kullanılır. GROUP BY kullanılmadığı durumlarda, HAVING bir WHERE yan tümcesi gibi davranır. Aşağıdaki sorgulama örneğinde vize ortalaması 50 den büyük eşit olan derslerin vize ortalamalarını getirir. SELECT [DERS KODU], AVG(VİZE) AS [VİZE ORTALAMASI] HAVING AVG(VİZE) >= 50 HAVING anahtar sözcüğü ile beraber WHERE ile kullanılan bütün koşul operatörleri ve koşul ifadeleri kullanılabilir. Aşağıdaki örnekte her dersin ders ortalaması listelenecek ancak, final notları henüz girilmemiş derslere ait ders ortalamaları listelenmeyecektir. SELECT [DERS KODU], AVG(ORTALAMA) AS [DERS ORTALAMASI] HAVING AVG(FİNAL) IS NOT NULL 3. Sorgulama Yaparken Sıralama (ORDER BY) Sorgulama yaptığımız zaman sonuç genellikle kayıtların giriş sırasına göre gelir. İstersek sorgulama sonucunu bir veya birkaç alana göre sıraya koyabiliriz. Bunu sağlamak için ORDER BY anahtar sözcüğü kullanılır. SELECT [ÖĞRENCİ NO], VİZE WHERE [DERS KODU] = 'BPR251' ORDER BY VİZE Burada BPR251 kodlu dersin vize sonuçları küçükten büyüğe sıralı olacak şekilde sınavlar tablosundan öğrenci numarası ve vize alanları sorgulanıyor. 3 Bartın MYO Bilgisayar Programcılığı Öğr. Gör. Bayram AKGÜL 2013-2014 Güz Dönemi
Not: ORDER BY ile sıralama yapılırken küçükten-büyüğe veya büyükten-küçüğe sıralama yapmak mümkün. Eğer küçükten büyüğe sıralama yapmak isteniyorsa ORDER BY alan_adı ASC kullanılır. Eğer büyükten küçüğe sıralama yapılacaksa ASC yerine DESC kullanılır. Yani ORDER BY alan_adı DESC. Yukarıdaki sorguda ASC veya DESC belirtilmemiş. Böyle bir durumda ASC geçerlidir ve sıralama küçükten büyüğe doğru yapılır. Aşağıdaki sorgulama sonucunda vize notuna göre büyükten küçüğe olacak şekilde sıralanacaktır. SELECT [ÖĞRENCİ NO], VİZE WHERE [DERS KODU] = 'BPR201' ORDER BY VİZE DESC Eğer sıralama yapılacak alan tipi CHAR, VARCHAR gibi yazı tiplerinden oluşuyorsa bu durumda sıralama alfabetik olarak yapılır. SELECT NUMARA, ADI, SOYADI FROM ÖĞRENCİLER WHERE BÖLÜM = 'BPR1' ORDER BY SOYADI ASC Bu sorgu sonucuna göre öğrenciler tablosundan numara, adı, soyadı alanları seçilecek ve sorgu sonucu soyadına göre alfabetik sırada olacak. Yani önce soyadları A ile başlayanlar, en sonunda da Z ile başlayanlar olacak. Eğer tersine bir sorgulama yapılmak istenirse yani önce Z ile başlayanlar önce gelsin istiyorsanız ASC yerine DESC kullanmamız gerekecektir. 4. Sorgulamalarda İşlem Yapma SQL de sorgulamalarda matematiksel işlemler yapılabiliyor. SELECT 3*4+6 AS SONUÇ SELECT [ÖĞRENCİ NO], (VİZE*0.4+FİNAL*0.6) AS ORTALAMA WHERE [DERS KODU] = 'BPR255' AND FİNAL IS NOT NULL Bu sorgulamada BPR255 kodlu derse ait ortalama her öğrenci numarası için vize notunun yüzde 40 ı ve final notunun yüzde 60 ı alınarak ortalama olarak ekrana verilecektir. Sorgu sonucu aşağıdaki gibi olacaktır. 4 Bartın MYO Bilgisayar Programcılığı Öğr. Gör. Bayram AKGÜL 2013-2014 Güz Dönemi
5. Güncellemelerde İşlem Yapma Sorgulama yaparken işlemler yapılabildiği gibi güncellemelerde de işlemler yapılabilir. Örneğin vize ve final notları girilmiş derslerin ortalamalarını otomatik olarak hesaplamak için aşağıdaki gibi bir yöntem uygulanabilir. UPDATE SINAVLAR SET ORTALAMA = VİZE*0.4+FİNAL*0.6 WHERE VİZE IS NOT NULL AND FİNAL IS NOT NULL Burada ortalama alanı başlangıçta tüm dersler için NULL iken, UPDATE ifadesinden sonra VİZE ve FİNAL notları girilmiş dersler için vizenin yüzde 40 ı ve finalin yüzde 60 ı alınarak ORTALAMA alanına giriliyor. 5 Bartın MYO Bilgisayar Programcılığı Öğr. Gör. Bayram AKGÜL 2013-2014 Güz Dönemi