CROSS JOIN vs INNER JOIN dalam SQL


150

Apa perbedaan antara CROSS JOINdan INNER JOIN?

LINTAS BERGABUNG:

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

INNER BERGABUNG:

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

Mana yang lebih baik dan mengapa saya harus menggunakan yang mana?


15
CROSS JOINakan menghasilkan semua kemungkinan kombinasi tabel. mis. Table1 dengan 100 baris dan Table2 dengan 100 baris akan menghasilkan 10.000 catatan.
bummi

x CROSS JOIN yadalahx INNER JOIN y ON 1=1
philipxy

Jawaban:


119

Gabung silang tidak menggabungkan baris, jika Anda memiliki 100 baris di setiap tabel dengan 1 hingga 1 pertandingan, Anda mendapatkan 10.000 hasil, Innerjoin hanya akan mengembalikan 100 baris dalam situasi yang sama.

2 contoh ini akan menghasilkan hasil yang sama:

Silang bergabung

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

Batin bergabung

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

Gunakan metode terakhir


7
Dan saya percaya Anda dapat menulis select * from table1 cross join table2 where table1.id = table2.fk_idsebagai select * from table1, table2 where table1.id = table2.fk_id(ganti cross joindengan a ,)
modulitos

5
@Lucas itu adalah sintaks lama untuk bergabung, tetapi itu akan berhasil. Saya merekomendasikan versi clausen, jauh lebih mudah dibaca.
iliketocode

1
apa yang anda maksudkan dengan pertandingan 1 banding 1? Apa maksudmu "situasi yang sama"
Jwan622

1
@iliketocode "sintaks lama untuk bergabung" tidak jelas, Anda sebaiknya berbicara tentang standar SQL-89 dan SQL-92
Ivanzinho

INNER Anda GABUNG "100" adalah kasus khusus yang belum Anda jelaskan & Anda belum menjelaskan kasus umum.
philipxy

186

Ini adalah contoh terbaik dari Cross Join dan Inner Join.

Pertimbangkan tabel berikut

MEJA : Teacher

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

MEJA : Student

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

1. INNER BERGABUNG

Gabungan dalam memilih baris yang memenuhi kedua tabel .

Pertimbangkan kita perlu menemukan guru yang merupakan guru kelas dan siswa yang sesuai. Dalam kondisi itu, kita perlu menerapkan JOINatau INNER JOINakan

masukkan deskripsi gambar di sini

Pertanyaan

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

Hasil

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

2. LINTAS BERGABUNG

Cross join memilih semua baris dari tabel pertama dan semua baris dari tabel kedua dan ditampilkan sebagai produk Cartesian yaitu, dengan semua kemungkinan.

Pertimbangkan kita perlu menemukan semua guru di sekolah dan siswa terlepas dari guru kelas, kita perlu menerapkan CROSS JOIN.

masukkan deskripsi gambar di sini

Pertanyaan

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

Hasil

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

1
Kunci Gambar 2 adalah kompleks: Melingkari (warna tidak relevan) elemen argumen CROSS JOIN & angka (nilai tidak relevan) adalah barisnya & garis (warna tidak relevan) adalah baris hasil. Untuk tabel sebagai tas, itu bukan diagram Venn: untuk baris sebagai nilai, itu salah ; untuk baris sebagai elemen, mereka tidak dapat dibagi. Untuk tabel sebagai set Anda tidak perlu diagram Venn. Gambar 1 adalah upaya mengerikan yang umum untuk menjelaskan BERGABUNG. Kuncinya juga kompleks: Ini hanya untuk tabel sebagai set & hanya equijoin & hanya satu nilai; itu juga mewakili input berbeda dari output. Menulis itu untuk BERGABUNG pada umumnya.
philipxy

Gambar 1 berguna dan benar sebagai yang pertama dari 4 pewarnaan diagram lingkaran berpotongan Venn untuk: (INNER) BERGABUNG vs LEFT, RIGHT & FULL (OUTER) GABUNG tetapi tidak vs CROSS JOIN. Baris persimpangan berada di GABUNG, baris kiri / kanan adalah baris ekstra (null-extended) dalam KIRI / GABUNGAN YANG BENAR. Ini termasuk CROSS JOIN sebagai kasus khusus (INNER) JOIN di mana tidak ada baris di persimpangan.
philipxy

1
Terima kasih atas saran Anda. Bagaimanapun, OP telah meminta perbedaan antara kedua gabungan ini. Saya telah menjawab pertanyaan ini sedemikian rupa sehingga setiap pemula dapat dengan mudah memahami perbedaan di antara mereka. Seperti yang Anda katakan, saya belum memberikan kunci seperti di lingkungan Produksi. Ini hanya contoh untuk dipahami dengan mudah. Dan untuk Cross Join, apakah Anda pikir itu tidak mengembalikan semua baris kecuali Wherediberikan klausa? Dari komentar Anda, ada banyak peluang bagi pemula untuk menjadi bingung !!! @philipxy
Sarath Avanavu

1
Komentar saya menunjukkan bahwa diagram sulit untuk diartikan bahkan jika seseorang tahu apa yang mereka coba katakan dan tidak pantas untuk topik ini. Dengan "kunci" (dari Gambar 2 atau 1) yang saya maksudkan adalah "penjelasan tentang apa arti bagian-bagian diagram". Dengan "menulisnya" Maksud saya mencoba sendiri untuk menulis dengan sangat jelas apa yang dimaksud dengan bagian diagram. Anda akan menemukan bahwa diagramnya rumit dan tidak menunjukkan cross join vs inner join! Yaitu mereka tidak termasuk dalam jawaban Anda. Kunci relasional Tabel PS tidak memiliki peran dalam menjelaskan apa yang BERGABUNG lakukan. PPS Satu-satunya perbedaan antara gabungan adalah INNER JOIN memiliki ON.
philipxy

Lihat di W3Schools w3schools.com/sql/sql_join_inner.asp di mana mereka telah memberikan jenis diagram yang sama untuk INNER JOIN. Pastikan Anda benar sebelum membuat komentar @ philipxy
Sarath Avanavu

69

CROSS JOIN = (INNER) JOIN = koma (",")

TL; DR Satu-satunya perbedaan antara SQL CROSS JOIN, (INNER) JOIN dan koma (",") (selain koma yang memiliki prioritas lebih rendah untuk urutan evaluasi) adalah bahwa (INNER) BERGABUNG dengan ON sementara CROSS JOIN dan koma tidak.


Kembali produk antara

Ketiganya menghasilkan produk "Cartesian" relasional konseptual SQL-style antara, alias gabungan silang, dari semua kemungkinan kombinasi baris dari setiap tabel. Ini HIDUP dan / atau DIMANA yang mengurangi jumlah baris. SQL Fiddle

SQL Standard mendefinisikan <comma> via produk (7.5 1.b.ii), <cross join> via <comma> (7.7 1.a) dan BERGABUNG DENGAN <kondisi pencarian> via <comma> ditambah WHERE (7.7 1.b ).

Seperti yang dikatakan Wikipedia:

Silang bergabung

CROSS JOIN mengembalikan produk Cartesian dari baris dari tabel dalam gabungan. Dengan kata lain, itu akan menghasilkan baris yang menggabungkan setiap baris dari tabel pertama dengan setiap baris dari tabel kedua.

Batin bergabung

[...] Hasil gabungan dapat didefinisikan sebagai hasil dari pertama mengambil produk Cartesian (atau Cross bergabung) dari semua catatan di tabel (menggabungkan setiap catatan di tabel A dengan setiap catatan di tabel B) dan kemudian kembali semua catatan yang memenuhi predikat gabung.

"Notasi gabungan implisit" hanya mencantumkan tabel untuk bergabung, dalam klausa FROM dari pernyataan SELECT, menggunakan koma untuk memisahkannya. Dengan demikian itu menentukan silang bergabung

Re OUTER bergabung dan menggunakan ON vs MANA di dalamnya melihat Kondisi di KIRI BERGABUNG (Outer JOIN) vs INNER JOIN .

Mengapa membandingkan kolom antar tabel?

Ketika tidak ada baris duplikat:

Setiap tabel memiliki baris yang membuat pernyataan benar dari templat pernyataan blank fill-in-the- [name-] tertentu. (Itu membuat proposisi yang benar dari-- memenuhi - predikat (karakteristik) tertentu .)

  • Tabel dasar menampung baris yang membuat pernyataan benar dari beberapa templat pernyataan yang diberikan DBA:

    /* rows where
    customer C.CustomerID has age C.Age and ...
    */
    FROM Customers C
  • Produk perantara join memegang baris yang membuat pernyataan benar dari DAN dari templat operandnya:

    /* 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 ketentuan ANDed in untuk memberikan templat lebih lanjut. Nilai lagi baris yang memenuhi templat itu:

    /* 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

Secara khusus, membandingkan kolom untuk (SQL) kesetaraan antar tabel berarti bahwa baris yang disimpan dari produk dari bagian templat tabel yang digabung memiliki nilai yang sama (non-NULL) untuk kolom tersebut. Itu hanya kebetulan bahwa banyak baris biasanya dihapus oleh perbandingan kesetaraan antara tabel - apa yang perlu dan cukup adalah untuk mencirikan baris yang Anda inginkan.

Cukup tulis SQL untuk templat untuk baris yang Anda inginkan!

Kembali makna kueri (dan tabel vs kondisi) lihat:
Bagaimana cara mendapatkan data yang cocok dari tabel SQL lain untuk dua kolom yang berbeda: Inner Join dan / atau Union?
Apakah ada aturan praktis untuk membangun query SQL dari deskripsi yang dapat dibaca manusia?

Overloading "gabung silang"

Sayangnya istilah "cross join" digunakan untuk:

  • Produk antara.
  • LINTAS BERGABUNG.
  • (INNER) GABUNG dengan ON atau WHERE yang tidak membandingkan kolom mana pun dari satu tabel dengan kolom lainnya. (Karena itu cenderung mengembalikan begitu banyak baris produk antara.)

Berbagai makna ini dikacaukan. (Misalnya, seperti dalam jawaban dan komentar lain di sini.)

Menggunakan CROSS JOIN vs (INNER) JOIN vs koma

Konvensi umum adalah:

  • Gunakan CROSS JOIN kapan dan hanya ketika Anda tidak membandingkan kolom antara tabel. Itu untuk menunjukkan bahwa kurangnya perbandingan itu disengaja.
  • Gunakan (INNER) GABUNG dengan ON kapan dan hanya ketika Anda membandingkan kolom antara tabel. (Plus kemungkinan kondisi lainnya.)
  • Jangan gunakan koma.

Biasanya juga kondisi tidak pada pasangan tabel disimpan untuk WHERE. Tetapi mereka mungkin harus dimasukkan ke dalam (n BATIN) BERGABUNG untuk mendapatkan baris yang sesuai untuk argumen untuk GABUNG KANAN, KIRI atau PENUH (OUTER).

Kembali "Jangan gunakan koma" Mencampur koma dengan JOIN eksplisit dapat menyesatkan karena koma memiliki prioritas lebih rendah. Tetapi mengingat peran produk antara dalam arti CROSS JOIN, (INNER) JOIN dan koma, argumen untuk konvensi di atas untuk tidak menggunakannya sama sekali goyah. GABUNG LINTAS atau koma sama seperti (INNER) GABUNG yang dalam kondisi BENAR. Produk antara, AKTIF dan DIMANA semuanya memperkenalkan DAN dalam predikat yang sesuai. Namun yang lain INNER JOIN ON dapat dipikirkan - katakanlah, menghasilkan baris output hanya ketika menemukan sepasang baris input yang memenuhi kondisi ON - namun demikian mengembalikan baris gabungan silang yang memenuhi kondisi tersebut. Satu-satunya alasan ON harus menambahkan koma dalam SQL adalah untuk menulis OUTERBERGABUNG. Tentu saja, ungkapan harus membuat maknanya jelas; tetapi apa yang jelas tergantung pada apa yang dianggap berarti.

Diagram Re Venn Diagram Venn dengan dua lingkaran berpotongan dapat menggambarkan perbedaan antara baris output untuk INNER, LEFT, RIGHT & FULL JOINs untuk input yang sama. Dan ketika ON benar tanpa syarat, hasil INNER JOIN sama dengan CROSS JOIN. Juga dapat menggambarkan baris input dan output untuk INTERSECT, UNION & EXCEPT. Dan ketika kedua input memiliki kolom yang sama, hasil INTERSECT sama dengan standar SQL NATURAL JOIN, dan hasil EXCEPT sama dengan idiom tertentu yang melibatkan LEFT & RIGHT JOIN. Tetapi itu tidak menggambarkan bagaimana (INNER) BERGABUNG secara umum. Itu hanya tampaknya masuk akal pada pandangan pertama . Ini dapat mengidentifikasi bagian input dan / atau output untukkasus khususON, PK (kunci utama), FK (kunci asing) dan / atau PILIH. Yang harus Anda lakukan untuk melihat ini adalah mengidentifikasi apa sebenarnya elemen set yang diwakili oleh lingkaran . (Presentasi yang kacau tidak pernah membuat jelas.) (Ingat bahwa secara umum untuk bergabung baris output memiliki judul yang berbeda dari baris input . Dan tabel SQL adalah tas tidak set baris dengan NULLs .)


6
+1 Saya paling suka jawaban ini - yang lain sepertinya menyiratkan bahwa hasilnya akan berbeda, tetapi jika klausa "ON" diganti dengan "WHERE" hasilnya sama
Ronnie

4
+1 Terima kasih telah menjelaskan bahwa menghilangkan klausa ON pada INNER JOIN akan menghasilkan hasil yang sama persis dengan menggunakan CROSS JOIN
Cerno

"produk silang Cartesian SQL-style konseptual antara" - apakah itu cara lain untuk mengatakan, "itu sebenarnya bukan pasangan yang dipesan, tetapi saya tidak bisa menghindari mengatakan 'produk Cartesian'"? :) Sebagai non-matematikawan sendiri, satu-satunya konteks di mana saya pernah menjumpai istilah 'produk Cartesian' adalah ketika seseorang menjelaskan SQL CROSS JOIN. Saya bertanya-tanya seberapa sering seseorang datang ke SQL yang sudah akrab dengan produk Cartesian tetapi tidak dapat mengetahuinya CROSS JOIN.
onedaywhen

1
@oneday ketika Produk Operator Cartesian mengembalikan satu set tupel yang dipesan dengan beberapa set. Hasilnya adalah sebuah produk Cartesian. Budaya Relasional & SQL sayangnya menyalahgunakan / membebani "produk Cartesian" untuk operator yang membangkitkan tetapi bukan produk Cartesian. Misalnya Wikipedia! Saya menentang itu - itu hanya menyesatkan / membingungkan. Namun di sini sayangnya saya hanya menjelaskan bagaimana SQL cross join bekerja dengan kata-kata saya sendiri dan tunduk pada Wikipedia. Saya memberi label hasil "antara produk silang Cartesian SQL-style konseptual antara". Ya "Cartesian" adalah untuk mereka yang sayangnya sudah rusak yang menggunakan / mengharapkannya.
philipxy

1
Ini adalah jawaban yang benar, tidak seperti jawaban yang berperingkat lebih tinggi. Ini khas dengan SQL yang dangkal, terdengar masuk akal, penjelasan yang diformat dengan baik dengan gambar mendominasi konten pendidikan, meskipun gagal untuk memahami atau mendefinisikan bahkan dasar-dasar bahasa.
Charles Roddie

23

Bergabunglah dengan Batin

Gabung yang menampilkan hanya baris yang memiliki kecocokan di kedua tabel yang bergabung dikenal sebagai gabung dalam. Ini adalah default bergabung dalam permintaan dan melihat Desainer.

Sintaks untuk Bergabung Gabung

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

Silang Bergabung

Gabung silang yang menghasilkan produk Cartesian dari tabel yang terlibat dalam gabung. Ukuran produk Cartesian adalah jumlah baris di tabel pertama dikalikan dengan jumlah baris di tabel kedua.

Sintaks untuk Cross Join

SELECT * FROM table_name1
CROSS JOIN table_name2

Atau kita bisa menulisnya dengan cara lain juga

SELECT * FROM table_name1,table_name2

Sekarang periksa kueri di bawah ini untuk bergabung dengan Cross

Contoh

SELECT * FROM UserDetails
CROSS JOIN OrderDetails

Atau

SELECT * FROM UserDetails, OrderDetails


8

LINTAS BERGABUNG

Seperti yang saya jelaskan dalam artikel ini , CROSS JOIN dimaksudkan untuk menghasilkan Produk Cartesian.

Produk Cartesian mengambil dua set A dan B dan menghasilkan semua permutasi yang mungkin dari catatan pasangan dari dua set data yang diberikan.

Misalnya, dengan asumsi Anda memiliki tabel berikut ranksdan suitsdatabase:

Jajaran dan setelan meja

Dan ranksmemiliki baris berikut:

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

Sementara suitstabel berisi catatan berikut:

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

Sebagai CROSS GABUNG permintaan seperti yang berikut ini:

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

akan menghasilkan semua kemungkinan permutasi ranksdan suitespasangan:

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

INNER BERGABUNG

Di sisi lain, INNER JOIN tidak mengembalikan Produk Cartesian dari dua kumpulan data yang bergabung.

Sebagai gantinya, INNER JOIN mengambil semua elemen dari tabel sisi kiri dan mencocokkannya dengan catatan di tabel sisi kanan sehingga:

  • jika tidak ada catatan yang cocok pada tabel sisi kanan, baris sisi kiri disaring dari hasil yang ditetapkan
  • untuk catatan yang cocok pada tabel sisi kanan, baris sisi kiri diulang seolah-olah ada Produk Cartesian antara catatan itu dan semua catatan anak yang terkait di tabel sisi kanan.

Misalnya, dengan asumsi kami memiliki hubungan tabel satu-ke-banyak antara tabel induk postdan post_commenttabel anak yang terlihat sebagai berikut:

Hubungan tabel satu-ke-banyak

Sekarang, jika posttabel memiliki catatan berikut:

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

dan post_commentstabel memiliki baris ini:

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

INNER BERGABUNG permintaan seperti yang berikut ini:

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

akan memasukkan semua postcatatan beserta semua yang terkait post_comments:

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

Pada dasarnya, Anda dapat menganggap INNER JOIN sebagai CROSS JOIN yang difilter di mana hanya catatan yang cocok disimpan di set hasil akhir.

Untuk detail lebih lanjut tentang cara kerja INNER JOIN, lihat artikel ini juga.


"INNER JOIN tidak mengembalikan Produk Cartesian dari dua set data yang bergabung" agak sedikit ketika x INNER BERGABUNG dengan 1 = 1 mengembalikannya. Begitu juga "Alih-alih" ketika apa yang Anda coba katakan sebenarnya (tentu saja) mengembalikannya untuk kondisi 1 = 1. Kecuali bahwa bahasa dalam peluru tidak menggambarkan dengan jelas hasil dari gabungan batin. Apa yang menggambarkannya adalah bahwa itu adalah persilangan silang yang tidak memenuhi persyaratan. Demikian pula, bahasa gabungan silang Anda menggunakan "kombinasi" tidak jelas.
philipxy

7

SQL Server juga menerima notasi sederhana:

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

Dengan menggunakan notasi yang lebih sederhana ini, kita tidak perlu repot tentang perbedaan antara inner dan cross joins. Alih-alih dua klausa "ON", ada satu klausa "WHERE" yang berfungsi. Jika Anda mengalami kesulitan dalam menentukan klausa "BERGABUNG" mana "" pergi, tinggalkan notasi "GABUNG" dan gunakan yang lebih sederhana di atas.

Itu tidak curang.


2

Saat menulis kueri menggunakan gabungan dalam, catatan akan mengambil dari kedua tabel jika kondisi terpenuhi di kedua tabel, yaitu pencocokan sama persis dari kolom umum di kedua tabel.

Saat menulis kueri menggunakan cross join hasilnya adalah seperti produk cartesian dari tidak ada catatan di kedua tabel. contoh jika table1 berisi 2 record dan table2 berisi 3 record maka hasil dari query adalah 2 * 3 = 6 record.

Jadi jangan pergi untuk bergabung silang sampai Anda membutuhkannya.


2
Hanya jika klausa WHERE tidak ada!
epitka

2

Gabung silang dan gabung dalam adalah sama dengan satu-satunya perbedaan bahwa dalam gabung dalam kita dengan sederhana menyaring beberapa hasil dari produk kartesius

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

Ini adalah desain data kami di mana kami memutuskan bahwa hanya ada satu kasus bidang yang kami gunakan untuk bergabung. Gabung hanya silang gabung kedua tabel dan dapatkan hanya garis-garis yang menghasilkan ekspresi boolean khusus.

Perhatikan bahwa jika bidang yang kita lakukan Bergabung dengan kita akan menjadi nol di kedua tabel kita akan melewati filter. Terserah kepada kami atau pabrikan basis data untuk menambahkan aturan tambahan untuk menghindari atau mengizinkan nol. Mengikuti dasar-dasar itu hanya gabungan silang diikuti oleh filter.


0

Gabungan dalam akan memberikan hasil rekaman yang cocok antara dua tabel di mana sebagai gabungan silang memberi Anda kemungkinan kombinasi antara dua tabel.


0

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

cross join bertindak sebagai produk Cartesian A ✖ B = {1,2}, {1,8} ..., {5,2}, {5,8}, {5,5} ..... {3,3} ..., {6,6} .... {8,9} dan mengembalikan set hasil panjang ini ..

ketika memprosesnya inner joindilakukan melalui produk Cartesian dan memilih pasangan yang cocok .. jika berpikir pasangan ini dipesan sebagai kunci utama dua tabel dan pada pencarian klausa untuk A = B makainner join pilih {5,5}, {4,4}, {6,6} , {9,9} dan mengembalikan kolom yang diminta pada klausa pilih yang terkait dengan id ini.

jika cross joinpada a = b maka hasilnya sama dengan hasil yang ditetapkan inner join. dalam hal ini juga digunakan inner join.


-1

Itu tergantung pada output yang Anda harapkan.

Gabung silang cocok dengan semua baris dalam satu tabel dengan semua baris di tabel lain. Gabungan dalam cocok dengan bidang atau bidang. Jika Anda memiliki satu meja dengan 10 baris dan yang lain dengan 10 baris maka kedua gabungan akan berperilaku berbeda.

Gabung silang akan memiliki 100 baris yang dikembalikan dan mereka tidak akan terkait, hanya apa yang disebut produk Cartesian. Gabungan dalam akan mencocokkan catatan satu sama lain. Dengan asumsi satu memiliki kunci utama dan itu adalah kunci asing yang lain Anda akan mendapatkan 10 baris dikembalikan.

Gabung silang memiliki utilitas umum yang terbatas, tetapi ada untuk kelengkapan dan menjelaskan hasil bergabung dengan tabel tanpa ada hubungan yang ditambahkan ke kueri. Anda dapat menggunakan gabungan silang untuk membuat daftar kombinasi kata atau yang serupa. Gabungan batin di sisi lain adalah gabungan paling umum.


Tidak membingungkan semua orang. Saya mencoba mempersingkat jawabannya. Ini adalah jawaban singkat terbaik.
Shrikant Jadhav
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.