İç içe Select Kullanımı | (Subquery) SQL İç İçe Sorgu

Select İçerisinde Subquery Kullanımı

Select sorguları düzenli ifadelerdir. Ancak SQL iç içe select kullanımı bir syntaxa sahip değildir,dolayısı ile karmaşıktırlar. SQL iç içe sorgu , zorluk derecesi karmaşıklık derecesine bağlı olarak artan ve aslında PL/SQL veya Oracle SQL ile ilgileniyorsak muhakkak uygulamak durumunda kalacağımız bir başlıktır.



 

Bu yüzden iç içe nasıl kullanabileceğimizle ilgili birkaç örnek paylaşacağım. Şimdi subquery sorgularının SQL sorguları içerisinde nerelerde kullanabileceğimize göz atalım.

İç içe Select Kullanımı |  Kolon Olarak Tanımlama

Select ad "Adı",
soyad "Soyadı",
(select tutar from calisan_maas a where  a.calisan_no= b.calisan_no) "Maaş Tutarı"
from calisan_tab b;

 

Yukarıdaki örnekte gördüğünüz gibi select sorgusunu tıpkı bir kolon ismi gibi tanımladık, yani ilk SQL select sorgumuzu içerisinde bir select kullanarak oluşturmuş olduk. Adına da “Maaş Tutarı” dedik.

(select tutar from calisan_maas a where  a.calisan_no= b.calisan_no)

bu sorgu sonucu her çalışan no için tek bir değer döndürmelidir.

Aksi halde bir satır döndürmesi gereken değer birden çok satır döndürüyor hatası alırız.

İç içe Select Kullanımı | Where Koşulunda Kullanımı

Aynı örnek üzerinden gideceğiz. Bu sayede daha anlaşılır olmayı amaçlıyoruz 🙂

Select ad "Adı",
soyad "Soyadı",>
(select tutar from calisan_maas a where  a.calisan_no = b.calisan_no) "Maaş Tutarı"
from calisan_tab b where b.departman_no = ( select departman_no from departmanlar where departman_no = 30 ); 

 

Yukarıdaki sql ile, departman numarası 30 olan çalışanların Adı, Soyadı, Maaş Tutarı değerlerini getirirken gördüğünüz gibi SQL iç içe sorgu ( literatürdeki adı ile: Select Subquery ) kullandık,

Select ad "Adı",
soyad "Soyadı",
(select tutar from calisan_maas a where  a.calisan_no = b.calisan_no) "Maaş Tutarı"
from calisan_tab b where b.departman_no in (select departman_no from departmanlar where departman_no is not null);

 

bu sayede ise “where” koşuluna departman numarası boş olmayan çalışanların Adı,Soyadı, Maaş Tutarı bilgilerini getirmek istedik.

Diğer bir örneğe gelince, yalnızca eşittir “=” veya “in” , “all” operatörleri ile değil. “>=” ,”<=”, “<>”, “!=” operatörlerini de where koşulunda kullanabiliyoruz. Örneğin;

Select ad "Adı",
soyad "Soyadı",
(select tutar from calisan_maas a where  a.calisan_no = b.calisan_no) "Maaş Tutarı"
from calisan_tab b where b.calisma_suresi > (select calisma_suresi from calisan_gecmisi where calisma_suresi > sysdate -30);

 

Bu örneğimizde ise çalışma süresi 30 günden fazla olan çalışanların Adı,Soyadı, Maaş Tutarı bilgilerini yine select subquery‘ler yardımıyla getirdik. “in” sözcüğü gibi “any” ,”all” sözcüklerini de araştırmanız faydanıza olacaktır 🙂



 

İç içe Select Kullanımı 3- Tablo veya View gibi Kullanımı

Select sorgusu sonucu From tümcesinden sonra kullanıldığında select sorgusu bir tablo veya view gibi davranabilir. Bunun örnekleri çoğaltılabilir. Anlaşılması açısından aşağıdaki örnek faydalı olacaktır. Görüldüğü gibi en dışa yazılan select ifadesine farklı farklı kolonlar da tanımlayabiliyoruz.

Mesela buradaki Rownum bir kolon olarak sonucun satırlarını numaralandıran özel bir sözcüktür.Aynı zamanda “where” koşulunda da kullanabiliriz.

“select * from tablo1 where rownum=1” sorgusu bize tablo1’deki 1. satırı döndürecektir.

Yeni bir ek bilgi olarak ise neden kolon isimlerini Çift Tırnak ile belirliyoruz ? “” Çift Tırnak içerisine yazdığımız kolon isimleri yazdığımız şekilde gözükür. Eğer çift tırnak kullanmasaydık tüm harfler büyük gözükecekti. “Maaş Tutarı” gibi boşluk içeren kolon adlandırması yapamayacaktık.

select c."Adı", c."Soyadı",c."Maaş Tutarı", Rownum "Satır Sayısı" from (Select ad "Adı",
soyad "Soyadı",
(select tutar from calisan_maas a where  a.calisan_no = b.calisan_no) "Maaş Tutarı"
from calisan_tab b where b.calisma_suresi > (select calisma_suresi from calisan_gecmisi where calisma_suresi > sysdate -30) ) c;

 

Örnekleri ile gördüğümüz bu SQL’ler farklı birer select kullanımı dır. Bu tarz kullanımlar bize SQL Sorguları içerisinde özgürlük sağlar.

Yazımızın sonuna geldik. Faydalı olması dileğiyle, eksik gördüğünüz yerleri yorum olarak bırakabilirsiniz.



 

Diğer Oracle Yazılarım için TIKLAYIN.

Diğer Kaynaklar

 

İç İçe Select | Subquery | SQL iç içe Sorgu
İç İçe Select | Subquery | SQL iç içe Sorgu