24 Soru: “INNER JOIN” ve “OUTER JOIN” arasındaki fark nedir?

tarafından oluşturulan soru Wed, Feb 13, 2019 12:00 AM

Ayrıca LEFT JOIN, RIGHT JOIN ve FULL JOIN’a nasıl sığar?

    
4376
  1. Cevapların arasında & yorumlar & referansları sadece bir aslında Venn diyagramlarının operatörleri nasıl temsil ettiğini açıklar: Çember kavşak alanı A JOIN B'deki satır kümesini temsil eder. Her daireye özgü alan, alarak bir satır grubunu temsil eder. tablonun A JOIN B'ye katılmayan satırları ve diğer tabloya özgü tüm sütunları NULL olarak ayarlanmış şekilde ekleme. (Ve çoğu, dairelerin belirsiz bir şekilde sahte yazışmalarını A ve B'ye verir.)
    2014-10-18 20: 24: 59Z
  2. Çok sayıda cevap zaten sağlandı, ancak bu dersi daha önce görmedim. Venn diyagramlarını biliyorsanız, bu BÜYÜK bir öğreticidir: blog.codinghorror .com /a-visual-of-sql-katılımlarının bir araya gelmesi Benim için hızlı bir okuma olacak kadar kısa ama yine de tüm konsepti kavrar ve tüm vakaları çok iyi işler. Venn şemalarının ne olduğunu bilmiyorsanız - bunları öğrenin. Bunu yapmak için 5-10 dakika sürer ve setlerle çalışmayı ve setler üzerinde işlemleri yönetmeyi görselleştirmeniz gerektiğinde yardımcı olur.
    2017-05-09 09: 04: 59Z
  3. @ DanteTheSmith Hayır, buradaki diyagramlarla aynı sorunlardan muzdarip. Yukarıdaki yorumuma bakın, soru & Bu blog yazısı aşağıdadır: "Jeff, blogunu yorumlarda birkaç sayfa aşağılar". Venn şemaları kümelerdeki elemanları göstermektedir. Kümelerin tam olarak ne olduğunu ve bu şemalardaki öğelerin ne olduğunu tanımlamaya çalışın. Kümeler değil tablolar ve öğeleri onların satırları değil . Ayrıca herhangi iki tablo birleştirilebilir, bu nedenle PK'ler & FK'ler anlamsız. Tüm sahte. Başkalarının yaptığı binlerce şeyi yapıyorsunuz - belirsiz bir izlenim bıraktıysanız siz (yanlış) varsaymanız mantıklı.
    2017-05-18 05: 57: 51Z
  4. Birisi, Zaman Serisi tarafından dizine alınan veriler referans alınarak cevap verebilir mi? - İç ve Dış birleştirmeler, çoğu zaman zaman damgaları söz konusu olduğunda, insan /Venn anlamında çalışmaz. yalnızca milisaniye cinsinden farklı.
    2017-09-05 09: 26: 18Z
  5. orijinal başlık, ne benimle ilgili olduğu konusunda daha netti ("farklı birleştirme türleri", örneğin karma ve birleştirme gibi fiziksel birleştirme türlerine atıfta bulunabilir) Orijinal başlık Ayrıca, arama motorlarında görüş sayısındaki açık bir şekilde etkili oldu. Bu gereksiz düzenlemeyi geri aldım
    2019-02-13 08: 14: 08Z
24 Yanıtlar                              24                         

Yinelemesiz sütunlara katıldığınızı varsayalım, bu çok yaygın bir durumdur:

  • A ve B'nin bir iç birleşimi, A kesiştiği B'nin sonucunu verir, yani bir Venn şeması kesişme noktası.

  • A ve B'nin bir dış birleşimi, A sendikasının B sonuçlarını, yani 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 düşünün:

 
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.

İç katılım

Eşdeğer sorgulardan birini kullanan iç birleştirme, iki tablonun kesişimini, diğer bir deyişle ortak çizgileri vardır.

 
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ılım

Sol dış birleşim, A'daki tüm satırları ve B'deki tüm 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ış katılım

A rSağ 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ış katılım

Tam bir dış birleşim size A ve B'nin birleşimini verir, yani A'daki tüm satırlar ve B'deki tüm satırlar. A'daki bir şeyin B'de karşılık gelen bir verisi yoksa, B kısmı boştur ve bunun tersi de geçerlidir.

 
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
    
5823
2017-09-28 19: 52: 04Z
  1. Örneği B değerindeki 4 satırında başka bir satır ekleyerek büyütmek iyi olur. Bu, iç birleşimlerin satır sayısına eşit olması gerekmediğini gösterecektir.
    2009-08-30 12: 59: 48Z
  2. Mükemmel bir açıklama, ancak bu ifade: A ve B'nin dış birleştirmesi, A sendikasının B sonuçlarını, yani venn şeması birliğinin dış kısımlarını verir. . doğru şekilde ifade edilmemiş. Bir dış birleştirme, aşağıdakilerden birine ek olarak A'nın kesiştiği B'nin sonuçlarını verir: A'nın tümü (sol birleştirme), B'nin tamamı (sağ birleştirme) veya A'nın tamamı ve B'nin tamamı (tam birleştirme). Sadece bu son senaryo gerçekten bir sendikadır B. Yine de, iyi yazılmış bir açıklama.
    2011-05-03 19: 57: 42Z
  3. FULL JOIN'in FULL OUTER JOIN'in bir takma adı ve LEFT JOIN'in LEFT OUTER JOIN'ın bir takma adı olduğu konusunda haklı mıyım?
    2013-01-01 20: 29: 27Z
  4. evet harika ve mükemmel bir açıklama. peki neden b sütununda değerler sıralı değil? yani, 6,5, 5,6 değil mi?
    2013-03-04 08: 39: 36Z
  5. @ Ameer, Teşekkürler. Katılmak bir sipariş garantisi vermez, bir SİPARİŞ BY cümlesi eklemeniz gerekir.
    2013-03-05 00: 28: 16Z

Venn şemaları gerçekten benim için yapmıyor.

Örneğin çapraz birleştirme ile iç birleştirme arasında herhangi bir ayrım göstermezler, örneğin veya daha genel olarak farklı birleştirme tahmini türleri 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. on yan tümcesini 1. adımdaki tüm satırlara göre değerlendirin.
  3. (Yalnızca dış birleştirmeler için) 2. adımda kaybolan tüm dış satırlara geri ekleyin.

(NB: Uygulamada sorgu iyileştirici, sorguyu yürütmenin yukarıdaki tamamen mantıksal açıklamasından daha etkili yollar bulabilir, ancak nihai sonuç aynı olmalı)

tam dış birleştirme 'nin animasyonlu bir sürümüyle başlayacağım. Daha fazla açıklama izler.

 buraya resim açıklamasını girin


Açıklama

Kaynak Tablolar

buraya bağlantı tanımını girin

İlk önce true (AKA Cartesian Product) ile başlayın. Bu bir CROSS JOIN deyimine sahip değildir ve iki satırdaki her satır birleşimini döndürür.

SELECT A.Colour, B. CROSS JOIN B’DEN RENKLENDİRME

buraya bağlantı tanımını girin

İç ve Dış birleştirmelerinde "AÇIK" yan tümcesi belirtilmiş.

  • İç Birleştirme. Çapraz birleştirme sonucundaki tüm satırlar için "Açık" yan tümcesindeki koşulu değerlendirin. True ise birleştirilen satırı döndür. Aksi takdirde atın.
  • Sol Dış Katılma. İç birleştirmeyle aynı, soldaki tablodaki hiçbir şeyle eşleşmeyen satırlar için, bunlar sağ tablo sütunları için NULL değerlerle eşleşir.
  • Sağ Dış Katılma. Sağdaki tablodaki NULL değerleriyle sonuçlanan hiçbir şeyle eşleşmeyen tüm satırlar için iç birleştirmeyle aynı.
  • Tam Dış Katılma. İç birleştirmeyle aynı şekilde eşleştirilen soldaki satırları sol dış birleştirmeyle ve sağ matchi olmayanlarla korusağ dış birleştirmeye göre satırları sırala.

Bazı örnekler

A.COLUR SEÇİN, B. INNER JOIN B ÜZERİNDEN RENKLİ A.Colour = B.Colour

Yukarıdaki, klasik equi birleşimidir.

İç Katılma

Animasyonlu Sürüm

 buraya resim açıklamasını girin

SELECT A.Colour, B. INNER JOIN B ÜZERİNDEKİ RENKLİ A. A. RENK YOK ('Yeşil', 'Mavi')

İç birleştirme 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. Çapraz birleştirme iadelerinin her bir satırında ON değerlendirme yapılması.

iç 2

SELECT A.Colour, B. INNER JOIN B ON 1 = 1’DEN RENKLENDİRME

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. Sol Üst Dış Ortamdan Renk B ÜZERİNE BÜLTEN A.Colour = B.Colour

Dış birleştirmeler, soldaki tablodan bir satır (sol birleştirme için) sağdaki tablodan herhangi bir satırla birleşmezse sonuçta korunmuş olması dışında, iç birleştirmelerle aynı şekilde mantıksal olarak değerlendirilir. Sağ sütunları için A.Colour NOT IN ('Green','Blue') değer.

LOJ

SELECT A.Colour, B. Sol Sol Dış Ortamdan Renk B B AÇIK A.Renk = B.Renk Nerede B.Renk NULL Olduğunu

Bu, önceki sonucu yalnızca NULL'un bulunduğu satırları döndürmek için kısıtlar. Bu özel durumda, bunlar sağdaki tabloda uyuşmadıkları için korunmuş satırlar olacaktır ve sorgu tablo B.Colour IS NULL'da eşleşmeyen tek kırmızı sırayı döndürür. Bu, anti yarı birleşme olarak bilinir.

B testi için null yapılamayan ya da birleştirme koşulunun, IS NULL değerlerinin bu kalıbın doğru çalışması ve sadece satırları geri getirmekten kaçınmasını sağlamak için dışlanmasını sağladığı bir sütun seçmek önemlidir. eşleşmeyen satırlara ek olarak bu sütun için NULL değerine sahip.

loj boş.

SELECT A.Colour, B. DOĞRU BİR DİĞER AŞINDAKİ RENK B, A.Colour = B.Colour

Sağ dış birleştirmeler, sağ sıradaki eşleşmeyen satırları korudukları ve sol sütunları boş bırakmadığı sürece sol dış birleştirmelere benzer şekilde çalışır.

ROJ

SELECT A.Colour, B. TAM OUTER'DEN RENKLİ BİRLEŞTİRME B ON A. A. Renk = 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'DEN RENK B JOIN B ON 1 = 0

Çapraz bağlantıdaki hiçbir satır NULL yüklemiyle 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

BİR TAM OUTER'DEN RENK OLARAK KOLEŞİ SEÇME (A.Renk, B.Renk) 1 = 0

Yukarıdaki sorguya yapılan küçük bir değişiklikle, iki tablonun 1=0'unu taklit edebilirsiniz.

BİRLİĞİ TÜM

SELECT A.Colour, B. Sol Üst Dış Ortamdan Renk B B AÇIK A.Colour = B.Renk NEREDE B.Colour = 'Yeşil'

UNION ALL deyiminin (varsa) mantıksal olarak birleştirmeden sonra çalıştığını unutmayın. 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ştirmeyi gerçekleştirir ...

LOJ

... Ve sonra "Where" yan tümcesi çalışır. WHERE, doğru olarak değerlendirmez, böylece dış birleşim tarafından korunan sıra, etkin bir şekilde tekrar bir iç kenara dönüşecek şekilde (mavi olanla birlikte) atılır.

LOJtoInner

Amaç, yalnızca B'nin Renkleri Yeşil olduğu B satırlarını ve A'nın tüm satırlarını, doğru sözdiziminden bağımsız olarak içerecek olsaydı

SELECT A.Colour, B. Sol Üst Dış Ortamdan Renk B ÜZERİNE BİRLEŞTİRMEK A.Colour = B.Renk ve B.Renk = 'Yeşil'

resim tanımını buraya girin

SQL Fiddle

Bu örneklere bakın SQLFiddle.com’da canlı yayın .

    
623
2018-08-03 07: 59: 59Z
  1. Bu, Venn şemalarının yanı sıra benim için de işe yaramazken, insanların değiştiklerini ve farklı öğrendiklerini ve bunun çok iyi sunulduğunu takdir ediyorum. daha önce gördüğümden farklı bir açıklama yaptığım için, bonus puanları vermede @ypercube'ü destekliyorum. Ayrıca JOIN ya da WHERE yantümcesine ek koşullar koymanın farkını açıklayan iyi bir çalışma. Saygılarımla, Martin Smith.
    2014-12-20 04: 48: 36Z
  2. @ OldPro Venn diyagramları, gittikleri kadarıyla tamamdır. Sanırım, bir çarpı birleşimini nasıl temsil edecekleri veya bir tür katılım belirtisini nasıl ayırt edecekleri konusunda sessizler. equi diğerlerinden birleştirmek. Çapraz birleştirme sonucunun her bir satırındaki birleştirme yordamını değerlendirmenin zihinsel modeli, daha sonra bir dış birleşme olması durumunda nihayet eşleşmeyen satırlara eklenir ve nihayetinde benim için daha iyi olan yeri değerlendirir.
    2014-12-20 11: 05: 32Z
  3. Venn diyagramları, Sendikalar ve Kavşaklar ve Farklılıkları temsil etmek için iyidir, ancak katılmazlar. Çok basit katılımlar için bazı küçük eğitsel değerlere sahiptirler, yani katılım koşulunun benzersiz sütunlarda olduğu yerlere katılırlar.
    2014-12-20 22: 28: 49Z
  4. 2016-01-28 15: 54: 10Z
  5. @ MartinSmith Vay, katılıyorum, tamamen yanıldım! Bire çok çalışanlarla çalışmak için çok alışkın .. düzeltme için teşekkürler.
    2016-01-28 15: 57: 18Z

Katılmalar , iki tablodaki verileri birleştirerek sonuçların yeni ve geçici bir tablo olmasını sağlar. 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. Çalışan ve Konum tablosunu düşünelim:

resim tanımını buraya girin

İç Katılma: - İç birleştirme, birleştirme öngörüsüne bağlı olarak iki tablonun sütun değerlerini ( Çalışan ve Konum ) birleştirerek yeni bir sonuç tablosu oluşturur. Sorgu, birleşim öngörüsünü karşılayan tüm satır çiftlerini bulmak için her Çalışan satırını her Konum satırıyla karşılaştırır. Join-yordamı NULL olmayan değerlerle eşleşerek sağlandığı zaman, Çalışan ve Konum ile eşleşen her bir satır çifti için sütun değerleri bir sonuç satırında birleştirilir. İşte bir iç katılım için SQL’in nasıl görüneceği:  NULL= 'Green'

Şimdi, işte SQL'i çalıştırmanın sonucu şöyle olacak: resim tanımını buraya girin  buraya resim açıklamasını girin

Dış Katılma: - Dış bir birleştirme, iki birleştirilmiş 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ıl: - Çalışan ve Konum tabloları için sol dış birleştirmenin (veya basitçe sol birleştirme) sonucu her zaman "sol" tablonun tüm kayıtlarını içerir ( Çalışan ), birleştirme koşulu "sağ" tablosunda eşleşen bir kayıt bulamazsa bile ( Konum ). Sol dış birleşim için SQL'in yukarıdaki tabloları kullanarak nasıl göründüğünü şöyle gösterir:

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

Şimdi, işte bu SQL çalıştırmanın sonucunun nasıl göründüğü: resim tanımını buraya girin  buraya resim açıklamasını girin

Sağ Dış Katıl: - Sağ dış birleştirme (veya sağ birleştirme), ters çevrilmiş tabloların işlenmesi haricinde, bir sol dış birleşime yakından benzemektedir. "Sağ" tablodaki her satır ( Konum ) birleştirilmiş tabloda en az bir kez görünür. "Left" tablosundan ( Çalışan ) eşleşen bir satır yoksa, Konum çinde eşleşmeyen kayıtlar için NULL, Çalışan sütunlarından görünecektir. > em. SQL böyle görünüyor:

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

Yukarıdaki tabloları kullanarak, sağ dış birleşmenin sonuç kümesinin nasıl görüneceğini gösterebiliriz:

buraya görüntü açıklamasını girin  buraya resim açıklamasını girin

Tam Dış Katılım: - Tam Dış Birleştirme veya Tam Birleştirme, bir birleşme sonuçlarına eşleşen olmayan satırları dahil ederek eşleşmeyen bilgileri tutmaktır, tam bir dış birleşim 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. buraya resim açıklamasını girin

Resim Kaynağı

MySQL 8.0 Başvuru Kılavuzu - Sözdizimine Katılın

Oracle Join işlemleri

    
142
2018-08-07 14: 38: 49Z

İç Katılma

Eşleşen satırları yalnızca, yani

select * from employee right outer join location  on employee.empID = location.empID;
//Use of outer keyword is optional
'a alın.

Resim tanımını buraya girin

 A intersect B

Sol Dış Birleştirme

İlk tablodaki tüm kayıtları ve ikinci tablodaki tüm kayıtları seçin. birleştirilen anahtarlarla eşleşen tablo.

Resim tanımını buraya girin

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

Tam Dış Katılma

İkinci tablodaki tüm kayıtları ve ilk listedeki tüm kayıtları seçin. birleştirilen anahtarlarla eşleşen tablo.

Resim tanımını buraya girin

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

Kaynaklar

121
2014-07-21 15: 38: 32Z
  1. Aracın adı nedir? Satır ve venn şemalarının sayısını gösterdiği için ilginç olduğunu biliyorum.
    2014-01-27 12: 23: 03Z
  2. @ GrijeshChauhan Datamartist :)
    2014-01-27 12: 25: 31Z
  3. @ Trushar :( Linux sistemi için değil ..
    2014-01-27 12: 27: 42Z
  4. 2014-01-27 12: 30: 38Z
  5. Ohh! evet ben .. Şarap kullanarak SQLyog kullandım .. Ayrıca PlayOnLinux var.
    2014-01-27 12: 32: 59Z

Basit bir deyişle:

Bir iç katılım yalnızca eşleşen satırları alır.

Bir dış birleştirme eşleştirilen satırları bir tablodan ve diğer tablodaki tüm satırları alırken .... sonuç, hangisini kullandığınıza bağlı olarak değişir:

  • Sol : Sağ tablodaki eşleşen satırlar ve sol 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ğildir

106
2014-07-21 15: 35: 37Z
  1. @ nomen Bu cevabın yanıtı yoktur, ancak INNER JOIN bir kesişmedir ve FULL OUTER JOIN, buna karşılık gelen UNION ise sol & sağ kümeler /daireler (sırasıyla) LEFT & SAĞ birleştirme. PS Bu cevap, girdi vs çıktıdaki satırlar hakkında net değil. “Sol /sağ tablodaki” ile “sol /sağdaki sol /sağ kısım” ile karıştırır ve diğer satırdan diğer satırlara göre boş satırlara göre boş bırakılan satır anlamına gelmek için “eşleşen satır” ile “all” kullanır. div>
    2015-11-29 01: 17: 46Z

    İç birleştirme, yalnızca birleşimin diğer (sağ) tarafında eşleşen bir kayıt varsa satırları gösterir.

    A (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ın sütunları NULL gösterir.

        
    100
    2015-01-05 01: 14: 26Z

    İç katılımlar, birleştirilen tabloda ilgili kimliğe sahip bir kaydın bulunmasını gerektirir.

    Dış birleştirmeler, sağ taraf için hiçbir şey olmasa bile, sol taraf için kayıtları döndürür.

    Örneğin, bir Orders ve OrderDetails tablonuz var. Bir "Sipariş Kimliği" ile ilişkilidirler.

    siparişleri

    • OrderID
    • MüşteriAdı

    OrderDetails

    • OrderDetailID
    • OrderID
    • ProductName
    • Adet
    • Fiyat

    İstek

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

    yalnızca OrderDetails tablosunda da bir şeyler içeren Siparişler’i döndürür.

    Eğer OUTER LEFT JOIN JOIN olarak değiştirirseniz

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

    sonra OrderDetails kayıtları olmasa bile Siparişler tablosundan kayıtları döndürür.

    Bunu,

    SELECT Orders.OrderID, Orders.CustomerName
      FROM Orders 
      LEFT JOIN OrderDetails
        ON Orders.OrderID = OrderDetails.OrderID
    
    gibi bir where yan tümcesi ekleyerek olası artık siparişi gösteren OrderDetails olmayan Emirleri bulmak için kullanabilirsiniz.     
    75
    2018-09-10 08: 25: 51Z
    1. Basit ama gerçekçi örneği takdir ediyorum. Başarı ile WHERE OrderDetails.OrderID IS NULL ile SELECT c.id, c.status, cd.name, c.parent_id, cd.description, c.image FROM categories c, categories_description cd WHERE c.id = cd.categories_id AND c.status = 1 AND cd.language_id = 2 ORDER BY c.parent_id ASC (MySQL) gibi bir isteğimi değiştirdim. Ek koşullar hakkında emin değildim, iyi karıştırdılar ...
      2013-01-05 11: 11: 24Z

    Basit bir deyişle:

    İç katılım - > SADECE ana ve alt tablolardan ortak kayıtları alın. Ana tablonun birincil anahtarı Alt tablonun Altındaki yabancı anahtarla eşleşiyor.

    Soldan katılma - >

    sahte kod

     SELECT c.id, c.status, cd.name, c.parent_id, cd.description, c.image FROM categories c INNER JOIN categories_description cd ON c.id = cd.categories_id WHERE c.status = 1 AND cd.language_id = 2 ORDER BY c.parent_id ASC

    Sağa katılma : Sola katılmanın tam tersi. Masanın adını sağa LEFT JOIN'e sağ tarafta koyun, LEFT JOIN ile aynı çıktıyı elde edin.

    Dış katılım : Tüm kayıtları

    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.
        }
      }
    
    Her iki tabloda da göster. 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:

    Example

    Şimdi 2 tablo için varsayalım

    No matter what

     1.employees , 2.phone_numbers_employees

    Burada çalışanlar masası, Ana masa, phone_numbers_employees, çocuk masasıdır (

    employees : id , name 
    
    phone_numbers_employees : id , phone_num , emp_id   
    
    'u çocuk masasına bağlayan yabancı anahtar olarak emp_id'u içerir.)

    İç katılımlar

    2 tablonun kayıtlarını alın SADECE Çalışan tablosunun birincil anahtarı (kimliği), Çocuk masasının Yabancı anahtarını eşleştiriyorsa phone_numbers_employees (emp_id) .

    Yani sorgu şöyle olacak:

     employee.id

    Burada sadece birincil anahtardaki eşleşen satırları al = yukarıda açıklandığı gibi yabancı anahtar. Birincil anahtardaki eşleşen satırlar = yabancı anahtar birleştirme sonucu atlanıyor.

    Sol katılım :

    Sol birleşim, sağdaki tabloda 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 INNER JOIN phone_numbers_employees AS p ON e.id = p.emp_id;
    

    Dış katılım :

     
    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;
    

    Diyagram olarak şöyle görünüyor:

    Diyagram

        
    62
    2015-02-19 05: 11: 56Z
    1. Sonucun birincil /benzersiz /aday tuşları & Yabancı anahtarlar. Baviour bunlara referans vermeden tanımlanabilir ve açıklanmalıdır. Bir çapraz birleşme hesaplanır, ardından ON koşulu ile eşleşmeyen satırlar süzülür; ayrıca dış birleştirmeler için sıralar filtrelenmiş /eşlenmemiş sıralar NULL'lar ile uzatılmıştır (LEFT /RIGHT /FULL başına ve dahil).
      2015-08-10 04: 27: 54Z

    Eşleşmenin olduğu her iki tablodaki tüm satırları döndürmek için

    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;
    
    kullanın. yani, sonuçtaki tabloda tüm satır ve sütunların değerleri olacaktır.

    INNER JOIN 'da ortaya çıkan tabloda boş sütunlar olabilir. Dış birleşim OUTER JOIN veya LEFT olabilir.

    RIGHT , ikinci tabloda eşleşme olmasa bile ilk satırdaki tüm satırları döndürür.

    LEFT OUTER JOIN , ilk tabloda eşleşme olmasa bile, ikinci tablodaki tüm satırları döndürür.

        
    55
    2015-06-09 03: 21: 07Z

     Bu katılım için iyi bir açıklama

    Bu, tüm katılımcılar için iyi bir şematik açıklamadır

    kaynak: http://ssiddique.info/understanding-sql- birleştirmeler-in-kolay-way.html

        
    54
    2016-10-18 18: 48: 59Z

    RIGHT OUTER JOIN, iki tablonun karşılaştırılmasında en az bir eşleşme olmasını gerektirir. Örneğin, A and B (A kavşağı B) anlamına gelen tablo A ve tablo B.

    INNER JOIN ve LEFT OUTER JOIN aynıdır. Her iki tabloda da eşleşen tüm kayıtları ve sol tablonun tüm olanaklarını sunar.

    Benzer şekilde, LEFT JOIN ve RIGHT OUTER JOIN aynıdır. Her iki tabloda da eşleşen tüm kayıtları ve doğru tablonun tüm olanaklarını sunar.

    RIGHT JOIN, çoğaltmadan FULL JOIN ve LEFT OUTER JOIN’un birleşimidir.

        
    51
    2013-09-26 21: 25: 28Z

    Cevap, her birinin anlamında, sonuçlarında da.

      

    Not:
      RIGHT OUTER JOIN'da SQLite veya RIGHT OUTER JOIN yoktur.
      Ayrıca FULL OUTER JOIN'da MySQL yok.

    Cevabım yukarıdaki Not 'a dayanıyor.

    Bunun gibi iki tablonuz olduğunda:

     FULL OUTER JOIN

    CROSS JOIN /OUTER JOIN:
    Bu tabloların tümüne 4931 ile sahip olabilirsiniz.0 veya bunun gibi

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

    İÇ BİRLEŞTİRME:
    , gibi bir ilişkiye dayanarak yukarıdaki sonuçlara filtre eklemek istediğinizde

    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
    
    kullanabilirsiniz:  table1.id = table2.id

    SOL [OUTER] JOIN:
    Yukarıdaki sonuçtaki tablolardan birinin tüm satırlarına sahip olmak istediğinizde - aynı ilişkiyle - INNER JOIN kullanabilirsiniz:
    ( DOĞRU BİRLEŞİM için sadece tabloların yerini değiştirin)

     
    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
    

    TAM OUTER JOIN:
    Ayrıca sonuçlarınızda diğer tablonun tüm satırlarına sahip olmak istediğinizde LEFT JOIN:

    kullanabilirsiniz.  
    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
    

    Pekala, ihtiyacınız olarak ihtiyacınızı karşılayan her birini seçersiniz;).

        
    39
    2017-09-12 08: 50: 33Z
    1. Notunuza MySQL'de FULL OUTER JOIN olmadığını da ekleyebilirsiniz.
      2015-06-14 13: 34: 13Z

    İç katılım.

    Bir birleştirme, iki tablodaki satırları birleştiriyor. Bir iç birleştirme , sorguda belirttiğiniz ölçütlere göre 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 sırada bir satırla eşleşmeyen bir satır varsa, döndürülmez; Benzer şekilde, ikinci tabloda ilk satır ile eşleşmeyen bir satır varsa, geri döndürülmez.

    Dış Katılma.

    Bir sol katılma , ilk tablodaki satırları ikinci tablodaki satırlarla eşleştirmeye çalışır. Bir eşleşme bulamazsa, ilk tablodaki sütunları döndürür ve ikinci tablodaki sütunları boş bırakır (boş).

        
    31
    2016-02-02 11: 14: 00Z

    Diğer yanıtlarda performans ve optimize edici hakkında fazla ayrıntı göremiyorum.

    Bazen, yalnızca

    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
    
    'un ilişkilendirici 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. Doktor, çoğu birleştirme modunu kullanabilir.

    Genellikle farklı türden bağlantılar yerine full outer join 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
    2017-05-23 12: 34: 48Z
    1. Bir bir diğerini birleştirme türü kullanmak muhtemelen "iyi bir uygulama" olamaz. Hangi birleştirmeyi kullanacağınız, istediğiniz verileri belirler. Farklı bir tane kullanırsanız yanılıyorsunuzdur. Ayrıca, Oracle’da en azından bu cevap tamamen yanlıştır. Her şey için tamamen yanlış geliyor ve kanıtınız yok. Kanıtın var mı?
      2014-12-26 08: 51: 00Z
    2. 1. Yani, kullanmayı dene . Herhangi bir sebep olmadan LEFT OUTER katılımlarını kullanan her yerde birçok insan gördüm. (Birleştirilen sütunlar 'boş değil' idi.) Bu durumlarda INNER birleşimlerini kullanmak kesinlikle daha iyi olurdu. 2. İlişkisel olmayan davranışı benden daha iyi açıklayan bir bağlantı ekledim.
      2014-12-26 11: 01: 45Z
    3. Bildiğim gibi INNER JOIN çoğu zaman INNER JOIN'dan daha yavaş, Ve insanlar beklenmedik INNER JOIN sonuçlarını kaldırmak için LEFT JOIN ekleyerek LEFT JOIN yerine INNER JOIN kullanabilir;). /div>
      2015-05-13 03: 01: 51Z
    4. Bu yorumlar beni biraz belirsizleştirdi. WHERE'un daha yavaş olduğunu neden düşünüyorsun?
      2015-05-13 08: 04: 42Z

    NULL, INNER için kesin algoritma aşağıdaki gibidir:

    1. İlk tablodaki her satırı alın: INNER JOIN
    2. Yanındaki ikinci tablodaki tüm satırları göz önünde bulundurun: LEFT/RIGHT OUTER JOIN
    3. a yan tümcesini her çifte göre değerlendirin: (a, b[i])
      • Koşul ON ... olarak değerlendirildiğinde, birleştirilmiş ON( a, b[i] ) = true/false? satırını geri döndürün.
      • İkinci tablonun sonuna herhangi bir eşleşme olmadan ulaşıldığında ve bu bir true ise, diğer tablonun tüm sütunları için (a, b[i]) kullanarak bir (sanal) çifti döndürür: LEFT dış birleştirme için Outer Join veya SAĞ için Null dış birleşim Bu, ilk tablonun tüm satırlarının nihai sonuçlarda bulunmasını sağlamak içindir.

    Not: (a, Null) fıkrasında belirtilen durum herhangi bir şey olabilir, Birincil Anahtarları kullanmanız gerekmez (ve her zaman için her iki tablo da)! Örneğin:

     İç Birleştirme - Sol Dış Birleştirme


     buraya resim açıklamasını girin

    Not: Sol Katılma = Sol Dış Katılma, Sağ Katılma = Sağ Dış Katılma.

        
    22
    2018-10-11 14: 16: 16Z

    Çok sevilen kırmızı gölgeli Venn diyagramını eleştirdikten sonra, yalnızca kendi girişimi yayınlamanın adil olacağını düşündüm.

    Her ne kadar @Martin Smith'in cevabı bu grubun en iyisi olsa da, her tablodaki anahtar sütunu gösterir, oysa ideal olmayan anahtar sütunları da gösterilmesi gerektiğini düşünüyorum.

    İzin verilen yarım saatte yapabileceğimin en iyisi, ... ON T1.y IS NULL'daki temel değerlerin olmaması nedeniyle boş değerlerin mevcut olduğunu veya ... ON 1 = 0'un aslında bir birleşme yerine bir birlik olduğunu gösterdiğini hala sanmıyorum. p>

     buraya resim açıklamasını girin

        
    20
    2016-01-22 15: 23: 20Z
    1. Soru, INNER ve OUTER birleşimleri arasındaki farkı soruyor, zorunlu olarak sol dış birleşim lol bırakılmamış olsa da
      2016-01-22 19: 32: 48Z
    2. @ LearnByReading: sağdaki resmim sağ dış birleşimdir, yani TableB'u OUTER JOIN ile değiştir
      2019-04-29 07: 58: 14Z

     buraya resim açıklamasını girin

    •  TableA a LEFT OUTER JOIN TableB b en tipik iki veya daha fazla masaya birleştirilir. Hem ON ON anahtar anahtarında hem de forignkey ilişkisinde veri eşleşmesini döndürür.
    •  TableB B RIGHT OUTER JOIN TableA a, INNER JOIN ile aynıdır, ancak ResultSet ile ilgili OUTER JOIN verisini de içerir.
      •  INNER JOIN = NULL + Sağdaki LEFT JOIN eşlemeli sol tablonun benzersiz verileri.
      •  INNER JOIN = Null + Soldaki tabloda RIGHT JOIN eşlemeli sağ tablonun benzersiz verileri.
      •  INNER JOIN = Null + FULL JOIN eşlemeli hem sağ hem de soldaki tablolardaki benzersiz veriler.
    • Kendi kendine birleştirme, bir tablo kendi içinde verilere başvuran kendi kendine birleştirme olarak bildiği zaman SQL'de bir anahtar kelime değildir. INNER JOIN ve Null'u kullanarak kendimize katılma sorgusu yazabilirizes.

    Örneğin:

     INNER JOIN     
    19
    2019-03-21 22: 19: 48Z

    En Basit Tanımlar

    İç Birleştirme: Her iki tablodan da eşleşen kayıtları döndürür.

    Tam Dış Katılma: Her iki tablodaki eşleşmiş ve eşleşmeyen kayıtları , Her İki Tablodaki eşleşmemiş kayıtlar için boş olanları döndürür.

    Sol Dış Birleştirme: Eşleşen ve eşleşmeyen kayıtları yalnızca Sol Taraf tablosundaki tablodan döndürür.

    Sağ Dış Katılma: Eşleşen ve eşleşmeyen kayıtları yalnızca Sağ Taraf tablosundaki tablodan döndürür.

    'ye kısa

    Eşleşmiş + Eşsiz Sol + Eşsiz Sağ = Tam Dış Katılma

    Eşleşti + Eşleşti Sol = Sol Dışa Katılma

    Eşleşmiş + Sağ Eşsiz = Sağ Dışa Katılma

    Eşleşti = İç Birleştirme

        
    17
    2016-04-28 09: 10: 48Z
    1. Bu mükemmel bir işlemdir ve birleştirme işleminin neden Zaman Serisi dizinleri için beklendiği gibi çalışmadığını açıklar. Bir saniye aradaki zaman damgaları eşsizdir.
      2017-09-05 09: 22: 46Z
    2. @ yeliabsalohcin Buradaki "beklendiği gibi" veya "çalışmayı" açıklamayın. Garip bir şekilde başkalarının sahip olmasını beklediğin, açıklanamayan, kişisel bir yanılgı. Kelimeleri okurken dikkatlice görürseniz - net yazıyı yanlış yorumlamak ve /veya net olmayan yazıyı kabul etmek - burada yazarken olduğu gibi, yanlış anlamaları bekleyebilirsiniz. Aslında buradakilerin çoğu gibi cevaplar belirsizdir & yanlış. Girdi sütun kümeleri farklı olduğunda "İç Birleştirme: Her iki tablodaki eşleşen kayıtları döndürür" yanlıştır. Belirli bir şey söylemek deniyor , ancak değil . (Cevabımı gör.)
      2017-11-22 02: 52: 49Z

    Basit Şartlarda,

    1. INNER JOIN VEYA EQUI JOIN: Yalnızca her iki tablodaki 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 tüm değerlerin sonucunu ve yalnızca sağdaki koşulla eşleşen satırları döndürür.

    4. RIGHT JOIN: Tüm tabloların değerlerini sağ tablodan ve yalnızca sol tablodaki koşulla eşleşen satırlardan döndürür.

    5. FULL JOIN: Tam Katılma ve Tam dış Katılma aynıdır.

        
    6
    2016-10-13 09: 04: 54Z

    1. İç Katılma: Ayrıca 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:

     OUTER JOIN

     output1

    2. Tam Dış Katılma: Tam Katılma olarak da bilinir. Hem Sol tabloda hem de sağ tabloda bulunan tüm satırları döndürür.

    Örnek:

     
    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 
    

     output2

    3. Sol Dış katılım: Veya yalnızca Sol Katılma 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. Soldaki tablodan (varsa) eşleşen satırları ve Sağ tablodaki tüm satırları döndürür.

     katıldı

    Katılma Avantajları

    1. Daha hızlı çalışır.
    4
    2017-07-28 04: 17: 49Z
    1. Bu, yalnızca tablolar aynı sütun kümesine sahipse doğrudur. (İç birleşimi kesişimle &birleşmeyle tam birleşmeyle karıştırır.) Ayrıca "eşleşme" tanımsızdır. Diğer yorumlarımı oku.
      2017-07-24 13: 02: 37Z
    • İç birleştirme - Eşdeğer sorgulardan birini kullanan bir iç birleştirme , iki tablonun , yani ikisinin kesişimini verir. ortak satırları var.

    • Sol dış birleşim - Bir sol dış birleşim , A'daki tüm satırları ve B'deki tüm ortak satırları verecektir.

    • Tam dış birleştirme - Bir tam dış birleştirme , size A ve B birliğini verir, yani A'daki tüm satırlar ve B'deki tüm satırlar A'daki bir şeyin B'de karşılık gelen bir verisi yoksa, B kısmı null olur ve bunun tersi de geçerlidir

    3
    2016-06-23 13: 55: 57Z
    1. Bu hem yanlış hem de belirsiz. Tablolar aynı sütunlara sahip değilse, birleştirme değil bir kesişimdir. Dış birleştirmeler, aynı sütunlara sahip olmadıkça, A veya B'den satır içermez, bu durumda null eklenmez. Bir şey söylemeye çalışıyorsun ama söylemiyorsun. Doğru veya net bir şekilde açıklamıyorsunuz.
      2017-02-03 11: 15: 30Z
    2. @ philipxy: İfadenize katılmıyor
      SELECT
        e1.emp_name,
        e2.emp_salary    
      FROM emp1 e1
      INNER JOIN emp2 e2
        ON e1.emp_id = e2.emp_id
      
      Hayır. İstediğiniz herhangi bir sütuna katılabilir ve değer eşleşirse birleşirler.
      2017-04-11 09: 23: 49Z
    3. Bu yorum cevabınız kadar net değil. (Sanırım sonucun ortak sütunları için altküme değerleri kümesi, girdilerin her birinin ortak sütunları için altküme değerleri kümelerinin kesişimi gibi bir şey düşünüyor olabilirsiniz; ama yazdığınız şey bu değil. net değil.)
      2017-04-11 14: 24: 05Z

    SELECT
      e1.emp_name,
      e2.emp_salary    
    FROM emp1 e1
    FULL OUTER JOIN emp2 e2
      ON e1.emp_id = e2.emp_id
    
    (aka Join is not an intersection unless the tables have the same columns), left join on satır, left outer join on eşleştirilmemiş sol tablo satırını boş bırakarak döndürür.

    inner join on aka union all), right join (on satır, right outer join on eşleşmemiş sağ tablo satırını null ile uzatır.

    inner join on (aka union all), full join on satır, full outer join on satır, inner join on, eşlenmemiş sol tablo satırını döndürür.

    (SQL Standard 2006 SQL /Foundation 7.7 Sözdizimi Kuralları 1, Genel Kurallar 1 b, 3 c &d, 5 b.)

    Öyleyse, union all’un altında yatan şeyin ne olduğunu öğrenene kadar union all’u yok.


    outer join satırının ne döndürdüğünü öğrenin.

    Yorumlarımı okuyun, kafam çok karışık ve amp; zayıf cevaplar.

    O zaman buradaki yorumlarımı okuyun ve kafam çok karışık. zayıf cevaplar.

        
    3
    2018-07-23 05: 53: 22Z
    1. Gerçekten birçok yorumunuzu okudum. "Doğru bir şekilde yorumlandığında, iç veya dış birleşimi temsil edebilir" şeklinde bir Venn şeması derken, gözlemcinin veya Venn şemasının kendisi tarafından doğru bir şekilde yorumlandığını mı kastediyorsunuz? İkincisi, lütfen çizin :)
      2019-04-24 16: 08: 07Z
    2. Ne söylemeye çalıştığınızdan emin değilim. Bir Venn şemasının standart olarak elementler kümesi olarak yorumlanmasından bahsediyorum. (Çünkü diyagramların bazı kullanımları bunu bile yönetemez.) Bir uygulama için "Düzgün", kümelerin ve /veya elemanların ne olduğunu söylemeyi içerir. Bu sayfanın üst kısmındaki yoruma bakın, 50 oy, iç ve dış birleşimler için bir Venn şeması. Bazı yorumlarımı bu soruya göre düzenleyeceğim. Bu yayında Venn şeması istemiyorum.
      2019-04-24 16: 31: 27Z
    3. Venn şemalarını da istemiyorum!
      2019-04-25 15: 52: 29Z
    4. Yorumlardaki hızlı ifadelerime rağmen SQL'nin çantalar & nulls ve SQL kültürü, isimlendirmek için ortak bir terminolojiye sahip değildir. İlgili kavramlar arasında ayrım yaparsanız, Venn diyagramındaki öğelerin "satır" ifadesi yerine "satır" çıktısının 1: 1 olduğunu açık bir şekilde açıklamak bile önemsiz değildir. Ya da iç ve dış birleşimlerin yaptıkları farkları bıraksın. "değer", NULL içerebilir veya içermeyebilir, "satır", tablo değerindeki bir yuvaya veya bir değişken değerine karşılık bir değer listesi olabilir & "=" SQL olabilir "=" eşitlik vs.
      2019-04-25 17: 44: 05Z
    5. Kartezyen-ürün-ilişkisel-ürün tartışmamıza benzer şekilde, Venn şemalarının çoktan anlayanlar için çok fazla şey ifade ettiğini düşünüyorum. birleştirme türleri arasındaki farklar!
      2019-04-29 07: 51: 15Z

    İç birleştirmeyle dış birleştirmeyle arasındaki fark aşağıdaki gibidir:

    1. İç birleştirme, eşleştirilen tuplere dayalı birleştirilmiş tabloların birleştirildiği bir birleşimdir, oysa dış birleştirme, hem eşleşen hem de eşleşen bir tuple'ı temel alan birleştirilmiş bir tablodur.
    2. İç birleştirme, eşleştirilmemiş satırın kullanılmadığı 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ştirme bir kesişme işlemine benzer, oysa dış birleşme birleşme işlemine benzer.
    4. İç birleştirme iki türdür, oysa dış birleştirme üç türdür.
    5. İç birleştirme daha yavaş, dış birleşim ise iç birleşimden daha hızlıdır.
    1
    2017-10-17 12: 25: 56Z

    2 tablonun altında düşünün:

    EMP

     inner join

    Bölüm

     inner join

    İç Katılma:

    Çoğunlukla sql sorgularında GİRİŞ olarak yazılır. Yalnızca tablolar arasındaki eşleşen kayıtları döndürür.

    Tüm çalışanları ve bölüm adlarını bulun:

     
    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
    

    Yukarıda gördüğünüz gibi, çıktıdaki EMP 'den

    deptid  name
    1       IT
    2       Accounts
    3       Security
    4       HR
    5       R&D
    
    basılmaz, çünkü dept_id
    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
    
    Departman tablosunda bir eşleşme bulamaz. Benzer şekilde, Jose ve 6 satırları, Emp tablosunda bir eşleşme bulamadıklarından Bölüm tablosundan yazdırılmaz.

    Yani, INNER JOIN veya sadece JOIN, yalnızca eşleşen satırları döndürür.

    LEFT JOIN:

    Bu, LEFT tablosundaki tüm kayıtları ve yalnızca RIGHT tablosundaki eşleşen kayıtları döndürür.

     HR

    Eğer yukarıdaki çıktıyı gözlemlerseniz, LEFT tablosundaki (Emp) tüm kayıtlar, sadece RIGHT tablosundaki kayıtlarla eşleştirilerek yazdırılır.

    R&D ve

    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    
    
    satırlar, dept_id'deki Emp tablosunda bir eşleşme bulamadıklarından Bölüm tablosundan yazdırılmaz.

    Öyleyse, LEFT JOIN, Sol tablodaki TÜM satırları ve yalnızca SAĞ tablodaki eşleşen satırları döndürür.

    DEMO’yu da burayı kontrol edebilir.     

    0
    2018-11-25 15: 04: 40Z
    1. Buradaki hiçbir şey, herhangi bir grubun ne yapabileceğini açıkça tanımlamaz. (Farklı olduklarını söylemekten başka, aralarında bir "fark" da yoktur.) Bu, 10 yıllık eski bir sorunun birçok cevabına (çok beğenilmiş) bir şey eklemez - bu "yararlı" mıdır?
      2018-11-27 01:19:10Z
    HR
kaynak yerleştirildi İşte