bu tur sorgular ıc ıce sorgularla yapılabılır.
ornegin elimizde 2 tablo birinde ogrenci tablo su dieride bu bu ogrencilerin notlarını ıceren bır tablo olsun.
ogrenci tablosu
not tablosu sekıldeki gibi olsun.
ornegın notu 60 uzerinde olan ogrencilerin bılgılerı ıstenırse
yapılacak sorgu sekıldekı gıbı olur:
select * from ogrenci where ogr_id
in(select ogr_id from notlar where ogr_not>60) istedigimiz sorguyu yapmıs olduk.
2 sql sorgusunu 'in ' kalıbıyla baglamıs olduk.kin kullanılma amacı içteki sorguda buldugumuz degerleri 2 sorguda butun tabloda tek tek sorgulamasıdır.' NOT IN' kalıbı içtekı sorgudan gelen degerleri ilk sorguda sorgulanmamsını saglar.
ayrıca ıce ıce cumlerde ANY,ALLkalıblarıda kullanılır
select * from notlar
where ogr_not>any(select *from notlar2 where not1>12)
icteki donguden donen degerlerin herhangı bırınden buyuk degeler getiren bı cumlecıktır.
ALL aynı sekılde kullanılmakta fakat any tam tersi olarak calısır.
EXİSTS ve NOT EXİST
bu kalıplar 1 ve 0 dondurur. yani içerdeki sorgudan donen herhangı bır deger varsa dıstakı sorgunun calısmasını saglar yoksa dıstakı dongu calısmaz.select * from ogrenci where exists (select * from notlar where ogr_not=99) sekıllınde kullanılır.eger icerdeki sorgudan hıc kayıt donmezse birinci sorgu calısmaz.



peki diyelim ki benim 4 tablom var.
YanıtlaSilaraba, motor, marka, kategori
bunarın herbiri birbirine bağlantı içeriyor.
benim istediğim kullanıcı markayı seçtiğinde ona ait kategoriler ve her kategori de geçen arabalar ve arabalara ait kaç motor seçeneği olduğunu görmek. bunu nasıl yapabilirim?
bu sorguyu yapmak ıcın oncelıkle tabloların bırbırlerıyle ılıskı tablolarını bılmek gerekıyor.
YanıtlaSil