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.
Projeyi forklayın ve clonlayın. Tamamladığınızda da pushlayın.
Bu veritabanı, bir okulun kütüphanesinden öğrencilerin aldıkları kitapların bilgisini barındırmaktadır.
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/]
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