Sql join turleri

Yazdığınız makaleleri ve üyelerimizin işine yarayacağını düşündüğünüz kodlarınızı gönderebilirsiniz. Bu foruma soru sormayın!
Cevapla
Kullanıcı avatarı
sadettinpolat
Moderator
Mesajlar: 2131
Kayıt: 07 Ara 2003 02:51
Konum: Ankara
İletişim:

Sql join turleri

Mesaj gönderen sadettinpolat »

Sql islemlerinde Join tipleri kafa karistirici olabilir. Asagidaki resim join turlerini daha anlasilir olarak acikliyor.

Resim
"Sevmek, ne zaman vazgececegini bilmektir." dedi, bana.

---
http://sadettinpolat.blogspot.com/
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Re: Sql join turleri

Mesaj gönderen conari »

Selam, CROSS JOIN Örneğini göremedim..
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
Kullanıcı avatarı
sadettinpolat
Moderator
Mesajlar: 2131
Kayıt: 07 Ara 2003 02:51
Konum: Ankara
İletişim:

Re: Sql join turleri

Mesaj gönderen sadettinpolat »

cross join burdaki kume ile gosterme mantigina uymadigi icin eklenmemis olmali.
"Sevmek, ne zaman vazgececegini bilmektir." dedi, bana.

---
http://sadettinpolat.blogspot.com/
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Re: Sql join turleri

Mesaj gönderen sabanakman »

cross join ile inner join aynı kapıya çıkar dersem yalan olmaz sanırım :mrgreen:
Test için SQL Server üzerinde geçici tablo oluşturup örnek çalışma yapınca bu sonuç çıktı.

Kod: Tümünü seç

create table #t1 (id int)
create table #t2 (id int)

insert into #t1 (id) values (1)
insert into #t1 (id) values (2)
insert into #t1 (id) values (3)

insert into #t2 (id) values (2)
insert into #t2 (id) values (3)
insert into #t2 (id) values (4)
Bu kayıtlarla çalışılırsa yukarıdaki küme çalışmalarının kayıt karşılığı örnek uygulama ile görülecektir.

Kod: Tümünü seç

select #t1.id, #t2.id from #t1, #t2 where #t1.id=#t2.id
select #t1.id, #t2.id from #t1 inner join #t2 on #t1.id=#t2.id
select #t1.id, #t2.id from #t1 cross join #t2 where #t1.id=#t2.id

select #t1.id, #t2.id from #t1 left join #t2 on #t1.id=#t2.id

select #t1.id, #t2.id from #t1 right join #t2 on #t1.id=#t2.id

select #t1.id, #t2.id from #t1 full outer join #t2 on #t1.id=#t2.id
En son sabanakman tarafından 04 Şub 2011 10:37 tarihinde düzenlendi, toplamda 2 kere düzenlendi.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Kullanıcı avatarı
sadettinpolat
Moderator
Mesajlar: 2131
Kayıt: 07 Ara 2003 02:51
Konum: Ankara
İletişim:

Re: Sql join turleri

Mesaj gönderen sadettinpolat »

cross join ile inner join ayni kapiya cikmamasi lazim :?:

cross join bildigimiz kartezyen carpima denk geliyor. select * from a,b de ki olay yani...
"Sevmek, ne zaman vazgececegini bilmektir." dedi, bana.

---
http://sadettinpolat.blogspot.com/
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Re: Sql join turleri

Mesaj gönderen sabanakman »

Görüntüde sonuç aynı fakat arka planda çalışma mantığı farkı nedeniyle inner join çok daha üst düzeyde performansla sonuç vermektedir ama sonuç olarak "Küme görüntü karşılığı" inner join ile aynı sonucu veriyor. Where şartı verilmesi şart değil gerçi. O zaman kümenin her elemanına karşılık diğer tüm kümeden oluşuyor :shock: Şimdi uyandım, kartezyen çarpım şeklen nasıl gösteriliyordu ki :?:
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Kullanıcı avatarı
sadettinpolat
Moderator
Mesajlar: 2131
Kayıt: 07 Ara 2003 02:51
Konum: Ankara
İletişim:

Re: Sql join turleri

Mesaj gönderen sadettinpolat »

kartezyen carpimi okulda soyle gosteriyorduk

a kumesinde ki her elemandan b kumesindeki her elemana birer ok ciziyorduk :)

eksiden alinti

a={n,d,h}
b={001,002,003}
olsun

axb kartezyen çarpımı ise şu kümedir:
{ (n,001),(n,002),(n,003),(d,001),(d,002),(d,003),(h,001),(h,002),(h,003) }
"Sevmek, ne zaman vazgececegini bilmektir." dedi, bana.

---
http://sadettinpolat.blogspot.com/
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Re: Sql join turleri

Mesaj gönderen conari »

Gerçekten de o kadar kafa karıştırıcımı acaba :mrgreen:
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
Kullanıcı avatarı
Lost Soul
Üye
Mesajlar: 1064
Kayıt: 01 Nis 2007 02:55
Konum: mekan ANKARA toprak ELAZIĞ
İletişim:

Re: Sql join turleri

Mesaj gönderen Lost Soul »

sadettinpolat yazdı:cross join ile inner join ayni kapiya cikmamasi lazim :?:

cross join bildigimiz kartezyen carpima denk geliyor. select * from a,b de ki olay yani...
left join tableb on 1=1 de cross çarpım yapar :)

Kod: Tümünü seç

INSERT INTO TABLE1 (ID)
            VALUES (1);
INSERT INTO TABLE1 (ID)
            VALUES (2);
INSERT INTO TABLE1 (ID)
            VALUES (3);
INSERT INTO TABLE1 (ID)
            VALUES (4);
INSERT INTO TABLE1 (ID)
            VALUES (5);
INSERT INTO TABLE1 (ID)
            VALUES (6);

Kod: Tümünü seç

INSERT INTO TABLE2 (ID)
            VALUES (1);
INSERT INTO TABLE2 (ID)
            VALUES (2);
INSERT INTO TABLE2 (ID)
            VALUES (3);
INSERT INTO TABLE2 (ID)
            VALUES (4);
INSERT INTO TABLE2 (ID)
            VALUES (5);
INSERT INTO TABLE2 (ID)
            VALUES (6);

Kod: Tümünü seç

select
    table1.id Table1id,
    table2.id table2id
    from table1
    left join table2 on 1=1
Result

Kod: Tümünü seç

1  1  
1  2  
1  3  
1  4  
1  5  
1  6  
2  1  
2  2  
2  3  
2  4  
2  5  
2  6  
3  1  
3  2  
3  3  
3  4  
3  5  
3  6  
4  1  
4  2  
4  3  
4  4  
4  5  
4  6  
5  1  
5  2  
5  3  
5  4  
5  5  
5  6  
6  1  
6  2  
6  3  
6  4  
6  5  
6  6  

36 kayıt
Kullanıcı avatarı
sadettinpolat
Moderator
Mesajlar: 2131
Kayıt: 07 Ara 2003 02:51
Konum: Ankara
İletişim:

Re: Sql join turleri

Mesaj gönderen sadettinpolat »

Lost Soul yazdı: left join tableb on 1=1 de cross çarpım yapar :)
kandirmaca var burda :D
"Sevmek, ne zaman vazgececegini bilmektir." dedi, bana.

---
http://sadettinpolat.blogspot.com/
Cevapla