oracle join işlemleri

Aralık 25, 2011 Yorum bırakın

İki ya da daha fazla tablonun birleştirilip tek bir tablo oluşturulması işlemine join denir.  Join işleminde bilinmesi gereken önemli nokta,  join işlemi yapıldıktan sonra birleştirilen tabloların içeriği değiştirilmez sadece o anki sonuç ekranına yansıtılır.

Not:  Aşağıdaki komutlar kullanarak örneklerin daha iyi anlaşılabilmesi için “calisan” ve “bolum” tabloları oluşturulmuş ve bazı bilgiler eklenmiştir.

CREATE TABLE bolum

(

bolum_no NUMBER(4),

bolum_adi VARCHAR2(16)

);

CREATE TABLE calisan

(

calisan_id NUMBER(4),

calisan_ad_soyad VARCHAR2(32),

bolum_no NUMBER(4)

);

insert into bolum (bolum_no,bolum_adi) values ( 1,’Bakım’);

insert into bolum (bolum_no,bolum_adi) values ( 2,’Tamir’);

insert into bolum (bolum_no,bolum_adi) values ( 3,’Boya’);

insert into calisan(calisan_id,calisan_ad_soyad,bolum_no) values ( 1,’Ahmet Yanılmaz’,1);

insert into calisan(calisan_id,calisan_ad_soyad,bolum_no) values ( 2,’Hasan Ülküm’,2);

insert into calisan(calisan_id,calisan_ad_soyad,bolum_no) values ( 3,’Yasemin Aykanat’,4);

Bu işlemler sonucunda:

Cross Join

İlişkili olsun olmasın birleştirilecek olan tabloların tüm satırlarının listelenmesini sağlar. Sorgu sonucu iki tablonun satır sayısı çarpımları kadardır.

Kullanımı:

SELECT kolon_ad(lar)ı

FROM tablo_1 cross join tablo_2 ;

Örnek :

SELECT calisan_ad_soyad, bolum_adi

FROM calisan CROSS JOIN bolum;

Sonuç tablosu:

Sonuç tablosunda da görüldüğü 3*3=9 row elde edildi.

Inner Join

Inner Join işlemi ile birleştirilecek olan tabloların sütunlarının içerdiği veriler kontrol edilerek kesisim kümesi alınıyor. Aynı işlem “where” komutu kullanılarak da gerçekleştirilebilir. Inner join yerine join yazmak da yeterlidir.

Kullanımı:

SELECT kolon_ad(lar)ı

FROM tablo_1

INNER JOIN tablo_2

ON tablo_1.ortak_kolon=tablo_2.ortak_kolon ;

Örnek:

SELECT calisan_ad_soyad, bolum_adi

FROM calisan INNER JOIN bolum ON calisan.bolum_no = bolum.bolum_no ;

–where ile kullanımı

Select tablo_1.sütun_adı,tablo_2.sütun_adı

from tablo_1,tablo_2

where tablo_1.ortak_sütun=tablo2.ortak_sütun

SELECT calisan_ad_soyad, bolum_adi

FROM calisan, bolum

WHERE calisan.bolum_no = bolum.bolum_no ;

Sonuç Tablosu:

Outer Join

Inner join komutu ile birleştirilecek olan tabloların ilişkili satıları listelenmekteydi fakat outer join komutu ile birleştirilecek tabloların ilişkili olamayan satıları da listelenmektedir. İlişkilendirilen tablolarda karşılığı olmayan satırlar NULL değer içerir. Outer join komutu genelde bilgileri eksik olan kayıtlar gibi değer içermeyen sorgular için kullanılır.

Oracle veri tabanında outer join ler where ifadesi ile kullanılabilmektedir.  Gösterimine geçmeden önce (+) ifadesinin ne anlama geldiğine değinelim. (+) ifadesi yazılan eşitliğin karşı tarafında belirtilen kolonda NULL değerler varsa bunların da sonuç ekranına getirilmesini sağlar.  Örneğin

SELECT e.last_name, d.department_name

FROM employees e, departments d

WHERE e.department_id = d.department_id(+) ;

sorgusu çalıştırıldığın da employees tablosunda department_id leri NULL değerler de sonuç ekranımıza getirilecektir. Buna left outer join denilmektedir.

SELECT e.last_name, d.department_name

FROM employees e, departments d

WHERE e.department_id(+) = d.department_id ;

Sorgusuylada bir  tam tersi olarak departments tablosun da department_id leri NULL değerler de sonuç ekranımıza getirilecektir. Buna right outer join denilmektedir.

Right Outer Join Sonuç Tablosu:

Natural Join

Birleştirilecek tablolarda aynı isim, değerli ve tipli birer tane sütun bulunuyorsa natural join işlemi ile birleştirilme yapılır. Natural join yapılacak tabloların normalize olmaları gerekir. Çalışma şekli iner join ile aynıdır.

Kullanımı:

SELECT kolon_ad(lar)ı

FROM tablo_1 natural join tablo_2 ;

Örnek:

SELECT calisan_ad_soyad, bolum_adi

FROM calisan NATURAL JOIN bolum ;

Sonuç Tablosu:

Join Using

Birleştirilecek olan tablolarda birleştirme işlemini yapılırken hangi sütunun kullanılması  gerektiğini belirtmek istersek join using komutu kullanılır.

Kullanımı:

SELECT kolon_ad(lar)ı

FROM tablo_1 join tablo_2 using(ortak_kolon);

Örnek:

SELECT calisan_ad_soyad, bolum_adi

FROM calisan JOIN bolum USING (bolum_no);

Sonuç Tablosu:

Join On

İçerdiği veriler aynı olan fakat sütün isimleri farklı olan tabloları birleştirmek için join on komutu kullanılır.

Kullanımı:

SELECT kolon_ad(lar)ı

FROM tablo_1 join tablo_2 on (tablo_1.kolon_adı=tablo_2.kolon_adı);

Örnek:

SELECT calisan_ad_soyad, bolum_adi

FROM calisan JOIN bolum ON (calisan.bolum_no = bolum.bolum_no);

Sonuç Tablosu:

Bu yazım da genel olarak en sık kullanılan join komutlarına değinmeye çalıştım. Özellikle outer ve inner join fonksiyonlarına uygulamalarda sıklıkla yer verilmektedir. Küçük bir tavsiye gerek kalmadıkca cross join işleminden uzak durum 🙂

Bir sonraki yazıda görüşmek üzere…

Bu konu ve daha fazlası için:

http://www.datawarehouse.gen.tr/

de bulabilirsiniz.

Reklamlar
Kategoriler:Oracle

Avea Kırmızı Kusak Veda…

Aralık 22, 2011 Yorum bırakın

Son iki yılını yaşayabilidiğim Avea’nın gençlik markası olması yolunda temelini beş yıl önce attığı Kırmızı Kuşak programı yenilenen içerigi ile yoluna AveaMasters olarak devam etmektedir.

Kırmızı Kuşak programı kapsamında  ben dahil bir çok gence büyük emek ve zaman harcayan onları değerli kılan Avea A.Ş yeni belirlediği yolda yine gençleri seven marka olma imajını devam ettirecek gibi gözüküyor.

Kırmızı Kuşak programına dahil olmak elbette ki benim için büyük iş tecrübesi oldu. Fakat İdeavea yarışmasına katılmak orada sunum yapmak o heyecanı yaşamak ayrı bir güzellikti. Umarım AveaMasters’ın  ilerleyen aşamalarında yeni bir fikir yarışması da vardır.  🙂

AveaMasters programı için son başvuru tarihi 22.01.2012 olarak belirlenmiş. Başvuruda bulunacak herkese (ben dahil 🙂 ) şimdiden başarılar…

Ayrıntılar:

http://www.aveamasters.com

Kategoriler:Sosyal Sorumluluk