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.
#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/]
Aşağıda istenilen sonuçlara ulaşabilmek için gerekli SQL sorgularını yazın.
1) ÖRNEK SORU: Yazar tablosunu KEMAL UYUMAZ isimli yazarı ekleyin.
insert yazar (yazarad,yazarsoyad) values ("KEMAL ","UYUMAZ ")
2) Biyografi türünü tür tablosuna ekleyiniz.
insert tur (turadi) VALUES ("Biyografi ")
3) 10A sınıfı olan ÇAĞLAR ÜZÜMCÜ isimli erkek, sınıfı 9B olan LEYLA ALAGÖZ isimli kız ve sınıfı 11C olan Ayşe Bektaş isimli kız öğrencileri tek sorguda ekleyin.
insert ogrenci (ograd,ogrsoyad,sinif,cinsiyet)
values("ÇAĞLAR","ÜZÜMCÜ","10A","E"),
("LEYLA","ALAGÖZ","9B","K"),
("Ayşe","Bektaş","11C","K")
4) Öğrenci tablosundaki rastgele bir öğrenciyi yazarlar tablosuna yazar olarak ekleyiniz.
INSERT INTO yazar (yazarad, yazarsoyad)
SELECT ograd, ogrsoyad FROM ogrenci ORDER BY RAND() LIMIT 1;
5) Öğrenci numarası 10 ile 30 arasındaki öğrencileri yazar olarak ekleyiniz.
insert into yazar (yazarad,yazarsoyad)
select ograd,ogrsoyad from ogrenci where ogrno between 30 and 50
6) Nurettin Belek isimli yazarı ekleyip yazar numarasını yazdırınız.
(Not: Otomatik arttırmada son arttırılan değer @@IDENTITY değişkeni içinde tutulur.)
INSERT INTO yazar (yazarad, yazarsoyad)
VALUES ('Nurettin', 'Belek');
SELECT @@IDENTITY AS 'Yeni Yazar Numarası';
7) 10B sınıfındaki öğrenci numarası 3 olan öğrenciyi 10C sınıfına geçirin.
update ogrenci set sinif="10C"
where ogrno=3
8) 9A sınıfındaki tüm öğrencileri 10A sınıfına aktarın
SET SQL_SAFE_UPDATES = 0;
update ogrenci set sinif ="10A"
where trim(sinif)="9A"
9) Tüm öğrencilerin puanını 5 puan arttırın.
SET SQL_SAFE_UPDATES = 0;
update ogrenci set puan=puan+5
10) 25 numaralı yazarı silin.
SET SQL_SAFE_UPDATES = 0;
delete from yazar where yazarno=25
11) Doğum tarihi null olan öğrencileri listeleyin. (insert sorgusu ile girilen 3 öğrenci listelenecektir)
SET SQL_SAFE_UPDATES = 0;
select * from ogrenci where dtarih is null
12) Doğum tarihi null olan öğrencileri silin.
SET SQL_SAFE_UPDATES = 0;
delete from ogrenci where dtarih is null
13) Kitap tablosunda adı a ile başlayan kitapların puanlarını 2 artırın.
SET SQL_SAFE_UPDATES = 0;
update kitap set puan=puan+2 where kitapadi LIKE "a%"
14) Kişisel Gelişim isimli bir tür oluşturun.
insert tur (turadi) values("Kişisel Gelişim")
15) Kitap tablosundaki Başarı Rehberi kitabının türünü bu tür ile değiştirin.
SET SQL_SAFE_UPDATES = 0;
update kitap k left join tur t on t.turno=k.turno set t.turadi="Kişisel Gelişim" where k.kitapadi="Başarı Rehberi"
16) Öğrenci tablosunu kontrol etmek amaçlı tüm öğrencileri görüntüleyen "ogrencilistesi" adında bir prosedür oluşturun.
17) Öğrenci tablosuna yeni öğrenci eklemek için "ekle" adında bir prosedür oluşturun.
CREATE DEFINER=`root`@`localhost` PROCEDURE `Ekle`(ad VARCHAR(50), soyad VARCHAR(50), cinsiyet VARCHAR(10), dtarih DATE, sinif INT, puan INT)
BEGIN INSERT INTO ogrenci (ograd, ogrsoyad, cinsiyet, dtarih, sinif, puan) VALUES (ad, soyad, cinsiyet, dtarih, sinif, puan); END
18) Öğrenci noya göre öğrenci silebilmeyi sağlayan "sil" adında bir prosedür oluşturun.
CREATE DEFINER=root
@localhost
PROCEDURE ogrenci_sil
(id INT)
BEGIN
delete from ogrenci
where ogrno=id;
END
19) Öğrenci numarasını kullanarak kolay bir biçimde öğrencinin sınıfını değiştirebileceğimiz bir prosedür oluşturun.
CREATE DEFINER=root
@localhost
PROCEDURE update_class
(id INT,class varchar(5) )
BEGIN
update ogrenci set sinif=class
where ogrno=id;
END
20) Öğrenci adı ve soyadını "Ad Soyad" olarak birleştirip, ad soyada göre kolayca arama yapmayı sağlayan bir prosedür yazın.
CREATE DEFINER=`root`@`localhost` PROCEDURE `find_student`(name varchar(50) )
BEGIN select concat(trim(ograd),trim(ogrsoyad)) as ad from ogrenci o where concat(trim(ograd),trim(ogrsoyad)) =name ; END
21) Daha önceden oluşturduğunu tüm prosedürleri silin.
#Esnek görevler (Esnek görevlerin hepsini Select in Select ile gerçekleştirmeniz beklenmektedir.)
22) Select in select yöntemiyle dram türündeki kitapları listeleyiniz.
select * from kitap
where turno=(select turno from tur where trim(turadi)="Dram" )
23) Adı e harfi ile başlayan yazarların kitaplarını listeleyin.
SELECT * FROM kitap WHERE yazarno IN (SELECT yazarno FROM yazar WHERE yazarad LIKE 'e%')
24) Kitap okumayan öğrencileri listeleyiniz.
select * from ogrenci
where ogrno not in (select ogrno from islem)
25) Okunmayan kitapları listeleyiniz
select * from kitap
where kitapno not in (select kitapno from islem)
26) Mayıs ayında okunmayan kitapları listeleyiniz.
select * from kitap
where kitapno not in (select kitapno from islem where atarih LIKE "_____05%")