barisskann / fsweb-s17g3-sql-aggregate-fonksiyonlari

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

SQL Sorgu Alıştırmaları

Bu hafta SQL sorguları üzerine çalışıyorsunuz. Bugünkü alıştırmada sizin için hazırladığımız veritabanında aşağıda istediğimiz sonuçları elde etmenize yarayan SQL sorgularını oluşturacaksınız.

Proje Kurulumu

Projeyi forklayın ve clonlayın. Tamamladığınızda da pushlayın.

Kütüphane Bilgi Sistemi

Bu veritabanı, bir okulun kütüphanesinden öğrencilerin aldıkları kitapların bilgisini barındırmaktadır.

Tablolar

ogrenci tablosu öğrencilerin listesini tutar. islem tablosu öğrencilerin kütüphaneden aldıkları kitapların bilgilerini tutar kitap tablosu kütüphanedeki kitapların bilgisini tutar yazar tablosu kitapların yazarları bilgisini tutar tur tablosu kitapların türlerini tutar.

Tablo ilişiklerini görmek için [ktphn.png] dosyasına göz atın.

Yazdığınız sorguları buradan test edebilirsiniz: [https://ergineer.com/assets/materials/fkg36so5-kutuphanebilgisistemi-sql/]

Görevler

Aşağıda istenilen sonuçlara ulaşabilmek için gerekli SQL sorgularını yazın.

MIN-MAX, COUNT-AVG-SUM, GROUP BY, JOINS (INNER, OUTER, LEFT, RIGHT #ilk 3 soruyu join kullanmadan yazın.

1) Öğrencinin adını, soyadını ve kitap aldığı tarihleri listeleyin.

		 select o.ograd,o.ogrsoyad,i.atarih from islem i 
		left join ogrenci  o on o.ogrno=i.ogrno

2) Fıkra ve hikaye türündeki kitapların adını ve türünü listeleyin.
	 select k.kitapadi,t.turadi from tur t
	left join kitap k on k.turno=t.turno
		where t.turadi="fikra" or t.turadi="hikaye"	

3) 10B veya 10C sınıfındaki öğrencilerin numarasını, adını, soyadını ve okuduğu kitapları listeleyin.

	select o.ogrno,o.ograd,o.ogrsoyad,k.kitapadi from islem i
	left join ogrenci o on o.ogrno=i.ogrno
	left join kitap k on k.kitapno=i.kitapno
	where o.sinif="10B" or o.sinif="10C"

#join ile yazın
<!-- 4) Öğrencinin adını, soyadını ve kitap aldığı tarihleri listeleyin. -->


<!-- 5) Fıkra ve hikaye türündeki kitapların adını ve türünü listeleyin. -->


6) 10B veya 10C sınıfındaki öğrencilerin numarasını, adını, soyadını ve okuduğu kitapları, öğrenci adına göre listeleyin.
select o.ogrno,o.ograd,o.ogrsoyad,k.kitapadi from islem i
	left join ogrenci o on o.ogrno=i.ogrno
	left join kitap k on k.kitapno=i.kitapno
	where o.sinif="10B" or o.sinif="10C"

order by o.ograd

7) Kitap alan öğrencinin adı, soyadı, kitap aldığı tarih listelensin. Kitap almayan öğrencilerinde listede görünsün.

select o.ograd,o.ogrsoyad,i.atarih from ogrenci o
left join islem i on i.ogrno=o.ogrno

8) Kitap almayan öğrencileri listeleyin.
select * from ogrenci o

left join islem i on o.ogrno=i.ogrno where i.atarih = ""

9) Alınan kitapların kitap numarasını, adını ve kaç defa alındığını kitap numaralarına göre artan sırada listeleyiniz.
select k.kitapno,count(i.kitapno) as alinansayi,k.kitapadi from islem i 

left join kitap k on i.kitapno=k.kitapno group by i.kitapno order by k.kitapno

---- 10) Alınan kitapların kitap numarasını, adını kaç defa alındığını (alınmayan kitapların yanında 0 olsun) listeleyin. SELECT i.kitapno,k.kitapadi, count(i.kitapno) as alınanadet FROM kitap k LEFT JOIN islem i ON i.kitapno = k.kitapno group by k.kitapno ORDER BY i.kitapno

11) Öğrencilerin adı soyadı ve aldıkları kitabın adı listelensin.
select o.ograd,ogrsoyad,k.kitapadi from islem i 

left join ogrenci o on o.ogrno=i.ogrno left join kitap k on k.kitapno=i.kitapno

12) Her öğrencinin adı, soyadı, kitabın adı, yazarın adı soyad ve kitabın türünü ve kitabın alındığı tarihi listeleyiniz. Kitap almayan öğrenciler de listede görünsün.

select o.ograd,o.ogrsoyad,k.kitapadi,y.yazarad,y.yazarsoyad,t.turadi,i.atarih from ogrenci o left join islem i on i.ogrno=o.ogrno left join kitap k on k.kitapno=i.kitapno left join yazar y on y.yazarno=k.yazarno left join tur t on t.turno=k.turno

13) 10A veya 10B sınıfındaki öğrencilerin adı soyadı ve okuduğu kitap sayısını getirin.
select o.ograd,o.ogrsoyad,count(o.ogrno) from ogrenci o 

left join islem i on i.ogrno=o.ogrno where o.sinif="10A" or o.sinif="10B" group by o.ogrno

14) Tüm kitapların ortalama sayfa sayısını bulunuz.
#AVG
select avg(k.sayfasayisi) from kitap k

15) Sayfa sayısı ortalama sayfanın üzerindeki kitapları listeleyin.

select * from kitap k

where (SELECT AVG(sayfasayisi) FROM kitap) < k.sayfasayisi

16) Öğrenci tablosundaki öğrenci sayısını gösterin
select o.ogrno from ogrenci o
order by o.ogrno desc
limit 1


17) Öğrenci tablosundaki toplam öğrenci sayısını toplam sayı takma(alias kullanımı) adı ile listeleyin.

SELECT COUNT(ograd) AS farkli_ogrenci_sayisi

FROM ogrenci;

18) Öğrenci tablosunda kaç farklı isimde öğrenci olduğunu listeleyiniz.

SELECT COUNT(DISTINCT ograd) AS farkli_ogrenci_sayisi
FROM ogrenci;


19) En fazla sayfa sayısı olan kitabın sayfa sayısını listeleyiniz.
select max(sayfasayisi) from kitap



20) En fazla sayfası olan kitabın adını ve sayfa sayısını listeleyiniz.
select  k.kitapadi,k.sayfasayisi from kitap k 

order by sayfasayisi desc limit 1

21) En az sayfa sayısı olan kitabın sayfa sayısını listeleyiniz.
select min(sayfasayisi) from kitap



22) En az sayfası olan kitabın adını ve sayfa sayısını listeleyiniz.
select k.kitapadi,k.sayfasayisi from kitap k

order by k.sayfasayisi limit 1

23) Dram türündeki en fazla sayfası olan kitabın sayfa sayısını bulunuz.
select max(k.sayfasayisi) from kitap k

left join tur t on t.turno=k.turno where t.turadi="dram"

24) numarası 15 olan öğrencinin okuduğu toplam sayfa sayısını bulunuz.

select sum(k.sayfasayisi) from ogrenci o 
left join islem i on i.ogrno=o.ogrno
left join kitap k on k.kitapno=i.kitapno
where o.ogrno=15


25) İsme göre öğrenci sayılarının adedini bulunuz.(Örn: ali 5 tane, ahmet 8 tane )
select count(ograd),ograd  from ogrenci 

group by ograd

26) Her sınıftaki öğrenci sayısını bulunuz.
select count(sinif),sinif from ogrenci

group by sinif

27) Her sınıftaki erkek ve kız öğrenci sayısını bulunuz.
select sinif,cinsiyet, count(*) as count from ogrenci

group by sinif,cinsiyet

28) Her öğrencinin adını, soyadını ve okuduğu toplam sayfa sayısını büyükten küçüğe doğru listeleyiniz.

select sum(k.sayfasayisi) as toplamsayfa,o.ograd,o.ogrsoyad from ogrenci o 

left join islem i on i.ogrno=o.ogrno left join kitap k on k.kitapno=i.kitapno group by(o.ogrno) order by toplamsayfa desc

29) Her öğrencinin okuduğu kitap sayısını getiriniz.

select count(o.ogrno) ,o.ograd from ogrenci o left join islem i on i.ogrno=o.ogrno group by o.ogrno

About