Juga bagaimana LEFT JOIN
, RIGHT JOIN
dan FULL JOIN
cocok?
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
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.
on
klausul terhadap semua baris dari langkah 1 menjaga mereka di mana predikat mengevaluasi untuk benar
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.
A. PILIH Warna, B. Warna DARI INNER JOIN B ON A. Warna = B. Warna Di atas adalah klasik equi join.
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.
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.
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.
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.
Full outer join menggabungkan perilaku kiri dan kanan bergabung dan melestarikan non-baris yang cocok dari kedua sisi kiri dan kanan tabel.
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.
Dengan minor mengubah untuk permintaan sebelumnya yang bisa mensimulasikan UNION ALL
dari dua tabel.
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
Melihat contoh-contoh ini run live di SQLFiddle.com.
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.
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
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
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
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
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.
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
RincianPesanan
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
.
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 :
Ini adalah sebuah diagram penjelasan untuk semua jenis bergabung
sumber: http://ssiddique.info/understanding-sql-joins-in-easy-way.html
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.
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.
Jawabannya adalah dalam arti masing-masing, sehingga dalam hasil.
Catatan : Di
SQLite
tidak adaRIGHT OUTER JOIN
atauFULL OUTER JOIN
. Dan juga diMySQL
tidak adaFULL 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 ;).
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).
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:
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.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
Dengan algoritma yang tepat untuk INNER JOIN
, LEFT/RIGHT OUTER JOIN
adalah sebagai berikut:
a
(a, b[i])
ON ...
klausul terhadap masing-masing pasangan: PADA( a, b[i] ) = true/false?
benar
, kembali yang dikombinasikan baris (a, b[i])
.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:
... PADA T1.title = T2.judul DAN T1.versi < T2.versi
( => lihat posting ini sebagai contoh penggunaan: Pilih hanya baris-baris dengan nilai max pada kolom)... PADA T1.y ADALAH NOL
... PADA 1 = 0
(hanya sebagai contoh)Catatan: Kiri Bergabung = Left Outer Join, Right Join = Right Outer Join.
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:
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
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.
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