
MYSQL DERSLERİ ANASAYFA ÖNCEKİ DERS SIRADAKİ DERS
Konu başlığına tıklayarak detayları görebilirsiniz!!!
GROUP BY ile büyük veritabanları içerisinde bize bir bakıma özet çıkarma imkanı sağlıyor. Yapı olarak az da olsa DISTINCT'e benzer. Örnerğimiz üzerinde filmler tablomuzdaki ülkeleri gruplamak istersek; SELECT * FROM filmler GROUP BY ulke şeklinde bir kod yazımıyla bunu yapmamız mümkündür. Burada farkettiyseniz bize aynı ülkeyi 3-4 kez göstermiyor, her ülkeyi bir kez gösteriyor. Ama kayıtlarımızda aynı ülkeye sahip bir kaç kayıt daha vardı ama bu kayıtları bize tekrar tekrar göstermedi. Bir başka güzelliği de kayıtları bize harf sırasına göre gösteriyor olmasıdır.

GROUP BY ile sadece bir değil bir kaç kolonu daha sorgulama imkanımız vardır. Mesela; SELECT ulke, film_tur FROM filmler GROUP_BY ulke, film_tur şeklinde kodumuzu yazdığımızda bize hem ülke hem de film_tür sorgularını döndürecektir. Dikkat edilmesi gereken nokta SELECT'ten sonra hangi kolonları eklediysek GROUP BY'dan sonra da aynı kolonları belirtmemizdir. Bize mükerrer kayıtları göstermediğini söylemiştirk ama ihtiyacımız olduğunda bize benzer kayıttan kaç tane olduğunu göstermesi için COUNT (*) ifadesini kullanabiliriz. Bu bize kriterlerini belirttiğimiz her kayıttan kaç adet olduğunu gösterecektir.

SELECT * FROM ulke, film_tur COUNT (0) FROM filmler GROUP_BY ulke, film_tur şeklinde kodumuzu yazıp çalıştırdığımızda bize en sona bi kolon ekleyerek mükerrer kayıtlardan kaçar tane olduğunu gösterecektir. Sona eklenen kolonun ismini değiştirmek istersek COUNT(*)'dan sonra AS kolonadi şeklinde yazarak bunu yapabiliriz. Biz örneğimizde kayit olarak değiştirdik kolonun adını mesela.
GROUP_BY ile gruplandırdığımız elemanların SUM ile toplamasını, AVG ile ortalamalarını sorguluyoruz. Sayısal değerler üzerinde işlem yapmamız konuyu daha iyi anlamamızı sağlayacağından tablomuzun hasilat kolonu üzerinden işlem yapmamız daha doğru olacaktır.
Mesela ülke başına düşen ortalama hasılatı bulabilmek için; SELECT ulke, AVG(hasilat) AS ortalamahasilat FROM filmler GROUP BY ulke şeklinde bir sorgulama yapabiliriz. Sorgu sonucunda oluşturduğumuz ortalamhasilat sütununda bize ülke başına ortalama hasılatı verir.

SELECT ulke, SUM(hasilat) AS toplamhasilat FROM filmler GROUP BY ulke dediğimizde bize ülkeye göre toplam hasılatları verecektir. Sadece AVG yerine SUM yazarak ve kolon adımızı toplamhasilat yaparak bu işlemi gerçekleştirmiş olduk.

JOIN'leri iki tablo arasında birleştirme işlemleri yapmak için kullanıyoruz. Buna bağlı olarak aktorler adında yeni bir tablo oluşturuyoruz ve iki tabloda ortak bir kolon olması için bir kolonu aynı yapıypruz.
Dört farklı JOIN tipi mevcuttur. İlk olarak LEFT JOIN tablomuzu sola doğru birleştir anlamına gelmektedir. Bu doğrultuda program ilk yazdığımız tabloyu komple alır, ikincisinden ise sadece ortak olan kolonu bize gösterir. Bunun için SELECT * FROM aktorler a1 LEFT JOIN filmler f1 ON a1.aktor_ulke = f1.ulke şeklinde kodumuzu yazıyoruz.


RIGHT JOIN yani sağa birleştir dediğimizde ise tam tersi ikinci yazdığımız tablonun tüm bilgilerini alır ve birinci yazdığımız tablodan sadece aynı olan kolonları bize gösterir. RIGHT JOIN'de LEFT JOIN'den kod yazımı olarak sadece LEFT yerine RIGHT yazıyoruz.
Biz aktorler tablosundan aldığımız için ilk dört sütunu eğer karşılığı yoksa bize null dönüyor.

RIGHT JOIN dediğimizde bazı kolonlarda NULL ifadesini görüyoruz. Nedeni a1'deki ülkeleri çağırmamız. Bunun için COALESCE ifadesini kullanıyoruz ve THE PINAIST içerisinde FRANCE'in kolona eklendiğini görüyoruz.

null kısmına isterseniz bilinmiyor, sıfır (0) gibi ifadelerle de doldurabilirsiniz.
INNER JOIN ile her iki tablodan sadece aynı yani kesişen kolonları sorguluyoruz. Sadece JOIN ifadesini kodda kullanmamız bize istediğimiz sonucu verecektir. INNER yazmamıza gerek yoktur.

Bir de UNION ifadesi vardır. Bu ifadeyle her şekilde tablo birleştirilir. İster kesişme olsun isterse olmasın.

