ÔÇťINNER JOINÔÇŁ ve ÔÇťOUTER JOINÔÇŁ aras─▒ndaki fark nedir?


Al─▒nan cevaba git


Ayr─▒ca nas─▒l LEFT JOIN , RIGHT JOIN ve FULL JOIN fit?


4478









Cevap say─▒s─▒n─▒ say: 24






─░ki kopya i├žermeyen s├╝tunlara kat─▒ld─▒─č─▒n─▒z─▒ varsayarsak, bu ├žok yayg─▒n bir durumdur:

  • A ve B'nin bir i├ž birle┼čtirmesi, A kesi┼čen B'nin sonucunu verir, yani Venn ┼čemas─▒ kesi┼čiminin i├ž k─▒sm─▒ .

  • A ve B'nin bir d─▒┼č birle┼čimi, A birli─činin B sonu├žlar─▒n─▒, yani bir Venn ┼čemas─▒ birli─činin d─▒┼č k─▒s─▒mlar─▒n─▒ verir.

├ľrnekler

Her birinin tek bir s├╝tunu olan iki tablonuz oldu─čunu ve verilerinizin a┼ča─č─▒daki gibi oldu─čunu varsayal─▒m:

 A    B
-    -
1    3
2    4
3    5
4    6
 

(1,2) 'nin A'ya ├Âzg├╝ oldu─čunu, (3,4)' ├╝n yayg─▒n oldu─čunu ve (5,6) 'n─▒n B ye ├Âzg├╝ oldu─čunu unutmay─▒n.

─░├ž birle┼čim

E┼čde─čer sorgulardan herhangi birini kullanan bir i├ž birle┼čim, iki tablonun, yani ortak noktalar─▒na sahip olduklar─▒ iki s─▒ran─▒n kesi┼čimini verir.

 select * from a INNER JOIN b on a.a = b.b;
select a.*, b.*  from a,b where a.a = b.b;

a | b
--+--
3 | 3
4 | 4
 

Sol d─▒┼č kat─▒lma

Sol d─▒┼č birle┼čtirme, A'daki t├╝m sat─▒rlar─▒ art─▒ B'deki ortak sat─▒rlar─▒ verir.

 select * from a LEFT OUTER JOIN b on a.a = b.b;
select a.*, b.*  from a,b where a.a = b.b(+);

a |  b
--+-----
1 | null
2 | null
3 |    3
4 |    4
 

Sa─č d─▒┼č birle┼čtirme

Sa─č d─▒┼č birle┼čim, B'deki t├╝m sat─▒rlar─▒ ve A'daki ortak sat─▒rlar─▒ verir.

 select * from a RIGHT OUTER JOIN b on a.a = b.b;
select a.*, b.*  from a,b where a.a(+) = b.b;

a    |  b
-----+----
3    |  3
4    |  4
null |  5
null |  6
 

Tam d─▒┼č birle┼čtirme

Tam bir d─▒┼č birle┼čim size A ve B'nin birle┼čimini, yani A'daki t├╝m sat─▒rlar─▒ ve B'deki t├╝m sat─▒rlar─▒ verir. E─čer A'daki bir ┼čey B'de kar┼č─▒l─▒k gelen bir verime sahip de─čilse, B k─▒sm─▒ null olur ve versa.

 select * from a FULL OUTER JOIN b on a.a = b.b;

 a   |  b
-----+-----
   1 | null
   2 | null
   3 |    3
   4 |    4
null |    6
null |    5
 

5946







Venn ┼čemalar─▒ ger├žekten benim i├žin yapmaz.

├ľrne─čin, bir ├žapraz birle┼čtirme ile bir i├ž birle┼čtirme aras─▒nda herhangi bir ayr─▒m g├Âstermezler, ├Ârne─čin veya daha genel olarak farkl─▒ birle┼čtirme tahmini tipleri aras─▒nda herhangi bir ayr─▒m g├Âstermezler veya nas─▒l ├žal─▒┼čacaklar─▒na dair bir ├žer├ževe sa─člarlar.

Mant─▒ksal i┼člemeyi anlaman─▒n bir alternatifi yoktur ve yine de kavramak olduk├ža kolayd─▒r.

  1. ├çapraz birle┼čtirme hayal edin.
  2. Yan on t├╝mce t├╝mce t├╝mce kar┼č─▒ yan t├╝mcesini de─čerlendirmek true
  3. (Sadece d─▒┼č birle┼čtirmeler i├žin) 2. ad─▒mda kaybolan t├╝m d─▒┼č s─▒ralara geri ekleyin.

(Not: pratikte sorgu optimizat├Âr├╝, sorguyu y├╝r├╝tmenin yukar─▒daki tamamen mant─▒ksal tan─▒mlamas─▒ndan daha etkili yollar bulabilir, ancak nihai sonu├ž ayn─▒ olmal─▒)

Tam bir d─▒┼č birle┼čtirmenin animasyonlu bir versiyonuyla ba┼člayaca─č─▒m . Daha fazla a├ž─▒klama izler.


g├Âr├╝nt├╝ tan─▒m─▒n─▒ buraya girin


a├ž─▒klama

Kaynak Tablolar


ba─člant─▒ tan─▒m─▒n─▒ buraya girin

─░lk ├Ânce bir CROSS JOIN (AKA Cartesian Product) ile ba┼člay─▒n . Bunun bir ON c├╝mlesi yoktur ve iki sat─▒rdaki her sat─▒r birle┼čimini d├Ând├╝r├╝r.

SELECT A.Renk, B.B─░R ├çAPRAZ B─░RLE┼×T─░RMEN─░NDEN RENK B


ba─člant─▒ tan─▒m─▒n─▒ buraya girin

─░├ž ve D─▒┼č birle┼čtirmelerin bir "ON" yan t├╝mcesi belirtmesi var.

  • ─░├ž birle┼čim. ├çapraz birle┼čtirme sonucundaki t├╝m sat─▒rlar i├žin "ON" yan t├╝mcesinde ko┼čulu de─čerlendirin. True ise birle┼čtirilen sat─▒r─▒ d├Ând├╝r. Aksi takdirde at─▒n.
  • Sol d─▒┼č kat─▒lma. Daha sonra sol tablodaki sat─▒rlar i├žin i├ž birle┼čtirmeyle ayn─▒d─▒r; bunlar, sa─č tablo s├╝tunlar─▒ i├žin NULL de─čerleriyle ├ž─▒kt─▒s─▒ olan hi├žbir ┼čeyle e┼čle┼čmez.
  • Sa─č D─▒┼č Kat─▒lma. Daha sonra sa─č tablodaki sat─▒rlar i├žin i├ž birle┼čtirmeyle ayn─▒d─▒r; soldaki tablo s├╝tunlar─▒ i├žin NULL de─čerleriyle bunlar─▒ ├ž─▒karan hi├žbir ┼čeyle e┼čle┼čmez.
  • Tam D─▒┼č Kat─▒lma. ─░├ž birle┼čtirmeyle ayn─▒ ┼čekilde, sol d─▒┼č birle┼čtirmede oldu─ču gibi e┼čle┼čmemi┼č sol s─▒ralar─▒ ve sa─č d─▒┼č birle┼čtirmeye g├Âre sa─č e┼čle┼čmeyen sat─▒rlar─▒ koru.

Baz─▒ ├Ârnekler

SELECT A.Colour, B. INNER JO─░N B ├ťZER─░NDEN B─░R RENKL─░ ALAN A.Renk = B.Renk

Yukar─▒daki klasik equi birle┼čimidir.


─░├ž birle┼čim

Animasyonlu S├╝r├╝m


g├Âr├╝nt├╝ tan─▒m─▒n─▒ buraya girin

SELECT A.Colour, B. INNER JOIN B ├ťZER─░NDEK─░ B─░R RENKL─░ ALAN A.COLUR DE─×─░L ('Ye┼čil', 'Mavi')

─░├ž birle┼čme ko┼čulu mutlaka bir e┼čitlik ko┼čulu olmak zorunda de─čildir ve tablolar─▒n her ikisinden de (veya hatta her ikisinden) referans s├╝tunlar─▒na ihtiya├ž duymaz. A.Colour NOT IN ('Green','Blue') ├çapraz birle┼čtirme d├Ân├╝┼člerinin her bir sat─▒r─▒nda de─čerlendirme yap─▒lmas─▒.


i├ž 2

SELECT A.Colour, B. INNER JO─░N B ├ťZER─░NDEN RENKLENMEK 1 = 1

Birle┼čtirme ko┼čulu, ├žapraz birle┼čtirme sonucundaki t├╝m sat─▒rlar i├žin true olarak de─čerlendirilir, bu nedenle bu bir ├žapraz birle┼čtirme ile ayn─▒d─▒r. 16 sat─▒r─▒n resmini tekrar etmeyece─čim.

SELECT A.Colour, B. A SOL OUTER'DEN DO─×RU B─░RLE┼×T─░RMEDEN B JOUR A.Colour = B.Colour

D─▒┼č birle┼čtirmeler, soldaki tablodan bir sat─▒r (sol birle┼čtirme i├žin), sa─čdaki tablodan hi├žbir sat─▒r ile birle┼čmemesi ve sonu├žta elde edilen NULL de─čerlerle korunmu┼č olmas─▒ haricinde, i├ž birle┼čtirmelerle ayn─▒ ┼čekilde mant─▒ksal olarak de─čerlendirilir. sa─č s├╝tunlar.


LOJ

SELECT A.Colour, B. A SOL OUTER'DEN SONRA B─░RLE┼×T─░RD─░─×─░N─░ZDE B B. A.

Bu sadece ├Ânceki sonucu yaln─▒zca sat─▒rlar─▒ d├Ând├╝recek ┼čekilde k─▒s─▒tlar B.Colour IS NULL . Bu ├Âzel durumda, bunlar sa─č masada e┼čle┼čmedi─činden korunmu┼č olan sat─▒rlar olacakt─▒r ve sorgu, tabloda e┼čle┼čmeyen tek k─▒rm─▒z─▒ s─▒ray─▒ d├Ând├╝r├╝r B . Bu, anti yar─▒ birle┼čme olarak bilinir.

IS NULL Test i├žin null yap─▒lamayan veya birle┼čtirme ko┼čulunun NULL , bu kal─▒b─▒n do─čru ├žal─▒┼čmas─▒ i├žin de─čerlerin d─▒┼članmas─▒n─▒ sa─člad─▒─č─▒ ve bunun i├žin NULL de─čere sahip olan sat─▒rlar─▒ geri getirmekten ka├ž─▒nmas─▒n─▒ sa─člayan bir s├╝tun se├žmek ├Ânemlidir. e┼čle┼čmeyen sat─▒rlara ek olarak s├╝tun.


loj null

SELECT A.Colour, B. DO─×RU B─░R OUTER'DEN RENKL─░ B─░RLE┼×T─░RME

Sa─č d─▒┼č birle┼čtirmeler, sa─č tablodaki e┼čle┼čen olmayan s─▒ralar─▒ koruduklar─▒ ve sol s├╝tunlar─▒ bo┼č b─▒rakmad─▒klar─▒ i├žin sol d─▒┼č ba─člant─▒lara benzer ┼čekilde hareket eder.


ROJ

SELECT A.Colour, B. TAM OUTER DI┼×INDAN RENKLI B─░RLE┼×T─░RMEYE BA─×LI A.Colour = B.Renk

Tam d─▒┼č birle┼čtirmeler, sol ve sa─č birle┼čtirmelerin davran─▒┼č─▒n─▒ birle┼čtirir ve e┼čle┼čmeyen sat─▒rlar─▒ hem sol hem de sa─č tablolardan korur.


FOJ

SELECT A.Colour, B. TAM OUTER DI┼×INDAN RENKLI B─░RLE┼×T─░RME B ON 1 = 0

├çapraz ba─člant─▒daki hi├žbir sat─▒r 1=0 y├╝klem ile e┼čle┼čmiyor. Her iki taraftan da b├╝t├╝n s─▒ralar, di─čer taraftaki tablodan s├╝tunlarda NULL olan normal d─▒┼č birle┼čtirme kurallar─▒ kullan─▒larak korunur.


FOJ 2

KOLEJ─░ SE├ç (A.Renk, B.Renk) OLARAK TAM DI┼× ORTAMDAN RENK OLARAK Renk 1 = 0

Yukar─▒daki sorguya yap─▒lan k├╝├ž├╝k bir de─či┼čiklikle, biri UNION ALL iki tablodan birini sim├╝le edebilir .


B─░RL─░K T├ťM├ť

SELECT A.Colour, B. A SOL OUTER'DEN SONRA B─░RLE┼×T─░RD─░─×─░NDE B├ťLTEN A.Brenci = B.RENER NEREDE

Not o WHERE f─▒kra (varsa) mant─▒ksal olarak kat─▒ld─▒ktan sonra ├žal─▒┼č─▒r. S─▒k kar┼č─▒la┼č─▒lan bir hata, sol d─▒┼č birle┼čtirme ger├žekle┼čtirmektir ve ard─▒ndan sa─č tablodaki e┼čle┼čmeyen sat─▒rlar─▒ d─▒┼člayan biten bir ko┼čulu olan bir WHERE yan t├╝mcesi i├žermelidir. Yukar─▒dakiler d─▒┼č birle┼čtirme i┼člemini ger├žekle┼čtirir ...


LOJ

... Ve sonra "Where" yan t├╝mcesi ├žal─▒┼č─▒r. NULL= 'Green' do─čru olarak de─čerlendirilmez, bu nedenle d─▒┼č birle┼čim taraf─▒ndan korunan s─▒ra, (bir mavi ile birlikte) at─▒l─▒r, b├Âylece birle┼čik bir i├ž k─▒sma d├Ân├╝┼č├╝r.


LOJtoInner

Ama├ž, yaln─▒zca B'nin Renkleri Ye┼čil oldu─ču sat─▒rlar ve A'n─▒n t├╝m sat─▒rlar─▒ ne olursa olsun, do─čru s├Âzdizimi olacakt─▒r.

SELECT A.Colour, B. A SOL OUTER'DEN SONRA B─░RLE┼×T─░RMEYE B─░N─░ A.Colour = B.Renk ve B.Renk = 'Ye┼čil'


g├Âr├╝nt├╝ tan─▒m─▒n─▒ buraya girin

SQL Fiddle

SQLFiddle.com'da canl─▒ yay─▒n yapan bu ├Ârneklere bak─▒n .


671







Birle┼čimler , verileri iki tablodan birle┼čtirmek i├žin kullan─▒l─▒r ve sonu├žta yeni bir ge├žici tablo olur. Birle┼čimler, bir birle┼čtirme ger├žekle┼čtirmek i├žin kullan─▒lacak ko┼čulu belirten bir y├╝klem denilen bir ┼čey temelinde ger├žekle┼čtirilir. Bir i├ž birle┼čim ve bir d─▒┼č birle┼čim aras─▒ndaki fark, bir i├ž birle┼čimin sadece birle┼čim belirtisine dayanarak ger├žekten e┼čle┼čen sat─▒rlar─▒ d├Ând├╝rmesidir. ├ľrne─čin; ├çal─▒┼čan ve Konum tablosunu ele alal─▒m:


g├Âr├╝nt├╝ tan─▒m─▒n─▒ buraya girin

─░├ž Birle┼čtirme: - ─░├ž birle┼čtirme, birle┼čtirme ├Âng├Âr├╝s├╝n├╝ temel alan iki tablonun s├╝tun ├Â─čelerini ( ├çal─▒┼čan ve Konum )birle┼čtirerek yeni bir sonu├ž tablosu olu┼čturur. Sorgu, birle┼čtirme-├Âng├Âr├╝s├╝n├╝ sa─člayan t├╝m sat─▒r ├žiftlerini bulmak i├žinher bir ├çal─▒┼čan s─▒ras─▒n─▒ her bir Konum sat─▒r─▒ ilekar┼č─▒la┼čt─▒r─▒r. Join-yordam─▒ NULL olmayan de─čerlerin e┼čle┼čtirilmesiyle sa─čland─▒─č─▒nda, her bir ├çal─▒┼čan ve Konum sat─▒r─▒ ├žifti i├žin s├╝tun de─čerleribir sonu├ž sat─▒r─▒nda birle┼čtirilir. ─░┼čte bir i├ž kat─▒l─▒m i├žin SQL'in neye benzeyece─či:

 select  * from employee inner join location on employee.empID = location.empID
OR
select  * from employee, location where employee.empID = location.empID
 

┼×imdi, i┼čte o SQL ├žal─▒┼čt─▒rman─▒n sonucu ┼č├Âyle olurdu:
g├Âr├╝nt├╝ tan─▒m─▒n─▒ buraya girin


g├Âr├╝nt├╝ tan─▒m─▒n─▒ buraya girin

D─▒┼č Birle┼čtirme: - Bir d─▒┼č birle┼čim, birle┼čtirilmi┼č iki tablodaki her bir kayd─▒n e┼čle┼čen bir kayda sahip olmas─▒n─▒ gerektirmez. Birle┼čtirilen tablo, her bir kayd─▒ tutar - ba┼čka e┼čle┼čen kay─▒t olmasa bile. D─▒┼č ba─člant─▒lar, hangi masan─▒n s─▒ralar─▒n─▒n tutuldu─čuna ba─čl─▒ olarak (sol veya sa─č) sol d─▒┼č birle┼čmelere ve sa─č d─▒┼č birle┼čimlere b├Âl├╝n├╝r.

Sol D─▒┼č Kat─▒lma: - Tablolar i├žin sol d─▒┼č birle┼čtirmenin (veya yaln─▒zca sol birle┼čtirmenin) sonucu ├çal─▒┼čan ve Konum , kat─▒l─▒m ko┼čulu e┼čle┼čen bir kay─▒t bulamazsa,her zaman "sol" tablonun ( ├çal─▒┼čan )t├╝m kay─▒tlar─▒n─▒ i├žerir. "sa─č" tablo ( Konum ). Sol d─▒┼č birle┼čim i├žin SQL'nin yukar─▒daki tablolar─▒ kullanarak nas─▒l g├Âr├╝nd├╝─č├╝n├╝ a┼ča─č─▒da bulabilirsiniz:

 select  * from employee left outer join location on employee.empID = location.empID;
//Use of outer keyword is optional
 

┼×imdi, i┼čte bu SQL ├žal─▒┼čt─▒rman─▒n sonucunun nas─▒l g├Âr├╝nd├╝─č├╝:
g├Âr├╝nt├╝ tan─▒m─▒n─▒ buraya girin


g├Âr├╝nt├╝ tan─▒m─▒n─▒ buraya girin

Sa─č D─▒┼č Birle┼čtirme: - Sa─č d─▒┼č birle┼čtirme (veya sa─č birle┼čtirme), ters ├ževrilmi┼č tablolar─▒n i┼členmesi haricinde, bir sol d─▒┼č birle┼čmeyi yak─▒ndan and─▒r─▒r. "Sa─č" tablodaki ( Konum )her sat─▒ren az bir kez birle┼čtirilmi┼č tabloda g├Âr├╝necektir. "Sol" tablosu (hi├žbir e┼čle┼čtirme sat─▒r halinde ├çal─▒┼čan ) var, BO┼× gelen s├╝tunlarda g├Âr├╝n├╝r ├çal─▒┼čan e┼čle┼čme sahip olan kay─▒tlar i├žin yer . SQL b├Âyle g├Âr├╝n├╝yor:

 select * from employee right outer join location  on employee.empID = location.empID;
//Use of outer keyword is optional
 

Yukar─▒daki tablolar─▒ kullanarak, bir sa─č d─▒┼č birle┼čmenin sonu├ž k├╝mesinin nas─▒l g├Âr├╝nd├╝─č├╝n├╝ g├Âsterebiliriz:


g├Âr├╝nt├╝ tan─▒m─▒n─▒ buraya girin


g├Âr├╝nt├╝ tan─▒m─▒n─▒ buraya girin

Tam D─▒┼č Kat─▒lma : - Tam D─▒┼č Kat─▒lma veya Tam Kat─▒lma, bir birle┼čme sonu├žlar─▒na e┼čle┼čen olmayan sat─▒rlar─▒ dahil ederek e┼čle┼čmeyen bilgileri tutmakt─▒r, tam bir d─▒┼č birle┼čtirmeyi kullan─▒n. Di─čer tablonun uygun bir de─čeri olup olmad─▒─č─▒na bak─▒lmaks─▒z─▒n her iki tablodaki t├╝m sat─▒rlar─▒ i├žerir.
g├Âr├╝nt├╝ tan─▒m─▒n─▒ buraya girin

G├Âr├╝nt├╝ Kayna─č─▒

MySQL 8.0 Ba┼čvuru K─▒lavuzu - S├Âzdizimine Kat─▒l─▒n

Oracle Join i┼člemleri


159







─░├ž birle┼čim

Yaln─▒zca e┼čle┼čen sat─▒rlar─▒ al, yani A intersect B .


Resim tan─▒m─▒n─▒ buraya girin

 SELECT *
FROM dbo.Students S
INNER JOIN dbo.Advisors A
    ON S.Advisor_ID = A.Advisor_ID
 

Sol d─▒┼č kat─▒lma

─░lk tablodaki t├╝m kay─▒tlar─▒ ve ikinci tablodaki birle┼čtirilen tu┼člarla e┼čle┼čen t├╝m kay─▒tlar─▒ se├žin.


Resim tan─▒m─▒n─▒ buraya girin

 SELECT *
FROM dbo.Students S
LEFT JOIN dbo.Advisors A
    ON S.Advisor_ID = A.Advisor_ID
 

Tam D─▒┼č Kat─▒lma

─░kinci tablodaki t├╝m kay─▒tlar─▒ ve ilk tablodaki birle┼čtirilen tu┼člarla e┼čle┼čen t├╝m kay─▒tlar─▒ se├žin.


Resim tan─▒m─▒n─▒ buraya girin

 SELECT *
FROM dbo.Students S
FULL JOIN dbo.Advisors A
    ON S.Advisor_ID = A.Advisor_ID
 

Referanslar


128







Basit bir deyi┼čle:

Bir i├ž birle┼čim e┼čle┼čti sat─▒rlar─▒ yaln─▒zca almak.

Bir d─▒┼č birle┼čim birle┼čtirilmi┼č tablolar─▒ bir tablodan di─čer t├╝m tablodaki t├╝m sat─▒rlar─▒ al─▒rken ... sonu├ž hangisini kulland─▒─č─▒n─▒za ba─čl─▒d─▒r:

  • Sol : Sa─č tablodaki e┼čle┼čen sat─▒rlar ve soldaki tablodaki t├╝m sat─▒rlar

  • Sa─č : Soldaki tablodaki sat─▒rlar ve sa─čdaki tablodaki t├╝m sat─▒rlar veya

  • Tam : T├╝m tablolardaki t├╝m sat─▒rlar. Bir e┼čle┼čme olup olmamas─▒ ├Ânemli de─čil


108







─░├ž birle┼čtirme, yaln─▒zca birle┼čimin di─čer (sa─č) taraf─▒nda e┼čle┼čen bir kay─▒t varsa sat─▒rlar─▒ g├Âsterir.

Bir (sol) d─▒┼č birle┼čim, birle┼čimin di─čer (sa─č) taraf─▒nda e┼čle┼čen bir sat─▒r olmasa bile, sol taraftaki her kay─▒t i├žin sat─▒rlar g├Âsterir. E┼čle┼čen bir sat─▒r yoksa, di─čer (sa─č) taraf i├žin s├╝tunlar NULL g├Âsterir.


101







─░├ž birle┼čtirmeler, birle┼čtirilen tabloda ilgili kimli─če sahip bir kayd─▒n bulunmas─▒n─▒ gerektirir.

D─▒┼č ba─člant─▒lar, sa─č taraf i├žin hi├žbir ┼čey bulunmasa bile, sol taraf i├žin kay─▒tlar d├Ând├╝r├╝r.

├ľrne─čin, bir Sipari┼čler ve bir OrderDetails tablosu var. Bir "OrderID" ile ili┼čkilidirler.

Emirler

  • Sipari┼č Kimli─či
  • M├╝┼čteri ad─▒

Sipari┼č detaylar─▒

  • OrderDetailID
  • Sipari┼č Kimli─či
  • ├ťr├╝n ad─▒
  • Adet
  • Fiyat

Talep

 SELECT Orders.OrderID, Orders.CustomerName
  FROM Orders 
 INNER JOIN OrderDetails
    ON Orders.OrderID = OrderDetails.OrderID
 

sadece OrderDetails tablosunda da bir ┼čeyler i├žeren Emirleri iade edecektir.

OUTER LEFT JOIN olarak de─či┼čtirirseniz

 SELECT Orders.OrderID, Orders.CustomerName
  FROM Orders 
  LEFT JOIN OrderDetails
    ON Orders.OrderID = OrderDetails.OrderID
 

sonra OrderDetails kay─▒tlar─▒ olmasa bile Sipari┼čler tablosundan kay─▒tlar─▒ d├Ând├╝r├╝r.

Bunu, nerede bir c├╝mle ekleyerek olas─▒ bir art─▒k sipari┼č belirten hi├žbir OrderDetails i├žermeyen Emirleri bulmak i├žin kullanabilirsiniz WHERE OrderDetails.OrderID IS NULL .


76







Basit bir deyi┼čle:

─░├ž birle┼čtirme -> SADECE ana ve alt tablolardan ortak kay─▒tlar al─▒n. Ana tablonun birincil anahtar─▒ ├çocuk tablosundaki Yabanc─▒ anahtarla e┼čle┼čir.

Sol kat─▒lmak ->

s├Âzde kod

 1.Take All records from left Table
2.for(each record in right table,) {
    if(Records from left & right table matching on primary & foreign key){
       use their values as it is as result of join at the right side for 2nd table.
    } else {
       put value NULL values in that particular record as result of join at the right side for 2nd table.
    }
  }
 

Sa─č birle┼čim : Sol birle┼čmenin tam tersi. Masan─▒n ad─▒n─▒ LEFT JOIN'e sa─č tarafta Sa─ča birle┼čtirme'de koyun, LEFT JOIN ile ayn─▒ ├ž─▒kt─▒y─▒ elde edin.

D─▒┼č birle┼čtirme : T├╝m kay─▒tlar─▒ Her iki tabloda da g├Âster No matter what . Sol tablodaki kay─▒tlar, Birincil, Forieign anahtar─▒na ba─čl─▒ olarak sa─č tabloyla e┼čle┼čmiyorsa, birle┼čtirme sonucu NULL de─čerini kullan─▒n.

├ľrnek :


├ľrnek

┼×imdi 2 tablo i├žin varsayal─▒m

1.employees , 2.phone_numbers_employees

 employees : id , name 

phone_numbers_employees : id , phone_num , emp_id   
 

Burada ├žal─▒┼čanlar masas─▒, Master masas─▒, phone_numbers_employees, ├žocuk masas─▒d─▒r (├žocuk masas─▒n─▒ emp_id birbirine ba─člayan yabanc─▒ anahtar olarak bulunur employee.id .)

─░├ž birle┼čimler

SADECE 2 tablonun kay─▒tlar─▒n─▒ al─▒n . ├çal─▒┼čan tablosunun birincil anahtar─▒ (kimli─či), ├çocuk masas─▒n─▒n yabanc─▒ anahtar─▒ ile e┼čle┼čiyor . Phone_numbers_employees (emp_id) .

Yani sorgu ┼č├Âyle olurdu:

 SELECT e.id , e.name , p.phone_num FROM employees AS e INNER JOIN phone_numbers_employees AS p ON e.id = p.emp_id;
 

Burada, yukar─▒da a├ž─▒kland─▒─č─▒ gibi sadece birincil anahtar = yabanc─▒ anahtardaki e┼čle┼čen sat─▒rlar─▒ al─▒n. Birincil anahtardaki e┼čle┼čmeyen sat─▒rlar = yabanc─▒ anahtar birle┼čtirme sonucu atlan─▒r.

Sol birle┼čimler :

Sol birle┼čim, sa─č masada e┼čle┼čen bir sat─▒r olup olmad─▒─č─▒na bak─▒lmaks─▒z─▒n, sol tablonun t├╝m sat─▒rlar─▒n─▒ korur.

 SELECT e.id , e.name , p.phone_num FROM employees AS e LEFT JOIN phone_numbers_employees AS p ON e.id = p.emp_id;
 

D─▒┼č birle┼čtirmeler :

 SELECT e.id , e.name , p.phone_num FROM employees AS e OUTER JOIN phone_numbers_employees AS p ON e.id = p.emp_id;
 

Diyagramatik olarak g├Âr├╝n├╝yor:


Diyagram


64








Bu kat─▒l─▒m i├žin iyi bir a├ž─▒klama

Bu, her t├╝rl├╝ kat─▒l─▒m i├žin iyi bir ┼čematik a├ž─▒klamad─▒r.

kaynak: http://ssiddique.info/understanding-sql-joins-in-easy-way.html


56







INNER JOIN T├╝m sat─▒rlar─▒ e┼čle┼čmenin oldu─ču her iki tablodan d├Ând├╝rmek i├žin kullan─▒rs─▒n─▒z . Yani sonu├žta ortaya ├ž─▒kan tabloda b├╝t├╝n sat─▒r ve s├╝tunlar─▒n de─čerleri olacakt─▒r.

Sonu├žta OUTER JOIN ortaya ├ž─▒kan tabloda bo┼č s├╝tunlar bulunabilir. D─▒┼č birle┼čtirme LEFT veya olabilir RIGHT .

LEFT OUTER JOIN ─░kinci tabloda e┼čle┼čme olmasa bile ilk sat─▒rdaki t├╝m sat─▒rlar─▒ d├Ând├╝r├╝r.

RIGHT OUTER JOIN ─░lk tabloda e┼čle┼čme olmasa bile, t├╝m sat─▒rlar─▒ ikinci tablodan d├Ând├╝r├╝r.


55







INNER JOIN ─░ki tablonun kar┼č─▒la┼čt─▒r─▒lmas─▒nda en az bir e┼čle┼čme olmas─▒ gerekir. ├ľrne─čin, A ve B ile g├Âsterilen A ve B tablolar─▒ (A kav┼ča─č─▒ B).

LEFT OUTER JOIN ve LEFT JOIN ayn─▒. Her iki tabloda da e┼čle┼čen t├╝m kay─▒tlar─▒ ve sol tablonun t├╝m olanaklar─▒n─▒ verir.

Benzer ┼čekilde RIGHT OUTER JOIN ve RIGHT JOIN ayn─▒d─▒r. Her iki tabloda da e┼čle┼čen t├╝m kay─▒tlar─▒ ve do─čru tablonun t├╝m olanaklar─▒n─▒ verir.

FULL JOIN ├žo─čaltman─▒n LEFT OUTER JOIN ve RIGHT OUTER JOIN ├žo─čalt─▒lmas─▒n─▒n birle┼čimidir .


52


2010-09-02





Cevap, her birinin anlam─▒nda, sonu├žlar─▒nda da.

Not:
─░├žinde veya SQLite yok . Ve ayr─▒ca orada yok . RIGHT OUTER JOIN FULL OUTER JOIN
MySQL FULL OUTER JOIN

Cevab─▒m yukar─▒daki Not dayanmaktad─▒r .

Bunun gibi iki tablonuz oldu─čunda:

 --[table1]               --[table2]
id | name                id | name
---+-------              ---+-------
1  | a1                  1  | a2
2  | b1                  3  | b2
 

CROSS JOIN / OUTER JOIN:
Bu tablolar─▒n t├╝m├╝n├╝n verilerini ┼ču CROSS JOIN ya da bununla birlikte , kullanabilirsiniz:

 SELECT * FROM table1, table2
--[OR]
SELECT * FROM table1 CROSS JOIN table2

--[Results:]
id | name | id | name 
---+------+----+------
1  | a1   | 1  | a2
1  | a1   | 3  | b2
2  | b1   | 1  | a2
2  | b1   | 3  | b2
 

INNER JOIN:
Yukar─▒daki sonu├žlara table1.id = table2.id istedi─činiz gibi bir ili┼čkiye dayanarak bir filtre eklemek istedi─činizde INNER JOIN :

 SELECT * FROM table1, table2 WHERE table1.id = table2.id
--[OR]
SELECT * FROM table1 INNER JOIN table2 ON table1.id = table2.id

--[Results:]
id | name | id | name 
---+------+----+------
1  | a1   | 1  | a2
 

LEFT [OUTER] JOIN:
Yukar─▒daki sonu├žtaki tablolardan birinin t├╝m sat─▒rlar─▒na sahip olmak istedi─činizde - ayn─▒ ili┼čkide - kullanabilirsiniz LEFT JOIN :
( DO─×RU B─░RLE┼×─░M i├žin sadece tablolar─▒n yerlerini de─či┼čtirin)

 SELECT * FROM table1, table2 WHERE table1.id = table2.id 
UNION ALL
SELECT *, Null, Null FROM table1 WHERE Not table1.id In (SELECT id FROM table2)
--[OR]
SELECT * FROM table1 LEFT JOIN table2 ON table1.id = table2.id

--[Results:]
id | name | id   | name 
---+------+------+------
1  | a1   | 1    | a2
2  | b1   | Null | Null
 

TAM OUTER JOIN:
Sonu├žlar─▒n─▒zda di─čer tablonun t├╝m sat─▒rlar─▒n─▒ g├Ârmek istedi─činizde kullanabilirsiniz FULL OUTER JOIN :

 SELECT * FROM table1, table2 WHERE table1.id = table2.id
UNION ALL
SELECT *, Null, Null FROM table1 WHERE Not table1.id In (SELECT id FROM table2)
UNION ALL
SELECT Null, Null, * FROM table2 WHERE Not table2.id In (SELECT id FROM table1)
--[OR] (recommended for SQLite)
SELECT * FROM table1 LEFT JOIN table2 ON table1.id = table2.id
UNION ALL
SELECT * FROM table2 LEFT JOIN table1 ON table2.id = table1.id
WHERE table1.id IS NULL
--[OR]
SELECT * FROM table1 FULL OUTER JOIN table2 On table1.id = table2.id

--[Results:]
id   | name | id   | name 
-----+------+------+------
1    | a1   | 1    | a2
2    | b1   | Null | Null
Null | Null | 3    | b2
 

─░htiyac─▒n─▒z oldu─ču gibi, ihtiyac─▒n─▒z─▒ kar┼č─▒layan her birini se├žersiniz;).


41







─░├ž birle┼čim.

Bir birle┼čtirme, iki tablodaki sat─▒rlar─▒ birle┼čtiriyor. Bir i├ž birle┼čim sorguda belirtti─činiz ├Âl├ž├╝tleri temel alarak iki tabloyu e┼čle┼čtirmeye ├žal─▒┼č─▒r ve yaln─▒zca e┼čle┼čen sat─▒rlar─▒ d├Ând├╝r├╝r. Birle┼čimdeki ilk tablodan bir sat─▒r ikinci tablodaki iki sat─▒rla e┼čle┼čirse, sonu├žlarda iki sat─▒r d├Ând├╝r├╝l├╝r. ─░lk tabloda ikinci sat─▒rla e┼čle┼čmeyen bir sat─▒r varsa, d├Ând├╝r├╝lmez; Ayn─▒ ┼čekilde, ikinci tabloda ilk sat─▒rda e┼čle┼čmeyen bir sat─▒r varsa, d├Ând├╝r├╝lmedi.

D─▒┼č Birle┼čtirme

Bir kat─▒lmak sol ikinci tablodaki sat─▒rlar─▒n ilk tablodan sat─▒rlar─▒ ma├ž bulmak i├žin giri┼čimlerini. Bir e┼čle┼čme bulamazsa, ilk tablodaki s├╝tunlar─▒ d├Ând├╝r├╝r ve ikinci tablodaki s├╝tunlar─▒ bo┼č b─▒rak─▒r (bo┼č).


33







Di─čer cevaplarda performans ve optimize edici hakk─▒nda fazla ayr─▒nt─▒ g├Âremiyorum.

Bazen sadece INNER JOIN ili┼čkisel oldu─čunu bilmek iyidir, bu da optimize edicinin oynamak i├žin en fazla se├žene─če sahip oldu─ču anlam─▒na gelir. Ayn─▒ sonucu daha h─▒zl─▒ tutmas─▒ i├žin birle┼čtirme s─▒ras─▒n─▒ yeniden d├╝zenleyebilir. Doktoru ├žo─ču birle┼čtirme modunu kullanabilir.

Genellikle INNER JOIN farkl─▒ t├╝rden ba─člant─▒lar yerine kullanmaya ├žal─▒┼čmak iyi bir uygulamad─▒r . (Elbette beklenen sonu├ž k├╝mesini g├Âz ├Ân├╝ne alarak m├╝mk├╝nse.)

Bu garip ili┼čkisel davran─▒┼č hakk─▒nda birka├ž iyi ├Ârnek ve a├ž─▒klama var:


25








g├Âr├╝nt├╝ tan─▒m─▒n─▒ buraya girin

  • INNER JOIN iki veya daha fazla masa i├žin en tipik birle┼čtirme. Hem ON ON anahtar anahtar─▒nda hem de forignkey ili┼čkisinde veri e┼čle┼čmesini d├Ând├╝r├╝r.
  • OUTER JOIN ile ayn─▒d─▒r INNER JOIN , ancak NULL ResultSet'teki verileri de i├žerir .
    • LEFT JOIN = INNER JOIN + Sa─čdaki tabloyla e┼čle┼čmeyen sol tablonun verileri Null .
    • RIGHT JOIN = INNER JOIN + Sa─čdaki tablo ile Null e┼čle┼čmeyen veriler , soldaki tablo ile e┼čle┼čiyor.
    • FULL JOIN = INNER JOIN + Hem sa─č hem de sol tablolardaki e┼čle┼čmemi┼č e┼čle┼čmemi┼č veriler Null .
  • Kendili─činden birle┼čtirme, bir tablo kendi i├žinde verilere ba┼čvuran bir tablo kendini birle┼čtirme olarak bildi─činde, SQL'de bir anahtar kelime de─čildir. Kullan─▒lmas─▒ INNER JOIN ve OUTER JOIN biz ├Âz sorgular─▒ kat─▒lmak yazabilir.

├ľrne─čin:

 SELECT * 
FROM   tablea a 
       INNER JOIN tableb b 
               ON a.primary_key = b.foreign_key 
       INNER JOIN tablec c 
               ON b.primary_key = c.foreign_key 
 

24







Hassas algoritmas─▒ INNER JOIN , LEFT/RIGHT OUTER JOIN a┼ča─č─▒daki gibidir:

  1. ─░lk tablodaki her sat─▒r─▒ al─▒n: a
  2. Yan─▒ndaki ikinci tablodaki t├╝m sat─▒rlar─▒ g├Âz ├Ân├╝nde bulundurun: (a, b[i])
  3. Maddeyi ON ... her ├žifte kar┼č─▒ de─čerlendirin : ON( a, b[i] ) = true/false?
    • Ko┼čul de─čerlendirildi─činde true , birle┼čtirilmi┼č sat─▒r─▒ geri d├Ând├╝r├╝n (a, b[i]) .
    • ─░kinci tablonun sonuna herhangi bir e┼čle┼čme olmadan ula┼čt─▒─č─▒nda, bu bir di─čer tablonun t├╝m s├╝tunlar─▒n─▒ kullanarak Outer Join bir (sanal) ├žift d├Ând├╝r├╝r Null : (a, Null) LEFT d─▒┼č birle┼čim veya (Null, b) RIGHT d─▒┼č birle┼čim i├žin. Bu, ilk tablonun t├╝m sat─▒rlar─▒n─▒n nihai sonu├žlarda bulunmas─▒n─▒ sa─člamak i├žindir.

Not: ON maddede belirtilen ko┼čul herhangi bir ┼čey olabilir, Birincil Anahtarlar─▒n kullan─▒lmas─▒ gerekli de─čildir (ve her iki tablodaki s├╝tunlara her zaman ba┼čvurman─▒z gerekmez)! ├ľrne─čin:


─░├ž Birle┼čtirme - Sol D─▒┼č Birle┼čtirme



g├Âr├╝nt├╝ tan─▒m─▒n─▒ buraya girin

Not: Sol Kat─▒l = Sol D─▒┼č Kat─▒l, Sa─č Kat─▒l = Sa─č D─▒┼č Kat─▒l.


23







├çok sevilen k─▒rm─▒z─▒ g├Âlgeli Venn ┼čemas─▒n─▒ ele┼čtirdikten sonra, sadece kendi giri┼čimi yay─▒nlaman─▒n adil olaca─č─▒n─▒ d├╝┼č├╝nd├╝m.

@Martin Smith'in cevab─▒ bu grubun uzun yoldan en iyisi olsa da, her tablodaki anahtar s├╝tunu g├Âsteriyor, oysa ki ideal olmayan anahtar s├╝tunlar─▒ da g├Âsterilmesi gerekti─čini d├╝┼č├╝n├╝yorum.

Yar─▒m saat i├žinde yapabilece─čim en iyi ┼čey, hala yeterli de─čerlerin bulunmad─▒─č─▒n─▒ TableB ya OUTER JOIN da asl─▒nda bir birle┼čmeden ziyade sendikadaki anahtar de─čerlerin bulunmad─▒─č─▒ ger├že─čini g├Âsterdi─čini sanm─▒yorum :


g├Âr├╝nt├╝ tan─▒m─▒n─▒ buraya girin


21







En Basit Tan─▒mlar

─░├ž Birle┼čtirme: Her iki tablodaki e┼čle┼čen kay─▒tlar─▒ d├Ând├╝r├╝r .

Tam D─▒┼č Birle┼čtirme: Her ─░ki Tablodaki E┼čle┼čmeyen Kay─▒tlar i├žin bo┼č olan her iki tablodaki e┼čle┼čen ve e┼členmemi┼č kay─▒tlar─▒ d├Ând├╝r├╝r .

Sol D─▒┼č Birle┼čtirme: E┼čle┼čen ve e┼čle┼čmeyen kay─▒tlar─▒ yaln─▒zca Sol Taraftaki tablodan d├Ând├╝r├╝r .

Sa─č D─▒┼č Birle┼čtirme: E┼čle┼čen ve e┼čle┼čmeyen kay─▒tlar─▒ yaln─▒zca Sa─č Taraftaki tablodan d├Ând├╝r├╝r .

K─▒sacas─▒

E┼čle┼čti + Sol E┼čle┼čti + Sa─č E┼čle┼čti = Tam D─▒┼č Kat─▒lma

E┼čle┼čti + Sola E┼čsiz = Sol D─▒┼č Birle┼čtirme

E┼čle┼čti + Sa─č E┼čle┼čti = Sa─č D─▒┼č Birle┼čtirme

E┼čle┼čti = ─░├ž Birle┼čtirme


18







Basit Terimlerle,

1. INNER JOIN VEYA EQUI JOIN: Her iki tabloda da yaln─▒zca ko┼čulla e┼čle┼čen sonu├ž k├╝mesini d├Ând├╝r├╝r.

2. OUTER JOIN: Ko┼čul e┼čle┼čmesi olsa da olmasa da her iki tablodaki t├╝m de─čerlerin sonucunu d├Ând├╝r├╝r.

3. LEFT JOIN: Soldaki tablodaki t├╝m de─čerlerin sonucunu ve yaln─▒zca sa─č tablodaki ko┼čulla e┼čle┼čen sat─▒rlar─▒ d├Ând├╝r├╝r.

4. RIGHT JOIN: T├╝m de─čerlerin sonucunu sa─č tablodan ve yaln─▒zca sol tablodaki ko┼čulla e┼čle┼čen sat─▒rlardan d├Ând├╝r├╝r.

5. FULL JOIN: Tam Birle┼čme ve Tam D─▒┼č Birle┼čtirme ayn─▒d─▒r.


6







1. ─░├ž Kat─▒lma: Kat─▒lma olarak da adland─▒r─▒l─▒r. Hem sol tabloda hem de sa─č tabloda bulunan sat─▒rlar─▒ yaln─▒zca bir e┼čle┼čme varsa d├Ând├╝r├╝r . Aksi takdirde, s─▒f─▒r kay─▒t d├Ând├╝r├╝r.

├ľrnek:

 SELECT
  e1.emp_name,
  e2.emp_salary    
FROM emp1 e1
INNER JOIN emp2 e2
  ON e1.emp_id = e2.emp_id
 


├ž─▒k─▒┼č─▒1

2. Tam D─▒┼č Kat─▒lma: Ayr─▒ca Tam Kat─▒lma olarak da adland─▒r─▒l─▒r. Sol tabloda ve sa─č tabloda bulunan t├╝m sat─▒rlar─▒ d├Ând├╝r├╝r .

├ľrnek:

 SELECT
  e1.emp_name,
  e2.emp_salary    
FROM emp1 e1
FULL OUTER JOIN emp2 e2
  ON e1.emp_id = e2.emp_id
 


├ž─▒k─▒┼č─▒2

3. Sol D─▒┼č birle┼čtirme: Veya yaln─▒zca Sol Birle┼čtirme olarak adland─▒r─▒l─▒r. Sol tabloda bulunan t├╝m sat─▒rlar─▒ ve sa─č tablodaki e┼čle┼čen sat─▒rlar─▒ (varsa) d├Ând├╝r├╝r.

4. Sa─č D─▒┼č Kat─▒lma: Sa─č Kat─▒lma olarak da adland─▒r─▒l─▒r. Sol tablodan (varsa) e┼čle┼čen sat─▒rlar─▒ ve Sa─č tablodaki t├╝m sat─▒rlar─▒ d├Ând├╝r├╝r.


kat─▒l─▒r

Kat─▒lma Avantajlar─▒

  1. Daha h─▒zl─▒ ├žal─▒┼čt─▒r─▒r.

4







  • ─░├ž birle┼čtirme - E┼čde─čer sorgulardan birini kullanan bir i├ž birle┼čim , iki tablonun kesi┼čimini sa─člar; yani ortak olduklar─▒ iki s─▒ra.

  • Sol d─▒┼č birle┼čtirme - Bir d─▒┼č b─▒rakt─▒ kat─▒lmak B'de A'da t├╝m sat─▒rlar─▒, art─▒ herhangi bir ortak sat─▒r verecek

  • Tam d─▒┼č birle┼čim - Bir tam d─▒┼č birle┼čim A'da ┼čey B'de kar┼č─▒l─▒k gelen veriyi yoksa size yani A'da t├╝m sat─▒rlar ve B'de t├╝m sat─▒rlar─▒ A ve B birli─či verecek, daha sonra B k─▒sm─▒d─▒r null, ve tersi


3







left join on (aka left outer join on ) d├Ând├╝r├╝r inner join on sat─▒rlar union all bo┼č de─čerlere uzat─▒lan e┼čsiz sol tablo sat─▒rlar─▒n─▒.

right join (on aka right outer join on ) d├Âner inner join on sat─▒rlar union all e┼čsiz sa─č tablo sat─▒rlar─▒ bo┼č de─čerlere uzat─▒labilir.

full join on (aka full outer join on ) d├Ând├╝r├╝r inner join on sat─▒rlar union all bo┼č de─čerlere uzat─▒lan e┼čsiz sol tablo sat─▒rlar─▒ union all bo┼č de─čerlere uzat─▒lan e┼čsiz sa─č tablo sat─▒rlar─▒.

(SQL Standard 2006 SQL / Foundation 7.7 S├Âzdizimi Kurallar─▒ 1, Genel Kurallar 1 b, 3 c & d, 5 b.)

├ľyleyse outer join altta yatan ┼čeyin ne oldu─čunu ├Â─črenene kadar yapma inner join .


├ľ─črenin Ne sat─▒rlar inner join d├Âner .

Buradaki yorumlar─▒ okuyun, pek ├žok kar─▒┼č─▒k ve k├Ât├╝ cevap var.

O zaman buradaki yorumlar─▒m─▒ ├žok kar─▒┼č─▒k ve zay─▒f cevaplar olarak okuyun.


3







─░├ž derz ile d─▒┼č derz aras─▒ndaki fark ┼č├Âyledir:

  1. ─░├ž birle┼čtirme, e┼čle┼čen perdelere dayal─▒ birle┼čtirilmi┼č tablolar─▒n birle┼čtirildi─či bir oyundur, oysa d─▒┼č birle┼čtirme, hem e┼čle┼čen hem de e┼čle┼čmeyen tokay─▒ temel alan birle┼čtirilmi┼č bir tablodur.
  2. ─░├ž birle┼čtirme, e┼čle┼čtirilmemi┼č sat─▒r─▒n al─▒nmad─▒─č─▒ iki tablodaki e┼čle┼čen sat─▒r─▒ birle┼čtirirken, d─▒┼č birle┼čtirme iki tablodaki sat─▒rlar─▒ birle┼čtirir ve e┼čle┼čmeyen sat─▒rlar bo┼č de─čerle doldurulur.
  3. ─░├ž birle┼čme bir kesi┼čme i┼člemi gibidir, oysa d─▒┼č birle┼čme birle┼čme i┼člemi gibidir.
  4. ─░├ž birle┼čtirme iki tiptir, oysa d─▒┼č birle┼čtirme ├╝├ž tiptir.
  5. ─░├ž birle┼čme daha yava┼č, d─▒┼č birle┼čme ise i├ž birle┼čimden daha h─▒zl─▒d─▒r.

1







2 tablonun alt─▒nda d├╝┼č├╝n├╝n:

EMP

 empid   name    dept_id salary
1       Rob     1       100
2       Mark    1       300
3       John    2       100
4       Mary    2       300
5       Bill    3       700
6       Jose    6       400
 

B├Âl├╝m

 deptid  name
1       IT
2       Accounts
3       Security
4       HR
5       R&D
 

─░├ž birle┼čim:

├ço─čunlukla sql sorgular─▒nda sadece JOIN olarak yaz─▒l─▒r . Tablolar aras─▒nda yaln─▒zca e┼čle┼čen kay─▒tlar─▒ d├Ând├╝r├╝r.

T├╝m ├žal─▒┼čanlar─▒n─▒ ve b├Âl├╝m adlar─▒n─▒ ├Â─črenin:

 Select a.empid, a.name, b.name as dept_name
FROM emp a
JOIN department b
ON a.dept_id = b.deptid
;

empid   name    dept_name
1       Rob     IT
2       Mark    IT
3       John    Accounts
4       Mary    Accounts
5       Bill    Security
 

Yukar─▒da g├Ârd├╝─č├╝n├╝z gibi, Jose yazd─▒r─▒lan de─čildir EMP 's dept_id olarak ├ž─▒kt─▒s─▒nda 6 B├Âl├╝m├╝ tablosunda bir e┼čle┼čme bulmak. Benzer ┼čekilde, HR ve R&D sat─▒rlar yazd─▒r─▒lan de─čildir B├Âl├╝m├╝ onlar Emp tablosunda bir e┼čle┼čme bulamad─▒k olarak masaya.

Bu nedenle, INNER JOIN veya sadece JOIN, yaln─▒zca e┼čle┼čen sat─▒rlar─▒ d├Ând├╝r├╝r.

SOL Y├ľNDEN KATILIM :

Bu, LEFT tablosundaki t├╝m kay─▒tlar─▒ ve yaln─▒zca RIGHT tablosundaki e┼čle┼čen kay─▒tlar─▒ d├Ând├╝r├╝r.

 Select a.empid, a.name, b.name as dept_name
FROM emp a
LEFT JOIN department b
ON a.dept_id = b.deptid
;

empid   name    dept_name
1       Rob     IT
2       Mark    IT
3       John    Accounts
4       Mary    Accounts
5       Bill    Security
6       Jose    
 

Bu nedenle, yukar─▒daki ├ž─▒kt─▒y─▒ g├Âzlemlerseniz, LEFT tablosundaki (Emp) t├╝m kay─▒tlar, sadece RIGHT tablosundaki e┼čle┼čen kay─▒tlarla yazd─▒r─▒l─▒r.

HR ve dept_id'deki Emp tablosunda bir e┼čle┼čme bulamad─▒klar─▒ndan R&D , b├Âl├╝m tablosundan yazd─▒r─▒lm─▒yor .

Bu nedenle, LEFT JOIN, Sol tablodaki T├ťM sat─▒rlar─▒ ve yaln─▒zca RIGHT tablosundaki e┼čle┼čen sat─▒rlar─▒ d├Ând├╝r├╝r.

DEMO'yu buradan da kontrol edebilirsin .


0