Apa perbedaan antara "INNER JOIN &" dan "OUTER JOIN &"?

Juga bagaimana LEFT JOIN, RIGHT JOIN dan FULL JOIN cocok?

Mengomentari pertanyaan (8)
Larutan

Dengan asumsi Anda bergabung pada kolom tanpa duplikat, yang merupakan kasus yang sangat umum:

  • Sebuah inner join dari A dan B memberikan hasil dari A berpotongan dengan B, yaitu bagian dalam dari perpotongan diagram Venn.

  • Sebuah outer join dari A dan B memberikan hasil dari A union B, yaitu bagian luar dari union diagram Venn.

Contoh

Misalkan Anda memiliki dua tabel, dengan masing-masing satu kolom, dan data sebagai berikut:

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

Perhatikan bahwa (1,2) adalah unik untuk A, (3,4) adalah umum, dan (5,6) adalah unik untuk B.

Gabungan dalam

Inner join menggunakan salah satu dari kueri yang setara memberikan perpotongan dari dua tabel, yaitu dua baris yang mereka miliki bersama.

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

Gabungan luar kiri

Gabungan luar kiri akan memberikan semua baris di A, ditambah baris yang sama di B.

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

Gabungan luar kanan

Gabungan luar kanan akan memberikan semua baris di B, ditambah baris yang sama di A.

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

Gabungan luar penuh

Gabungan luar penuh akan memberi Anda gabungan A dan B, yaitu semua baris di A dan semua baris di B. Jika sesuatu di A tidak memiliki datum yang sesuai di B, maka bagian B adalah null, dan sebaliknya.

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
Komentar (17)

Dalam diagram Venn don't benar-benar melakukannya untuk saya. Mereka don't menunjukkan ada perbedaan antara cross join dan inner join, misalnya, atau lebih umumnya menunjukkan adanya perbedaan antara yang berbeda jenis bergabung dengan predikat atau menyediakan kerangka kerja untuk penalaran tentang bagaimana mereka akan beroperasi. Tidak ada pengganti untuk memahami pengolahan logis dan hal ini relatif mudah untuk memahami pula.

  1. Bayangkan sebuah salib bergabung.
  2. Mengevaluasi on klausul terhadap semua baris dari langkah 1 menjaga mereka di mana predikat mengevaluasi untuk benar
  3. (Untuk bergabung dengan luar saja) tambahkan kembali di luar baris yang hilang di langkah 2. (NB: Dalam praktek query optimizer dapat menemukan cara yang lebih efisien dari eksekusi query dari murni logis keterangan di atas, namun hasil akhir harus sama) I'akan memulai dengan versi animasi dari a full outer join. Penjelasan lebih lanjut berikut.

    Penjelasan

    Sumber Tabel Pertama mulai dengan CROSS JOIN (ALIAS Cartesian Product). Ini tidak memiliki PADA klausul dan hanya kembali setiap kombinasi dari baris dari dua tabel. A. PILIH Warna, B. Warna DARI SALIB BERGABUNG B Dalam dan Luar bergabung memiliki "ON" klausul predikat.

  • Inner Join. Mengevaluasi kondisi di "ON" klausul untuk semua baris di kayu salib bergabung dengan hasilnya. Jika benar kembali bergabung dengan barisan. Jika tidak membuangnya.
  • Left Outer Join. Sama seperti inner join, maka untuk setiap baris dalam tabel kiri yang tidak cocok dengan apa-apa output ini dengan nilai-nilai NULL untuk tabel kanan kolom.
  • Right Outer Join. Sama seperti inner join, maka untuk setiap baris dalam tabel kanan yang tidak cocok dengan apa-apa output ini dengan nilai-nilai NULL untuk meninggalkan kolom tabel.
  • Full Outer Join. Sama seperti inner join kemudian melestarikan kiri non dicocokkan baris seperti di left outer join dan right non-baris yang cocok sesuai right outer join.

    Beberapa contoh

    A. PILIH Warna, B. Warna DARI INNER JOIN B ON A. Warna = B. Warna Di atas adalah klasik equi join.

    Versi Animasi##

    A. PILIH Warna, B. Warna DARI INNER JOIN B ON A. Warna TIDAK DI ('Hijau','Biru')

    Dalam kondisi join tidak perlu kesetaraan dan kondisi itu tidak perlu referensi dari kolom kedua (atau bahkan keduanya) dari tabel. Mengevaluasi A. Warna TIDAK DI ('Hijau','Biru') pada setiap baris dari salib bergabung kembali. A. PILIH Warna, B. Warna DARI INNER JOIN B ON 1 =1 Kondisi join mengevaluasi ke true untuk semua baris di kayu salib bergabung hasilnya jadi ini adalah sama seperti salib bergabung. Saya tidak't mengulang gambar dari 16 baris lagi.

    A. PILIH Warna, B. Warna DARI LEFT OUTER JOIN B ON A. Warna = B. Warna

    Luar Bergabung logis dievaluasi dengan cara yang sama seperti dalam bergabung kecuali bahwa jika sebuah baris dari tabel kiri (kiri bergabung) tidak bergabung dengan setiap baris dari tangan kanan tabel pada semua hal yang diawetkan dalam hasil dengan NULL nilai-nilai untuk tangan kanan kolom.

    A. PILIH Warna, B. Warna DARI LEFT OUTER JOIN B ON A. Warna = B. Warna di MANA B. Warna ADALAH NULL

    Ini hanya membatasi hasil sebelumnya hanya menampilkan baris-baris mana B. Warna NULL. Dalam kasus ini, ini akan menjadi baris yang diawetkan karena mereka tidak memiliki pertandingan di tangan kanan tabel dan query mengembalikan tunggal merah-turut tidak cocok dalam tabel B. Hal ini dikenal sebagai anti semi bergabung. Hal ini penting untuk memilih kolom untuk NULL tes yang baik tidak nullable atau untuk yang kondisi join memastikan bahwa setiap NULL nilai-nilai yang akan dikeluarkan dalam rangka untuk pola ini untuk bekerja dengan benar dan menghindari hanya membawa kembali baris yang terjadi untuk memiliki NULL nilai untuk kolom tersebut selain untuk pbb dicocokkan baris.

    A. PILIH Warna, B. Warna DARI RIGHT OUTER JOIN B ON A. Warna = B. Warna

    Right outer join bertindak demikian pula left outer join kecuali mereka melestarikan non-baris yang cocok dari tabel kanan dan null memperpanjang tangan kiri kolom.

    A. PILIH Warna, B. Warna DARI FULL OUTER JOIN B ON A. Warna = B. Warna

    Full outer join menggabungkan perilaku kiri dan kanan bergabung dan melestarikan non-baris yang cocok dari kedua sisi kiri dan kanan tabel.

    A. PILIH Warna, B. Warna DARI FULL OUTER JOIN B ON 1 = 0

    Tidak ada baris di kayu salib bergabung match 1=0 predikat. Semua baris dari kedua belah pihak yang diawetkan menggunakan normal outer join aturan dengan NULL dalam kolom dari tabel di sisi lain.

    PILIH MENYATU(A. Warna, B. Warna) SEBAGAI Warna DARI FULL OUTER JOIN B ON 1 = 0

    Dengan minor mengubah untuk permintaan sebelumnya yang bisa mensimulasikan UNION ALL dari dua tabel.

    A. PILIH Warna, B. Warna DARI LEFT OUTER JOIN B ON A. Warna = B. Warna di MANA B. Warna = 'Hijau'

    Perhatikan bahwa WHERE (jika ada) secara logis berjalan setelah bergabung. Salah satu kesalahan umum adalah untuk melakukan left outer join dan kemudian mencakup klausul MANA dengan kondisi pada tabel kanan yang berakhir tidak termasuk non-baris yang cocok. Di atas berakhir melakukan outer join... ... Dan kemudian "Tempat" klausul berjalan. NULL= 'Hijau' tidak mengevaluasi dengan benar sehingga turut dilestarikan oleh outer join berakhir dibuang (bersama dengan satu biru) secara efektif mengubah bergabung kembali ke dalam satu. Jika tujuannya adalah untuk hanya menyertakan baris dari B di mana Warna Hijau dan semua baris dari terlepas sintaks yang benar akan

    A. PILIH Warna, B. Warna DARI LEFT OUTER JOIN B ON A. Warna = B. Warna DAN B. Warna = 'Hijau'

    SQL Biola

    Melihat contoh-contoh ini run live di SQLFiddle.com.

Komentar (16)

Bergabung digunakan untuk menggabungkan data dari dua tabel, dengan hasil yang baru, sementara meja. Bergabung dilakukan berdasarkan pada sesuatu yang disebut predikat, yang menentukan kondisi untuk digunakan dalam rangka untuk melakukan join. Perbedaan antara inner join dan outer join adalah bahwa inner join akan kembali hanya baris yang benar-benar sesuai berdasarkan bergabung predikat. Untuk eg - Memungkinkan mempertimbangkan Karyawan dan Lokasi meja:

Inner Join:- Inner join menciptakan baru hasil tabel dengan menggabungkan nilai-nilai kolom dari dua tabel (Karyawan dan Lokasi) berdasarkan bergabung-predikat. Query membandingkan setiap baris Karyawan dengan setiap baris Lokasi untuk menemukan semua pasangan baris yang memenuhi bergabung-predikat. Ketika bergabung-predikat puas dengan mencocokkan nilai non-NULL, kolom nilai untuk setiap pasangan yang cocok dari baris Karyawan dan Lokasi digabungkan menjadi hasil-turut. Berikut SQL untuk bergabung batin akan terlihat seperti:

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

Sekarang, di sini adalah apa hasil dari menjalankan SQL yang akan terlihat seperti:

Outer Join:- Luar bergabung tidak memerlukan setiap record dalam dua bergabung tabel untuk memiliki catatan yang cocok. Bergabung meja mempertahankan catatan masing-masing—bahkan jika tidak ada yang cocok record yang ada. Luar bergabung membagi lebih lanjut menjadi left outer join dan right outer join, tergantung pada tabel's baris dipertahankan (kiri atau kanan).

Left Outer Join:- Hasil dari left outer join (atau hanya meninggalkan bergabung) untuk tabel Karyawan dan Lokasi selalu berisi semua catatan "kiri" tabel (Karyawan), bahkan jika bergabung-kondisi tidak menemukan catatan yang cocok di "benar" tabel (Lokasi). Berikut adalah apa SQL untuk left outer join akan terlihat seperti, dengan menggunakan tabel di atas:

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

Sekarang, di sini adalah apa hasil dari menjalankan SQL ini akan terlihat seperti:

Right Outer Join:- A right outer join (atau kanan bergabung dengan) erat menyerupai left outer join, kecuali dengan pengobatan meja terbalik. Setiap baris dari "benar" tabel (Lokasi) akan muncul di bergabung tabel setidaknya sekali. Jika tidak ada baris pencocokan dari "kiri" tabel (Karyawan) ada, NULL akan muncul di kolom dari Karyawan untuk catatan-catatan yang tidak memiliki pertandingan di Lokasi. Ini adalah apa yang SQL terlihat seperti:

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

Dengan menggunakan tabel di atas, kita dapat menunjukkan apa hasilnya himpunan a right outer join akan terlihat seperti:

Full Outer Join:- Full Outer Join atau Penuh Bergabung adalah untuk mempertahankan nonmatching informasi termasuk nonmatching baris dalam hasil yang bergabung, menggunakan full outer join. Ini mencakup semua baris dari tabel kedua, terlepas dari apakah atau tidak tabel lain memiliki nilai pencocokan.

Sumber Gambar

MySQL 8.0 Referensi Manual - Bergabung Dengan Sintaks

Oracle Bergabung dengan operasi

Komentar (2)

Inner Join

Mengambil dicocokkan baris saja, yaitu, Yang berpotongan B.

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

Left Outer Join

Memilih semua record dari tabel pertama, dan setiap catatan di kedua meja yang sesuai dengan bergabung kunci.

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

Full Outer Join

Memilih semua record dari kedua tabel, dan catatan dalam pertama meja yang sesuai dengan bergabung kunci.

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

Referensi

Komentar (7)

Dalam kata-kata sederhana:

An inner join mengambil dicocokkan baris saja.

Sedangkan outer join mengambil sesuai baris dari satu tabel dan semua baris di tabel lain ....hasilnya tergantung pada mana yang anda gunakan:

  • Kiri: Sesuai baris di tabel kanan dan semua baris di tabel kiri

  • Tepat: Sesuai baris di tabel kiri dan semua baris di tabel kanan atau

  • Full: Semua baris di tabel. Itu doesn't peduli jika ada pertandingan atau tidak

Komentar (1)

Gabungan dalam hanya menampilkan baris jika ada catatan yang cocok di sisi lain (kanan) dari gabungan.

Gabungan luar (kiri) menunjukkan baris untuk setiap rekaman di sisi kiri, bahkan jika tidak ada baris yang cocok di sisi lain (kanan) dari gabungan. Jika tidak ada baris yang cocok, kolom-kolom untuk sisi lain (kanan) akan menampilkan NULL.

Komentar (0)

Inner join mengharuskan record dengan ID terkait ada dalam tabel yang digabungkan.

Outer join akan mengembalikan record untuk sisi kiri bahkan jika tidak ada record yang ada untuk sisi kanan.

Misalnya, Anda memiliki tabel Orders dan tabel OrderDetails. Mereka dihubungkan oleh "OrderID".

Pesanan

  • OrderID
  • Nama Pelanggan

RincianPesanan

  • OrderDetailID
  • OrderID
  • NamaProduk
  • Qty
  • Harga

Permintaan

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

hanya akan mengembalikan Pesanan yang juga memiliki sesuatu di tabel OrderDetails.

Jika Anda mengubahnya menjadi OUTER LEFT JOIN

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

maka itu akan mengembalikan catatan dari tabel Pesanan bahkan jika mereka tidak memiliki catatan OrderDetails.

Anda dapat menggunakan ini untuk menemukan Pesanan yang tidak memiliki OrderDetails yang mengindikasikan kemungkinan pesanan yatim piatu dengan menambahkan klausa where seperti WHERE OrderDetails.OrderID IS NULL.

Komentar (1)

Dalam kata-kata sederhana :

Inner join -> Mengambil HANYA umum catatan dari orang tua dan anak tabel DIMANA primary key dari tabel Induk pertandingan Foreign key di tabel Anak.

Kiri bergabung ->

pseudo code

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

Tepat bergabung : kebalikan dari left join . Masukan nama tabel di KIRI BERGABUNG di sisi kanan di Kanan bergabung , anda mendapatkan output yang sama seperti KIRI BERGABUNG.

Outer join : Menampilkan semua record di tabel Kedua Tidak peduli. Jika catatan di Kiri meja yang tidak sesuai ke kanan tabel berdasarkan Primary , Forieign kunci , menggunakan nilai NULL sebagai hasil dari bergabung .

Contoh :

Mari kita asumsikan sekarang untuk 2 tabel

1.karyawan , 2.phone_numbers_employees

employees : id , name 

phone_numbers_employees : id , phone_num , emp_id   

Di sini , karyawan tabel Master tabel , phone_numbers_employees adalah tabel anak(mengandung emp_id sebagai foreign key yang menghubungkan karyawan.id jadi anak meja.)

Batin bergabung

Mengambil record dari 2 tabel HANYA JIKA Primary key dari tabel karyawan(id) pertandingan Foreign key dari tabel Anak phone_numbers_employees(emp_id).

Sehingga permintaan akan :

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;

Di sini hanya mengambil baris yang cocok pada primary key = kunci asing seperti yang dijelaskan di atas.Di sini non pencocokan baris pada primary key = kunci asing yang dilewati sebagai hasil dari bergabung.

Kiri bergabung :

Kiri bergabung dengan mempertahankan semua baris dari tabel kiri, terlepas dari apakah ada baris yang sesuai pada tabel kanan.

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;

Outer join :

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;

Diagramatically itu terlihat seperti :

Komentar (1)

Ini adalah sebuah diagram penjelasan untuk semua jenis bergabung

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

Komentar (0)

Anda menggunakan INNER JOIN untuk mengembalikan semua baris dari tabel kedua di mana ada pertandingan. yaitu Di tabel yang dihasilkan semua baris dan kolom memiliki nilai-nilai.

Di OUTER JOIN tabel yang dihasilkan mungkin memiliki kolom kosong. Outer join dapat berupa KIRI atau KANAN.

LEFT OUTER JOIN mengembalikan semua baris dari tabel pertama, bahkan jika tidak ada pertandingan pada tabel kedua.

RIGHT OUTER JOIN mengembalikan semua baris dari tabel kedua, bahkan jika tidak ada pertandingan pada tabel pertama.

Komentar (0)

INNER JOIN membutuhkan setidaknya ada pertandingan dalam membandingkan dua tabel. Misalnya, tabel A dan tabel B yang berarti ٨ B (A persimpangan B).

LEFT OUTER JOIN dan LEFT JOIN yang sama. Ini memberikan semua catatan yang cocok di kedua tabel dan semua kemungkinan dari meja sebelah kiri.

Demikian pula, RIGHT OUTER JOIN dan KANAN BERGABUNG yang sama. Ini memberikan semua catatan yang cocok di kedua tabel dan semua kemungkinan dari tabel kanan.

PENUH BERGABUNG adalah kombinasi dari LEFT OUTER JOIN dan RIGHT OUTER JOIN tanpa duplikasi.

Komentar (0)

Jawabannya adalah dalam arti masing-masing, sehingga dalam hasil.

Catatan : Di SQLite tidak ada RIGHT OUTER JOIN atau FULL OUTER JOIN. Dan juga di MySQL tidak ada FULL OUTER JOIN.

Jawaban saya adalah berdasarkan atas Catatan.

Bila anda memiliki dua tabel seperti ini:

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

CROSS JOIN / OUTER JOIN : Anda dapat memiliki semua tabel data dengan CROSS JOIN atau hanya dengan , seperti ini:

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 : Ketika anda ingin menambahkan filter ke atas hasil berdasarkan pada hubungan seperti table1.id = table2.id anda dapat menggunakan 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

KIRI [OUTER] JOIN : Bila anda ingin memiliki semua baris dari satu tabel di atas hasil -sama dengan hubungan - anda dapat menggunakan LEFT JOIN: (Untuk TEPAT BERGABUNG hanya mengubah tempat dari tabel)

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

FULL OUTER JOIN : Bila anda juga ingin memiliki semua baris dari tabel lainnya dalam hasil anda, anda dapat menggunakan 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

Yah, seperti yang anda butuhkan anda memilih masing-masing yang meliputi kebutuhan anda ;).

Komentar (1)

Inner join.

Join adalah menggabungkan baris dari dua tabel. An inner join upaya untuk mencocokkan dua tabel berdasarkan kriteria yang anda tentukan dalam query, dan hanya akan menampilkan baris yang sesuai. Jika sebuah baris dari tabel pertama dalam bergabung dengan pertandingan dua baris dalam tabel kedua, kemudian dua baris akan dikembalikan dalam hasil. Jika ada baris pada tabel pertama yang tidak sesuai dengan baris kedua, itu tidak dikembalikan; demikian juga, jika ada baris pada tabel kedua yang tidak sesuai dengan baris pertama, itu tidak dikembalikan.

Outer Join.

A kiri bergabung mencoba untuk menemukan pertandingan hingga baris dari tabel pertama untuk baris dalam tabel kedua. Jika tidak dapat menemukan yang cocok, itu akan kembali kolom dari tabel pertama dan meninggalkan kolom dari tabel kedua kosong (null).

Komentar (0)

Saya don't melihat banyak rincian tentang kinerja dan optimizer dalam jawaban yang lain.

Kadang-kadang itu baik untuk tahu bahwa hanya INNER JOIN adalah asosiatif yang berarti optimizer paling banyak memiliki pilihan untuk bermain dengan itu. Hal ini dapat menyusun ulang bergabung rangka untuk membuatnya lebih cepat menjaga hasil yang sama. Optimizer dapat menggunakan sebagian besar bergabung mode.

Umumnya itu adalah praktik yang baik untuk mencoba untuk menggunakan INNER JOIN bukan berbeda jenis bergabung. (Tentu saja jika hal ini dimungkinkan mengingat hasil yang diharapkan set.)

Ada beberapa contoh yang baik dan penjelasan tentang hal ini di sini yang aneh asosiatif perilaku:

Komentar (5)

  • INNER JOIN paling khas bergabung untuk dua atau lebih tabel. Kembali mencocokkan data pada kedua tabel DI primarykey dan forignkey hubungan.
  • OUTER JOIN adalah sama dengan INNER JOIN, tetapi juga mencakup NULL data pada ResultSet.
  • LEFT JOIN = INNER JOIN + tak Tertandingi data kiri tabel dengan Null pertandingan di kanan meja.
  • BENAR BERGABUNG dengan = INNER JOIN + tak Tertandingi data kan tabel dengan Null pertandingan di sebelah kiri meja.
  • PENUH BERGABUNG = INNER JOIN + tak Tertandingi data pada kedua kanan dan kiri tabel dengan Null pertandingan.
  • Self join adalah bukan kata kunci dalam SQL, ketika sebuah tabel referensi data itu sendiri yang tahu diri bergabung. Menggunakan INNER JOIN dan OUTER JOIN kita dapat menulis diri query join.

Misalnya:

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 
Komentar (0)

Dengan algoritma yang tepat untuk INNER JOIN, LEFT/RIGHT OUTER JOIN adalah sebagai berikut:

  1. Mengambil setiap baris dari tabel pertama: a
  2. Mempertimbangkan semua baris dari kedua tabel di samping itu: (a, b[i])
  3. Mengevaluasi ON ... klausul terhadap masing-masing pasangan: PADA( a, b[i] ) = true/false?
  • Ketika kondisi mengevaluasi benar, kembali yang dikombinasikan baris (a, b[i]).
  • Ketika mencapai akhir tabel kedua tanpa setiap pertandingan, dan ini adalah sebuah Outer Join kemudian kembali (virtual) sepasang menggunakan Null untuk semua kolom dari tabel lain: (a, Null) untuk LEFT outer join atau (Null, b) untuk RIGHT outer join. Hal ini untuk memastikan semua baris dari tabel pertama yang ada di hasil akhir.

Catatan: kondisi yang ditentukan dalam ON klausul bisa apa-apa, itu tidak diperlukan untuk menggunakan Primary key (dan anda don't harus selalu merujuk ke Kolom dari tabel kedua)! Misalnya:


Catatan: Kiri Bergabung = Left Outer Join, Right Join = Right Outer Join.

Komentar (0)

Setelah dikritik banyak digemari merah-berbayang diagram Venn, saya pikir itu hanya adil untuk posting saya sendiri mencoba.

Meskipun @Martin Smith's jawaban yang terbaik dari bunch dengan cara lama, hanya menunjukkan kolom kunci dari meja masing-masing, sedangkan saya pikir idealnya non-key kolom juga harus ditunjukkan.

Yang terbaik yang bisa saya lakukan di setengah jam peliharaan diizinkan, aku masih don't pikir itu cukup menunjukkan bahwa nulls yang ada karena tidak adanya nilai-nilai kunci dalam TableB atau yang OUTER JOIN sebenarnya adalah sebuah serikat daripada bergabung:

Komentar (2)

Sederhana Definisi

Inner Join: Kembali cocok catatan dari kedua tabel.

Full Outer Join: Mengembalikan cocok dan tak tertandingi catatan dari kedua tabel dengan null tak tertandingi catatan dari Kedua Tabel.

Left Outer Join: Mengembalikan cocok dan tak tertandingi catatan hanya dari tabel di Kiri.

Right Outer Join: Mengembalikan cocok dan tak tertandingi catatan hanya dari tabel di Kanan.

Di-Pendek

Cocok + Kiri Yang Tak Tertandingi + Kanan Yang Tak Tertandingi = Full Outer Join

Cocok + Kiri Yang Tak Tertandingi = Left Outer Join

Cocok + Kanan Yang Tak Tertandingi = Right Outer Join

Cocok Dengan = Inner Join

Komentar (2)

Dalam Istilah Sederhana,

1.INNER JOIN ATAU EQUI JOIN : Mengembalikan resultset yang hanya sesuai dengan kondisi di kedua tabel.

2.OUTER JOIN : Mengembalikan resultset dari semua nilai-nilai dari kedua tabel, bahkan jika ada kondisi yang cocok atau tidak.

3.KIRI BERGABUNG : Mengembalikan resultset dari semua nilai-nilai dari kiri meja dan hanya baris yang sesuai dengan kondisi di meja tepat.

4.TEPAT BERGABUNG : Mengembalikan resultset dari semua nilai-nilai dari kanan meja dan hanya baris yang sesuai dengan kondisi di kiri meja.

5.PENUH BERGABUNG : Penuh Bergabung dan Full outer Join yang sama.

Komentar (0)

1.Inner Join: disebut Juga Bergabung. Ia mengembalikan baris yang hadir di kedua tabel Kiri, dan kanan meja hanya jika ada pertandingan. Jika tidak, itu kembali nol catatan.

Contoh:

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

2.Full Outer Join: Juga disebut sebagai Penuh Bergabung. Kembali semua baris hadir di kedua tabel Kiri, dan kanan tabel.

Contoh:

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

3.Left Outer join: Atau cukup disebut sebagai Kiri Bergabung. Ia mengembalikan semua baris yang hadir di meja sebelah Kiri dan baris yang cocok dari tabel kanan (jika ada).

4.Right Outer Join: Juga disebut sebagai Hak Bergabung. Kembali baris yang cocok dari tabel kiri (jika ada), dan semua baris yang ada di sebelah Kanan meja.

Keuntungan Bergabung

  1. Mengeksekusi lebih cepat.
Komentar (1)