6 Temmuz 2010 Salı

Sql iç içe select yapısı

Verıtabanında bazen bir tablodan cektıgımız bılgıler le baska bır tablodakı bilgileri sorgulamak isteyebılırız.
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.

2 yorum:

  1. peki diyelim ki benim 4 tablom var.
    araba, 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?

    YanıtlaSil
  2. bu sorguyu yapmak ıcın oncelıkle tabloların bırbırlerıyle ılıskı tablolarını bılmek gerekıyor.

    YanıtlaSil