A Oracle DBA's BLOG

Welcome to my ORACLE DBA blog. You will be Amazing!!!

Thursday, December 8, 2011

Subquery SQL

ALT SORGULAR
Subquery, bir sorgu oluşturulurken, bu sorguya ait kriterleri başka bir sorgu belirleme durumudur. Kısaca sonucu bilinmeyen koşullar olduğunda bu yöntem kullanılır.

Yazılımı:
SELECT..FROM ……WHERE kolon=( SELECTFROM.WHERE.)
Select cümlesi parantez içinde tanımlanır.

=  koşulu kondu ise select cümlesi tek değer döndürmek zorundadır.
Eğer birden fazla değer için koşul konulması gerekirse " in, not in " kelimesi kullanılır. Tek kayıt döndüğünde = yerine >,>=, <, <=, <> kontrol ifadelerice kullanabiliriz.
Bir önemli nokta da koşula eşitlenecek değer 2. Select cümlesi içindeki kolon değerine es olmalıdır. Yani tipleri eşit olmalıdır.
Subquery sorgulama tekniğinde order by kullanılamaz.
NOT:Esittir degeri tek degerlik test oldugu icin birden fazla deger verdigimizde hata verecektir.



select * from newspaper where section = ( select feature from newspaper where page =1);

Alt sorgulari FROM kisminda kullanirsak bu alt sorguya icsel goruntu denir.
Alt sorgulari WHERE kisminda kullanirsak bunada ic ice alt sorgu denir.
select * from newspaper where section < ( select section from newspaper where feature = 'bridge');
select city,snum,cnum from customers where cnum in( select cnum from orders where onum > 3005);
SELECT cnum,cname,city,rating
FROM customers
WHERE city IN ( SELECT CITY
FROM CUSTOMERS
WHERE snum = 1001);
WHERE clause
1) ----ILK BASTA 1.TABLOYA BAKALIM----
select concat(city,' '|| cname) AS city, cnum, snum from customers;

----DAHA SONRA 2.TABLOYA BAKALIM----
SELECT cnum, max(snum)
              FROM customers GROUP BY cnum;

----SIMDI BU IKI TABLOYU BIRLESTIRELIM----

select concat(city,' '|| cname) AS city, cnum, snum from customers
    WHERE (cnum, snum) IN
          (SELECT cnum, max(snum)
              FROM customers GROUP BY cnum)
    ORDER BY snum DESC
2)
----ILK BASTA 1.TABLOYA BAKALIM----
select * from all_tables tabs;
----DAHA SONRA 2.TABLOYA BAKALIM----
select cols.table_name
     from all_tab_columns cols
     where cols.column_name = 'SUPPLIER_ID';
----SIMDI BU IKI TABLOYU BIRLESTIRELIM----

select * from all_tables tabs
where tabs.table_name in     (select cols.table_name
     from all_tab_columns cols
     where cols.column_name = 'SUPPLIER_ID');

BIRBASKA ORNEK
  select tbls.owner, tbls.table_name,
  (select count(column_name) as total_columns
   from all_tab_columns cols
   where cols.owner = tbls.owner
   and cols.table_name = tbls.table_name) subquery2
from all_tables tbls;
·         Alt sorgu herzaman parantez icine alinmalidr.
·         Alt sorgu ya bir tek sutun icermelidr,yada sectigi sutunlari ana sorgudaki parantez icindeki birden fazla sutunla karsilastirmalidir.
·         Sadece bir tek satir ureten alt sorgular tek ve cok degerli operatorlerle kullanilabilir.
·         Birden fazla satir ureten alt sorgular sadece cok degerli operatorlerle kulanilabilir.
·      Bitistirme
·         Oracle’a iki karakter katarini bitistirmesini yada yapistirmasini bildirir.
·         Katar || katar
·         select cname | | city from customers;


No comments:

Post a Comment