Aşağıda cevapları ile birlikte bazı karmaşık SQL Sorguları Örnekleri bulunmaktadır. Herkesin adım adım nasıl yürütüldüğü hakkında fikir edinmesi için sorguları basitten zora doğru sıralandırdım.
Sorgularda kullanılan veri tabanı tabloları aşağıdaki gibidir.
Zor SQL Sorguları
Örnek 1: Öğrenci tablosundaki Adı ‘A’ harfi ile başlayan öğrencileri listeleyiniz.
1 2 3 | select * from ogrenci where ograd like 'A%' |
Örnek 2: kitap tablosundaki sayfa sayısı 50 ile 200 arasında olan kitapların adını ve sayfa sayısını listeleyiniz.
1 2 3 | select * from kitap where sayfasayisi between 50 and 200 |
Örnek 3: Öğrenci tablosundaki öğrencilerden adı A, D ve K ile başlayan öğrencileri listeleyiniz.
1 2 3 | select * from ogrenci where ograd like '[ADK]%' |
Örnek 4: Öğrenci tablosundaki sınıfı 9A olan Erkekleri veya sınıfı 9B olan kızların adını, soyadını, sınıfını ve cinsiyetini listeleyiniz.
1 2 3 4 | select ograd,ogrsoyad,sinif,cinsiyet from ogrenci where (sinif='9A' and cinsiyet='E') or (sinif='9B' and cinsiyet='K') |
Örnek 5: Öğrenci tablosunda doğum yılı 1989 olan öğrencileri listeleyiniz.(Not: veritabanında tarihler ay/gün/yıl şeklinde sorgulanır)
1 2 3 4 | select * from ogrenci where dtarih between '01/01/1989' and '12/31/1989' |
Örnek 6: Öğrencileri adına, adı aynı olanlarıda soyadlarına göre sıralayınız.
1 2 3 | select * from ogrenci order by ograd,ogrsoyad |
Örnek 7: Sayfa sayısı en fazla olan kitabı listeleyiniz.
1 2 3 | select top 1 * from kitap order by sayfasayisi desc |
Örnek 8: Öğrenciler tablosundaki en genç öğrenciyi listeleyiniz.
1 2 3 | select top 1 ograd,ogrsoyad,dtarih from ogrenci order by dtarih desc |
Örnek 9: 10A sınıfındaki en yaşlı öğrenciyi listeyin.
1 2 3 4 | select top 1 ograd,ogrsoyad,dtarih from ogrenci where sinif='10A' order by dtarih |
Örnek 10: Rastgele bir öğrenci seçin
1 2 3 | select top 1 * from ogrenci order by newid() |
Örnek 11: 10A sınıfından rastgele bir öğrencinin adını, soyadını, numarasını ve sınıfını getirin.
1 2 3 4 5 | select top 1 ogrno,ograd,ogrsoyad,sinif from ogrenci where sinif= '10A' order by newid() |
Örnek 12: Öğrenci tablosundaki rastgele bir öğrenciyi yazarlar tablosuna yazar olarak ekleyiniz.
1 2 3 4 5 | insert into yazar(yazarad, yazarsoyad) select top 1 ograd,ogrsoyad from ogrenci order by newid() |
Örnek 13: 9A sınıfındaki tüm öğrencileri 10A sınıfına aktarın
1 2 3 | update ogrenci set sinif='10A' where sinif='9A' |
Örnek 14: Öğrencinin adını, soyadını ve kitap aldığı tarihleri listeleyin.
1 2 3 4 | select ograd,ogrsoyad,islem.atarih from ogrenci join islem on islem.ogrno=ogrenci.ogrno |
Örnek 15: 10B veya 10C sınıfındaki öğrencilerin numarasını, adını, soyadını ve okuduğu kitapları, öğrenci adına göre listeleyin.
1 2 3 4 5 6 7 8 | select ogrenci.ogrno,ograd,ogrsoyad,sinif,kitapadi from ogrenci join islem on ogrenci.ogrno=islem.ogrno join kitap on islem.kitapno=kitap.kitapno where sinif='10B' or sinif='10C' order by ogrenci.ograd |
Örnek 16: Kitap almayan öğrencileri listeleyin.
1 2 3 4 5 | select ograd,ogrsoyad,islem.atarih from ogrenci left join islem on islem.ogrno=ogrenci.ogrno where islem.atarih is null |
Örnek 17: Alınan kitapların kitap numarasını, adını ve kaç defa alındığını kitap numaralarına göre artan sırada listeleyiniz.
1 2 3 4 5 6 7 | select kitap.kitapno, kitap.kitapadi,count(*) from islem left join kitap on kitap.kitapno=islem.kitapno group by kitap.kitapadi,kitap.kitapno order by kitap.kitapno |
Örnek 18: 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.
1 2 3 4 5 6 7 | Select ograd,ogrsoyad yazarad,yazarsoyad,kitapadi,turadi from kitap join tur on tur.turno=kitap.turno join yazar on kitap.turno=yazar.yazarno join islem on kitap.kitapno=islem.kitapno right join ogrenci on ogrenci.ogrno=islem.ogrno |
Örnek 19: 10A veya 10B sınıfındaki öğrencilerin adı soyadı ve okuduğu kitap sayısını getirin.
1 2 3 4 5 6 7 | select sinif, ograd,ogrsoyad,count(islemno) from ogrenci left join islem on islem.ogrno=ogrenci.ogrno where sinif in ('10A','10B') group by sinif,ograd,ogrsoyad order by count(*) |
Örnek 20: Sayfa sayısı ortalama sayfa sayısından fazla olan kitapları listeleyiniz.
1 2 3 | select * from kitap where sayfasayisi >(select avg(sayfasayisi) from kitap) |
Örnek 21: Mayıs ayında okunmayan kitapları listeleyin.
1 2 3 | select * from kitap where kitap.kitapno not in (select distinct islem.kitapno from islem where MONTH(islem.atarih)=5) |
Örnek 22: Sayfa sayısı ortalama sayfanın üzerindeki kitapları listeleyin.
1 2 3 4 | select kitapadi,sayfasayisi from kitap where sayfasayisi>(select avg(sayfasayisi) from kitap) |
Örnek 23: Öğrenci tablosunda kaç farklı isimde öğrenci olduğunu listeleyiniz.
1 2 3 | select count(distinct ograd) from ogrenci |
Örnek 24: En fazla sayfası olan kitabın adını ve sayfa sayısını listeleyiniz.
1 2 3 4 | select kitapadi,sayfasayisi from kitap where sayfasayisi= (select max(sayfasayisi) from kitap) |
Örnek 25: En az sayfası olan kitabın adını ve sayfa sayısını listeleyiniz.
1 2 3 4 | select kitapadi,sayfasayisi from kitap where sayfasayisi= (select min(sayfasayisi) from kitap) |
Örnek 26: numarası 15 olan öğrencinin okuduğu toplam sayfa sayısını bulunuz.
1 2 3 4 5 6 | select sum(sayfasayisi) from ogrenci,islem,kitap where ogrenci.ogrno=islem.ogrno and islem.kitapno=kitap.kitapno and ogrenci.ogrno=15 |
Trigger Örnekleri
Örnek 27: 10A sınıfına cinsiyeti kız olan öğrenciler kaydedilebilsin
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | Create trigger cinsiyet on ogrenci for insert As if(exists(Select * from inserted where sinif = '10A' and cinsiyet = 'E')) Begin raiserror('10A sınıfına erkek öğrenci kaydedilemez',1,1) rollback transaction End --Kayıt ekleme test insert into ogrenci(ograd,ogrsoyad,cinsiyet,dtarih,sinif,puan)values('Ali','Veli','E',GETDATE(),'10A',0) --ÖNCE TRİGGER I ÇALIŞTIR |
Örnek 28: Kullanıcı bir kayıt ekledikten sonra ogrenci tablosunu listeleyen trigger oluşturunuz.
1 2 3 4 5 6 7 8 9 10 11 12 13 | --trigger kodu create trigger trg_Listele on ogrenci after insert as begin select * from ogrenci end --Kayıt ekleme örneği insert into ogrenci(ograd,ogrsoyad,cinsiyet,dtarih,sinif,puan)values('Ali','Veli','E',GETDATE(),'10A',0) --ÖNCE TRİGGER I ÇALIŞTIR |
Örnek 29: Silinen öğrenciler başka bir tabloya kaydedilsin
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | --silinen öğrencinin adını soyadını mezun tablosuna kaydediyoruz. create table mezun(ograd varchar(50),ogrsoyad varchar(50)) create trigger trg_SilineniEkle on ogrenci after delete as begin insert into mezun select ograd,ogrsoyad from deleted end delete from ogrenci where ogrno=3 --triggerı test ediyoruz select * from mezun |
Örnek 30: Kitap tablosu güncellenirken eski sayfa sayısı yeni sayfa sayısından fazla olmak zorunda
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | create trigger kitapguncelle on kitap after update as begin if(exists(select * from inserted,deleted where inserted.sayfasayisi=deleted.sayfasayisi or inserted.sayfasayisi > deleted.sayfasayisi)) begin raiserror('Eski sayfa sayısı yeni sayfa sayısından fazla olmak zorunda',1,1) rollback transaction end end --Birinci Kontrol update kitap set puan=20, sayfasayisi=150 where kitapno=1 select * from kitap where kitapno=1 --İkinci Kontrol update kitap set puan=20, sayfasayisi=170 where kitapno=1 select * from kitap where kitapno=1 |
Örnek 31: Ogrenci tablosuna silindi isminde bir alan ekleyiniz. Ogrenci silinmesin silindi alanının değeri 1 olsun –instead of kullanılacak after yerine
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | Alter Table ogrenci add silindi bit null Create trigger ogrenciSil on ogrenci instead of delete as begin update ogrenci set silindi=1 where ogrno in (select ogrno from deleted) end --triggerı çalıştırmayı unutmayın. daha önce oluşturulan triggerlar ile çakışmaması için eskilerini durdurmayı unutmayın delete from ogrenci where ogrno in(8,9) select * from ogrenci where ogrno in (8,9) |
Örnek 32: Tur tablosuna gTarih adında bi alan ekleyin tur tablosunda guncelleme yapıldığında gtarih alanına güncelleme tarihini kaydediniz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | Alter Table tur add gTarih datetime null Create Trigger turGuncelle on tur after update as begin --if(not update(guncellendi))--recursive trigger açıksa hata verememesi için update tur set gTarih=GETDATE() where turno in (select turno from deleted) end update tur set turadi='Başka Bir Tür'where turno=3 select * from tur where turno=3 |
Yorum yap