CROSS JOIN vs INNER JOIN in SQL


150

Arasındaki fark nedir CROSS JOINveINNER JOIN ?

ÇAPRAZ KATIL:

SELECT 
    Movies.CustomerID, Movies.Movie, Customers.Age, 
    Customers.Gender, Customers.[Education Level], 
    Customers.[Internet Connection], Customers.[Marital Status], 
FROM   
    Customers 
CROSS JOIN 
    Movies

İÇ BİRLEŞİM:

SELECT 
    Movies.CustomerID, Movies.Movie, Customers.Age, 
    Customers.Gender, Customers.[Education Level], 
    Customers.[Internet Connection], Customers.[Marital Status]
FROM   
    Customers 
INNER JOIN 
    Movies ON Customers.CustomerID = Movies.CustomerID

Hangisi daha iyi ve neden ikisini de kullanayım?


15
CROSS JOINtabloların tüm olası kombinasyonları ile sonuçlanacaktır. örneğin 100 sıralı Table1 ve 100 sıralı Table2 10000 kayıtla sonuçlanacaktır.
bummi

x CROSS JOIN yolduğunux INNER JOIN y ON 1=1
philipxy

Yanıtlar:


119

Çapraz birleşim satırları birleştirmez, her tabloda 1 ila 1 eşleşme ile 100 satır varsa, 10.000 sonuç alırsınız, Innerjoin aynı durumda sadece 100 satır döndürür.

Bu 2 örnek aynı sonucu döndürecektir:

Çapraz katılma

select * from table1 cross join table2 where table1.id = table2.fk_id

İç birleşim

select * from table1 join table2 on table1.id = table2.fk_id

Son yöntemi kullan


7
Ve sanırım ( a ile değiştirerek ) select * from table1 cross join table2 where table1.id = table2.fk_idolarak yazabilirsinizselect * from table1, table2 where table1.id = table2.fk_idcross join,
modulitos

5
@Lucas birleşmeler için eski sözdizimi, ancak işe yarayacak. Ben clausen sürümünü olsa da, çok daha okunabilir tavsiye ederim.
iliketocode

1
1'e 1 maç ne demek istiyorsun? Ne demek istiyorsun "aynı durum"
Jwan622

1
@iliketocode "birleştirmeler için eski sözdizimi" net değil, SQL-89 ve SQL-92 standartları hakkında konuşsanız iyi olur
Ivanzinho

INNER JOIN "100" cihazınız, açıklanmadığınız ve genel durumu açıklamadığınız özel bir durumdur.
philipxy

186

İşte Cross Join ve Inner Join'ın en güzel örneği.

Aşağıdaki tabloları düşünün

TABLO: Teacher

x------------------------x
| TchrId   | TeacherName | 
x----------|-------------x
|    T1    |    Mary     |
|    T2    |    Jim      |
x------------------------x

TABLO: Student

x--------------------------------------x
|  StudId  |    TchrId   | StudentName | 
x----------|-------------|-------------x            
|    S1    |     T1      |    Vineeth  |
|    S2    |     T1      |    Unni     |
x--------------------------------------x

1. İÇ KATILIM

İç birleşim, her iki tabloyu da tatmin eden satırları seçer .

Sınıf öğretmeni olan öğretmenleri ve ilgili öğrencileri bulmamız gerektiğini düşünün. Bu durumda, başvurmalıyız JOINya da INNER JOINyapacağız

resim açıklamasını buraya girin

Sorgu

SELECT T.TchrId,T.TeacherName,S.StudentName 
FROM #Teacher T
INNER JOIN #Student S ON T.TchrId = S.TchrId

Sonuç

x--------------------------------------x
|  TchrId  | TeacherName | StudentName | 
x----------|-------------|-------------x            
|    T1    |     Mary    |    Vineeth  |
|    T1    |     Mary    |    Unni     |
x--------------------------------------x

2. ÇAPRAZ KATIL

Çapraz katılma ilk tablodaki tüm satırları ve ikinci tablodaki tüm satırları seçer ve Kartezyen ürün olarak gösterir, yani tüm olasılıklarla

Sınıf öğretmenlerinden bağımsız olarak okuldaki tüm öğretmenleri ve öğrencileri bulmamız gerektiğini düşünün. CROSS JOIN.

resim açıklamasını buraya girin

Sorgu

SELECT T.TchrId,T.TeacherName,S.StudentName 
FROM #Teacher T
CROSS JOIN #Student S 

Sonuç

x--------------------------------------x
|  TchrId  | TeacherName | StudentName | 
x----------|-------------|-------------x            
|    T2    |     Jim     |    Vineeth  |
|    T2    |     Jim     |    Unni     |
|    T1    |     Mary    |    Vineeth  |
|    T1    |     Mary    |    Unni     |
x--------------------------------------x

1
Şekil 2'nin anahtarı karmaşıktır: CROSS JOIN argümanının (alakasız renk) öğelerini çevreler ve bir sayı (alakasız değer) bir satırdır ve bir çizgi (alakasız renk) bir sonuç satırıdır. Çanta olarak tablolar için bu bir Venn diyagramı değildir : değer olarak satırlar için yanlıştır ; elemanlar olarak satırlar için onlar olamaz paylaşılacak. Set olarak tablolar için Venn diyagramına ihtiyacınız yoktur . Şekil 1, JOIN'i açıklamak için yaygın bir korkunç girişimdir. Anahtarı da karmaşık: Sadece set olarak tablolar için & sadece equijoin & sadece bir değer; aynı zamanda girdiyi çıktıdan farklı temsil eder. Yazın bunu genel olarak JOIN için.
philipxy

Şekil 1 aşağıdakiler için kesişen daire Venn diyagramlarının 4 renklenmesinin ilki olarak yararlı ve doğrudur: (INNER) JOIN vs LEFT, RIGHT & FULL (OUTER) JOIN, ancak CROSS JOIN'e karşı değil . Kavşak satırları JOIN, sol / sağ satırlar LEFT / RIGHT JOIN içindeki ekstra (boş genişletilmiş) satırlardır. Bu içerir ÇAPRAZ (İÇ) özel durum olarak artır olmayan kesişme hiç satır olduğu yerde artır.
philipxy

1
Önerin için teşekkürler. Her neyse, OP bu iki birleşme arasındaki farkı istedi. Bu soruyu, herhangi bir yeni başlayanın aralarındaki farkı kolayca anlayabilecek şekilde cevapladım. Söylediğiniz gibi, Üretim ortamında olduğu gibi anahtar vermedim. Kolayca anlamak için sadece bir örnek. Ve Cross Joinbir Wherecümle verilmedikçe tüm satırları döndürmediğini düşünüyor musunuz? Yorumlarınızdan, yeni başlayanların kafasını karıştırma şansı daha fazladır !!! @philipxy
Sarath Avanavu

1
Benim yorumlarım, ne söylemeye çalıştıklarını bilse ve bu konu için uygunsuz olsa bile diyagramların yorumlanmasının zor olduğuna işaret ediyor . "Şekil" veya "anahtar" ile "bir diyagramın parçalarının ne anlama geldiğinin açıklaması" demek istedim. "Yaz" derken, diyagramın bölümlerinin ne anlama geldiğini çok açık bir şekilde yazmaya çalışın. Diyagramların karmaşık olduğunu ve çapraz birleştirme ile iç birleşme göstermediğini göreceksiniz! Yani cevabınıza ait değiller. PS Table ilişkisel anahtarlarının JOIN'lerin ne yaptığını açıklamada hiçbir rolü yoktur. PPS Birleşimler arasındaki tek fark, INNER JOIN'in bir AÇIK olmasıdır.
philipxy

W3Schools'da içinde Bak w3schools.com/sql/sql_join_inner.asp onlar INNER JOIN için şemasının benzer türde verdik nerede. @Philipxy
Sarath Avanavu

69

CROSS JOIN = (INNER) JOIN = virgül (",")

TL; DR SQL CROSS JOIN, (INNER) JOIN ve virgül (",") arasındaki tek fark (değerlendirme sırası için daha düşük önceliğe sahip virgülün yanı sıra) CROSS JOIN ve virgül içermezken (INNER) JOIN bir ON'a sahiptir.


Yeniden ara ürünler

Her üçü de, her bir tablodan bir satırın tüm olası kombinasyonlarından bir ara kavramsal SQL tarzı ilişkisel "Kartezyen" ürünü, yani çapraz birleştirme üretir. Sıra sayısını azaltan AÇIK ve / veya NEREDE.SQL Keman

SQL Standart tanımlar <comma> ürünüyle (7.5 1.b.ii), <çapraz katılma> <comma> (7.7 1.a) ile ve JOIN ON <arama koşulu> ile <comma> artı WHERE (7.7 1.b) üzerinden ).

Wikipedia'nın belirttiği gibi:

Çapraz katılma

CROSS JOIN birleşimdeki tablolardan satırların Kartezyen ürününü döndürür. Başka bir deyişle, ilk tablodaki her satırı ikinci tablodaki her bir satırla birleştiren satırlar üretecektir.

İç birleşim

[...] Birleşmenin sonucu, ilk olarak tablolardaki tüm kayıtların Kartezyen ürününü (veya Çapraz birleştirmeyi) (tablo A'daki her kaydı tablo B'deki her kayıtla birleştirerek) ve sonra geri döndürmenin sonucu olarak tanımlanabilir. birleştirme yüklemini tatmin eden tüm kayıtlar.

"Örtülü birleştirme notasyonu", SELECT deyiminin FROM yan tümcesinde, ayırmak için virgül kullanarak birleştirme tablolarını listeler. Böylece çapraz bir birleşmeyi belirtir.

OUTER JOIN'ları yeniden kullanın ve ON ile WHERE arasındaki bağlantıları kullanma LEFT JOIN (OUTER JOIN) ile INNER JOIN .

Tablolar arasındaki sütunları neden karşılaştırmalı?

Yinelenen satır olmadığında:

Her tablo, belirli bir doldurma boşlukları ifade şablonundan gerçek bir ifade oluşturan satırları içerir. (Bu, gerçek bir hale teklif from-- karşılayan -a bazı (karakteristik) yüklemi .)

  • Temel tablo, bazı DBA tarafından verilen deyim şablonlarından gerçek bir deyim oluşturan satırları içerir:

    /* rows where
    customer C.CustomerID has age C.Age and ...
    */
    FROM Customers C
  • Bir katılımın ara ürünü, işlenenlerinin şablonlarının AND'inden doğru bir ifade veren satırları içerir:

    /* rows where
        customer C.CustomerID has age C.Age and ...
    AND movie M.Movie is rented by customer M.CustomerID and ...
    */
    FROM Customers C CROSS JOIN Movies M
  • ON & WHERE koşulları VE daha fazla şablon vermek üzere yerleştirilir. Değer, yine bu şablonu karşılayan satırlardır:

    /* rows where
        customer C.CustomerID has age C.Age and ...
    AND movie M.Movie is rented by customer M.CustomerID and ...
    AND C.CustomerID = M.CustomerID
    AND C.Age >= M.[Minimum Age]
    AND C.Age = 18
    */
    FROM Customers C INNER JOIN Movies M
    ON C.CustomerID = M.CustomerID
    AND C.Age >= M.[Minimum Age]
    WHERE C.Age = 18

Özellikle, tablolar arasındaki (SQL) eşitliği için sütunların karşılaştırılması, şablondan birleştirilen tabloların bölümlerinden üründen tutulan satırların, bu sütunlar için aynı (NULL olmayan) değere sahip olduğu anlamına gelir. Birçok satırın tipik olarak tablolar arasındaki eşitlik karşılaştırmalarıyla kaldırılması tesadüfidir - gerekli ve yeterli olan, istediğiniz satırları karakterize etmektir.

İstediğiniz satırlar için şablon için SQL yazın!

Sorguların (ve tabloların koşullara karşı) anlamlarına bakın:
İki farklı sütun için başka bir SQL tablosundan eşleşen veriler nasıl alınır: İç Birleştirme ve / veya Birlik?
İnsan tarafından okunabilir bir açıklamadan SQL sorgusu oluşturmak için herhangi bir başparmak kuralı var mı?

Aşırı yükleme "çapraz birleştirme"

Ne yazık ki "çapraz katılma" terimi aşağıdakiler için kullanılır:

  • Ara ürün.
  • ÇAPRAZ KATIL.
  • (INNER) Bir tablodaki herhangi bir sütunu başka bir sütunun herhangi bir sütunu ile karşılaştırmayan bir ON veya WHERE ile BİRLEŞİN (Bu, ara ürün satırlarının çoğunu döndürme eğiliminde olduğundan.)

Bu çeşitli anlamlar şaşkına döner. (Örneğin, diğer yanıtlar ve yorumlardaki gibi.)

CROSS JOIN vs (INNER) JOIN vs virgül kullanma

Ortak sözleşme:

  • CROSS JOIN öğesini yalnızca ve tablolar arasındaki sütunları karşılaştırmadığınız zaman kullanın. Bu, karşılaştırma eksikliğinin kasıtlı olduğunu göstermek içindir.
  • Tablolar arasındaki sütunları karşılaştırdığınızda (INNER) JOIN işlevini ON ile kullanın. (Artı muhtemelen diğer koşullar.)
  • Virgül kullanmayın.

Tipik olarak, bir NERE için tablo çiftlerinde olmayan koşullar da tutulur. Ancak SAĞ, SOL veya TAM (DIŞ) BİRLEŞTİRME argümanı için uygun satırları almak için bir (n INNER) JOIN ON'a konmaları gerekebilir.

Re "Virgül kullanmayın" Virgülün önceliği daha düşük olduğundan virgülün açık JOIN ile karıştırılması yanıltıcı olabilir. Ancak CROSS JOIN, (INNER) JOIN ve virgül anlamında ara ürünün rolü göz önüne alındığında, yukarıdaki sözleşmenin hiç kullanılmaması argümanları titrek. ÇAPRAZ BİRLEŞTİRME veya virgül, tıpkı GERÇEK bir durumdaki (İÇ) BİRLEŞME gibidir. Bir ara ürün, ON ve WHERE hepsi karşılık gelen yüklemde bir AND ekler. Bununla birlikte, başka bir INNER JOIN ON düşünülebilir - örneğin, yalnızca ON koşulunu karşılayan bir çift giriş satırı bulurken bir çıkış satırı oluşturmak - yine de, koşulu karşılayan çapraz birleştirme satırlarını döndürür. AÇIK tek nedeni vardı SQL takviyesi virgül yazmaktı OUTERJOIN. Tabii ki, bir ifade anlamını netleştirmelidir; ama açık olan ne anlama geldiğine bağlıdır.

Re Venn diyagramları Kesişen iki daireye sahip bir Venn diyagramı , aynı giriş için INNER, LEFT, RIGHT & FULL JOIN'lar için çıkış satırları arasındaki farkı gösterebilir . ON, koşulsuz olarak DOĞRU olduğunda, INNER JOIN sonucu CROSS JOIN ile aynıdır. Ayrıca INTERSECT, UNION & EXCEPT için giriş ve çıkış satırlarını gösterebilir . Her iki giriş de aynı sütunlara sahip olduğunda, INTERSECT sonucu standart SQL NATURAL JOIN ile aynıdır ve EXCEPT sonucu LEFT & RIGHT JOIN içeren belirli deyimlerle aynıdır. Ama yok değil (İÇ) genel olarak eserlerini KATILIN nasıl göstermektedir. Bu ilk bakışta akla yatkın görünüyor . Parçaların giriş ve / veya çıkışözel durumlarını tanımlayabilirON, PKs (birincil anahtarlar), FKs (yabancı anahtarlar) ve / veya SELECT. Bunu görmek için tek yapmanız gereken , daireler tarafından temsil edilen kümelerin öğelerinin tam olarak ne olduğunu tanımlamaktır . (Hangi sunumlar açıkça asla başarılı oldular.) (Birleştirmeler için genelde unutmayın çıkış sıraları giriş satırları farklı başlıklar var . Ve SQL tablolardır çantalar değil setleri satır boş değerlere sahip .)


6
+1 Bu yanıtı en çok seviyorum - diğerleri sonuçların farklı olacağını ima ediyor gibi görünüyor, ancak "ON" yan tümcesi "NEREDE" ile değiştirilirse sonuçlar aynıdır
Ronnie

4
+1 Bir INNER JOIN'da ON yantümcesini
atlamanın

"ara kavramsal SQL tarzı Kartezyen çapraz ürün" - bu, "gerçekten sıralı çiftler kümesi değil, ama" Kartezyen ürün "demekten kaçınamam" başka bir yoludur? :) Matematikçi olmayan bir kişi olarak, 'Kartezyen ürün' terimiyle karşılaştığım tek bağlam, birinin SQL'leri açıkladığı zamandır CROSS JOIN. Birisinin SQL'e ne kadar sıklıkla Kartezyen ürününe aşina olduğunu, ancak anlayamadığını merak ediyorum CROSS JOIN.
birgün9

1
Operatör Kartezyen ürünü bazı setler verildiğinde bir dizi sıralı tuple döndürdüğünde. Sonucudur bir Kartezyen ürün. İlişkisel ve SQL kültürleri ne yazık ki kötüye / aşırı yük "Kartezyen ürün" uyandıran ancak Kartezyen ürün olmayan operatörler için . Örn Wikipedia! Buna karşıyım - sadece yanlış yönlendiriyor / kafa karıştırıyor. Yine de burada ne yazık ki sadece SQL çapraz birleştirmenin kendi kelimelerimle nasıl çalıştığını ve Wikipedia'ya ertelendiğini açık bir şekilde açıklarım. Ben etiketlemek sonucu "ara kavramsal SQL tarzı kartezyen çarpım". Evet "Kartezyen" ne yazık ki zaten kullanan / bekleyen olanlar içindir.
philipxy

1
Bu daha yüksek puanlı cevapların aksine doğru cevaptır. Dilin temellerini bile anlamamasına veya tanımlamamasına rağmen, yüzeysel, makul sesli, iyi biçimlendirilmiş resimlerle açıklamaların eğitim içeriğine egemen olması SQL ile tipiktir.
Charles Roddie

23

İç birleşim

Yalnızca her iki birleştirilen tabloda da eşleşmesi olan satırları görüntüleyen birleştirme iç birleşim olarak bilinir. Bu sorgu ve görünüm Tasarımcısı varsayılan birleştirme olduğunu.

İç Bağlantı için Sözdizimi

SELECT t1.column_name,t2.column_name
FROM table_name1 t1
INNER JOIN table_name2 t2
ON t1.column_name=t2.column_name

Çapraz Katılma

Birleştirmeye katılan tabloların Kartezyen ürününü üreten bir çapraz birleşim. Kartezyen bir ürünün boyutu, birinci tablodaki satır sayısının, ikinci tablodaki satır sayısıyla çarpılmasıdır.

Çapraz Birleştirme için Sözdizimi

SELECT * FROM table_name1
CROSS JOIN table_name2

Ya da başka bir şekilde de yazabiliriz

SELECT * FROM table_name1,table_name2

Şimdi Çapraz katılma için aşağıdaki sorguyu kontrol edin

Misal

SELECT * FROM UserDetails
CROSS JOIN OrderDetails

Veya

SELECT * FROM UserDetails, OrderDetails


8

ÇAPRAZ KATIL

Bu makalede açıkladığım gibi , ÇAPRAZ BAĞLANTI Kartezyen Ürün üretmek içindir.

Bir Kartezyen Ürün iki set A ve B alır ve verilen iki veri setinden olası çift kayıt permütasyonlarını üretir.

Örneğin, aşağıdaki ranksve suitsveritabanı tablolarına sahip olduğunuzu varsayarsak :

Rütbe ve takım elbise masaları

Ve ranksşu satırları vardır:

| name  | symbol | rank_value |
|-------|--------|------------|
| Ace   | A      | 14         |
| King  | K      | 13         |
| Queen | Q      | 12         |
| Jack  | J      | 11         |
| Ten   | 10     | 10         |
| Nine  | 9      |  9         |

İken suitstablo aşağıdaki kayıtları içerir:

| name    | symbol |
|---------|--------|
| Club    |       |
| Diamond |       |
| Heart   |       |
| Spade   |       |

CROSS JOIN sorgusu aşağıdaki gibi:

SELECT
   r.symbol AS card_rank,
   s.symbol AS card_suit
FROM
   ranks r
CROSS JOIN
   suits s

olası tüm permütasyonları ranksve suitesçiftleri üretecektir :

| card_rank | card_suit |
|-----------|-----------|
| A         |          |
| A         |          |
| A         |          |
| A         |          |
| K         |          |
| K         |          |
| K         |          |
| K         |          |
| Q         |          |
| Q         |          |
| Q         |          |
| Q         |          |
| J         |          |
| J         |          |
| J         |          |
| J         |          |
| 10        |          |
| 10        |          |
| 10        |          |
| 10        |          |
| 9         |          |
| 9         |          |
| 9         |          |
| 9         |          |

İÇ BİRLEŞİM

Öte yandan, INNER JOIN iki birleştirilen veri setinin Kartezyen Ürününü döndürmez.

Bunun yerine, INNER JOIN tüm öğeleri sol taraftaki tablodan alır ve bunları sağ taraftaki tablodaki kayıtlarla eşleştirir, böylece:

  • sağ taraftaki tabloda eşleşen kayıt yoksa, sol taraftaki satır sonuç kümesinden filtrelenir
  • sağ taraftaki tabloda eşleşen herhangi bir kayıt için sol taraftaki satır, bu kayıt ile sağ taraftaki tüm ilgili alt kayıtları arasında Kartezyen Ürün varmış gibi tekrarlanır.

Örneğin, bir üst ve alt tablolar arasında aşağıdaki gibi görünen bire çok tablo ilişkimiz olduğunu varsayarsak :postpost_comment

Bir-çok tablo ilişkisi

Şimdi, posttablo aşağıdaki kayıtlara sahipse:

| id | title     |
|----|-----------|
| 1  | Java      |
| 2  | Hibernate |
| 3  | JPA       |

ve post_commentstablo şu satırlara sahiptir:

| id | review    | post_id |
|----|-----------|---------|
| 1  | Good      | 1       |
| 2  | Excellent | 1       |
| 3  | Awesome   | 2       |

Aşağıdaki gibi bir INNER JOIN sorgusu:

SELECT
   p.id AS post_id,
   p.title AS post_title,
   pc.review  AS review
FROM post p
INNER JOIN post_comment pc ON pc.post_id = p.id

postilişkili oldukları tüm kayıtlarla birlikte tüm kayıtları içerecektir post_comments:

| post_id | post_title | review    |
|---------|------------|-----------|
| 1       | Java       | Good      |
| 1       | Java       | Excellent |
| 2       | Hibernate  | Awesome   |

Temel olarak, INNER JOIN'i, yalnızca eşleşen kayıtların son sonuç kümesinde tutulduğu filtrelenmiş bir CROSS JOIN olarak düşünebilirsiniz.

INNER JOIN'in nasıl çalıştığı hakkında daha fazla bilgi için bu makaleye de göz atın.


"INNER JOIN iki birleştirilen veri kümesinin Kartezyen Ürününü döndürmez" 1 = 1'deki x INNER JOIN y bunu döndürdüğünde biraz fazladır. Söylemeye çalıştığınız şey aslında (tabii ki) 1 = 1 koşulu için geri döndüğünde "Yerine" de gelir. Mermilerdeki dilin iç birleşimin sonucunu açıkça tanımlamaması dışında. Bunu açıklayan şey, koşulu karşılamayan daha az sıralı bir çapraz birleşim olmasıdır. Benzer şekilde, "kombinasyonları" kullanan çapraz birleştirme diliniz de net değildir.
philipxy

7

SQL Server ayrıca daha basit gösterimi de kabul eder:

SELECT A.F, 
       B.G, 
       C.H 
  FROM TABLE_A A, 
       TABLE_B B, 
       TABLE_C C
 WHERE A.X = B.X 
   AND B.Y = C.Y

Bu basit gösterimi kullanarak, iç ve çapraz birleşimler arasındaki farktan rahatsız olmak gerekmez. İki "ON" yan tümcesi yerine, işi yapan tek bir "WHERE" yan tümcesi vardır. Hangi "JOIN" "ON" cümlelerinin nereye gittiğini bulmakta güçlük çekiyorsanız, "JOIN" notasyonunu terk edin ve yukarıdaki basit olanı kullanın.

Hile değil.


2

İç birleşimleri kullanarak sorgular yazarken, koşul her iki tabloda da sağlandıysa, kayıtlar her iki tabloda da getirilir, yani her iki tabloda da ortak sütunun tam eşleşmesi.

Çapraz birleştirme kullanarak sorgu yazarken sonuç, her iki tabloda da kayıtların hiçbirinin kartezyen ürünü gibidir. örneğin table1 2 kayıt ve table2 3 kayıt içeriyorsa, sorgunun sonucu 2 * 3 = 6 kayıttır.

Yani ihtiyacınız olana kadar çapraz katılma için gitmeyin.


2
Sadece WHERE yan tümcesi eksikse!
epitka

2

Çapraz birleşim ve iç birleşim, iç birleşmede kartezyen ürünün bazı sonuçlarını boolean olarak filtrelediğimiz tek farkla aynıdır.

table1
x--------------------------------------x
|  fieldA  |    fieldB   |    fieldC   | 
x----------|-------------|-------------x            
|    A     |      B      |    option1  |
|    A     |      B1     |    option2  |
x--------------------------------------x

table2
x--------------------------------------x
|  fieldA  |    fieldB   |    fieldC   | 
x----------|-------------|-------------x            
|    A     |      B      |    optionB1 |
|    A1    |      B1     |    optionB2 |
x--------------------------------------x

 cross join
  A,B,option1,A,B,optionB1
  A,B,option1,A1,B1,optionB2
  A,B1,option2,A,B,optionB1
  A,B1,option2,A1,B1,optionB2

 inner join on field1 (only with the value is the same in both tables)
  A,B,option1,A,B,optionB1
  A,B1,option2,A,B,optionB1

 inner join on field1
  A,B,option1,A,B,optionB1

Birleştirme için kullandığımız alanın yalnızca bir vakası olduğuna karar verdiğimiz verilerimizin tasarımıdır. Join, her iki tabloyu da çapraz birleştirin ve yalnızca özel boole ifadesini gerçekleştiren satırları alın.

Birleştirmelerimizi yaptığımız alanlar her iki tabloda da boş olursa filtreyi geçiririz. Null'ları önlemek veya bunlara izin vermek için ek kurallar eklemek bize veya veritabanı üreticisine bağlıdır. Temel ilkelere bağlı kalmak, sadece bir çapraz birleşim ve ardından bir filtredir.


0

İç birleşim iki tablo arasındaki eşleşen kayıtların sonucunu verir, burada çapraz birleşim size iki tablo arasındaki olası kombinasyonları verir.


0

A = {1,5,3,4,6,7,9,8} B = {2,8,5,4,3,6,9}

cross join Kartezyen ürün olarak davranır ✖ B = {1,2}, {1,8} ..., {5,2}, {5,8}, {5,5} ..... {3,3} ..., {6,6} .... {8,9} ve bu uzun sonuç kümesini döndürdü.

işlerken inner joinonun Kartezyen ürünün aracılığıyla yapılır ve iki tablonun birincil anahtarları olarak ve A = B için fıkra aramada bu sipariş çiftleri düşünüyorsanız .. çiftleri eşleştirme seçmek sonra inner join, {6,6} {4,4} {5,5} seçim , {9,9} ve bu kimliklerle ilgili seçme maddesinde istenen sütunu döndürdü.

cross joina = b'de ise sonuç olarak aynı sonuç ayarlanır inner join. bu durumda da kullanın inner join.


-1

Beklediğiniz çıktıya bağlıdır.

Çapraz birleştirme, bir tablodaki tüm satırları başka bir tablodaki tüm satırlarla eşleştirir. İç birleşim bir alan veya alanlarla eşleşir. 10 sıralı bir tablonuz ve 10 sıralı başka bir tablonuz varsa, iki birleşim farklı davranacaktır.

Çapraz birleştirmenin 100 satırı döndürülecek ve ilişkili olmayacak, sadece Kartezyen ürün olarak adlandırılacak. İç birleşim kayıtları birbiriyle eşleştirecektir. Birinin birincil anahtarı olduğunu ve diğerinde yabancı anahtar olduğunu varsayarsak 10 satır döndürürsünüz.

Çapraz birleştirmenin genel faydası sınırlıdır, ancak tamlık için vardır ve sorguya hiçbir ilişki eklenmemiş tablolara katılmanın sonucunu açıklar. Kelimelerin kombinasyonlarını veya benzer bir şeyleri listelemek için çapraz birleştirme kullanabilirsiniz. Diğer taraftan bir iç birleşim en yaygın birleşimdir.


Herkesi karıştırmamak. Cevabı kısaltmayı denedim. Bu mümkün olan en iyi kısa cevaptır.
Shrikant Jadhav
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.