Saya tahu tentang bergabung dalam SQL Server.
Sebagai contoh. Ada dua tabel Table1, Table2.
Struktur tabel mereka adalah sebagai berikut.
create table Table1 (id int, Name varchar (10))
create table Table2 (id int, Name varchar (10))
Tabel 1 data sebagai berikut:
Id Name
-------------
1 A
2 B
Tabel2 data sebagai berikut:
Id Name
-------------
1 A
2 B
3 C
Jika saya menjalankan kedua pernyataan SQL yang disebutkan di bawah, kedua output akan sama
select *
from Table1
left join Table2 on Table1.id = Table2.id
select *
from Table2
right join Table1 on Table1.id = Table2.id
Tolong jelaskan perbedaan antara bergabung kiri dan kanan dalam pernyataan SQL di atas.
sql
sql-server
join
left-join
right-join
Pankaj Agarwal
sumber
sumber
RIGHT JOIN
jika kita dapat mencapai hasil yang diinginkan hanya dengan adilLEFT JOIN
? : PSelect * from Table1 left join Table 2
akan mengembalikan SEMUA rekaman tabel 1 ditambah catatan kebetulan Tabel 2. Yang sebaliknyaSelect * from Table1 right join Table 2
akan mengembalikan SEMUA catatan dari Tabel 2 dan catatan yang bersamaan dari Tabel 1. Berharap itu membantu.Codeproject memiliki gambar ini yang menjelaskan dasar-dasar sederhana gabungan SQL, diambil dari: http://www.codeproject.com/KB/database/Visual_SQL_Joins.aspx
sumber
JOIN Table_B b ON A.Key = B.Key
. Kondisi ATAU berfungsi dengan baik.Tabel tempat Anda mengambil data adalah 'KIRI'.
Tabel yang Anda ikuti adalah 'KANAN'.
LEFT JOIN: Ambil semua item dari tabel kiri DAN (hanya) item yang cocok dari tabel kanan.
BERGABUNG DENGAN BENAR: Ambil semua item dari tabel kanan DAN (hanya) item yang cocok dari tabel kiri.
Begitu:
memberi:
tapi:
memberi:
Anda benar bergabung dengan tabel dengan lebih sedikit baris di atas meja dengan lebih banyak baris
DAN
sekali lagi, kiri bergabung dengan tabel dengan lebih sedikit baris di atas meja dengan lebih banyak baris
Coba:
sumber
(INNER) BERGABUNG: Mengembalikan catatan yang memiliki nilai yang cocok di kedua tabel.
LEFT (OUTER) BERGABUNG: Kembalikan semua catatan dari tabel kiri, dan catatan yang cocok dari tabel kanan.
KANAN (OUTER) BERGABUNG: Kembalikan semua catatan dari tabel kanan, dan catatan yang cocok dari tabel kiri.
FULL (OUTER) GABUNG: Kembalikan semua catatan saat ada kecocokan di tabel kiri atau kanan
Misalnya, mari kita anggap kita memiliki dua tabel dengan catatan berikut:
Bergabunglah dengan Batin
Sintaksis
Terapkan dalam tabel sampel Anda:
Hasilnya adalah:
Kiri Gabung
Terapkan dalam tabel sampel Anda
Hasilnya adalah:
Bergabunglah dengan Benar
Sintaksis:
Terapkan di tabel samole Anda:
Hasil akan ditemukan:
Bergabung Penuh
Sintaksis:
Terapkan di samp [le table Anda:
Hasilnya adalah:
Untuk INNER bergabung pesanan tidak masalah
Untuk OUTER (KIRI, KANAN atau LENGKAP) bergabung, urutannya penting
Temukan Lebih Banyak di w3schools
sumber
Tabel di
from
dalam contoh initableA
, berada di sisi kiri relasi.Jadi, jika Anda ingin mengambil semua baris dari tabel kiri (
tableA
), bahkan jika tidak ada kecocokan di tabel kanan (tableB
), Anda akan menggunakan "join kiri".Dan jika Anda ingin mengambil semua baris dari tabel kanan (
tableB
), bahkan jika tidak ada kecocokan di tabel kiri (tableA
), Anda akan menggunakanright join
.Dengan demikian, permintaan berikut ini setara dengan yang digunakan di atas.
sumber
Anda sepertinya bertanya, "Jika saya bisa menulis ulang
RIGHT OUTER JOIN
menggunakanLEFT OUTER JOIN
sintaks maka mengapa memilikiRIGHT OUTER JOIN
sintaks sama sekali?" Saya pikir jawaban untuk pertanyaan ini adalah, karena perancang bahasa tidak ingin membatasi pengguna (dan saya pikir mereka akan dikritik jika melakukannya), yang akan memaksa pengguna untuk mengubah urutan tabel dalamFROM
klausa dalam beberapa keadaan ketika hanya mengubah tipe join.sumber
Dua pernyataan Anda setara.
Kebanyakan orang hanya menggunakan
LEFT JOIN
karena tampaknya lebih intuitif, dan itu sintaksis universal - Saya tidak berpikir semua dukungan RDBMSRIGHT JOIN
.sumber
LEFT
tetapi tidak,RIGHT
silakan sebutkan yang mana.RIGHT
danFULL OUTER JOIN
: sqlite.org/omitted.htmlSaya merasa kami mungkin memerlukan
AND
kondisi dalamwhere
klausa angka terakhirOuter Excluding JOIN
sehingga kami mendapatkan hasil yang diinginkanA Union B Minus A Interaction B
. Saya merasa permintaan perlu diperbaruiJika kita menggunakan
OR
, maka kita akan mendapatkan semua hasilA Union B
sumber
pilih * dari Table1 kiri bergabung dengan Table2 di Table1.id = Table2.id
Dalam kueri pertama Gabung kiri membandingkan tabel sisi kiri table1 dengan tabel sisi kanan2 .
Di mana semua properti dari table1 akan ditampilkan, sedangkan di table2 hanya properti yang akan ditampilkan di mana kondisi menjadi kenyataan.
pilih * dari Table2 gabung kanan Table1 di Table1.id = Table2.id
Dalam kueri pertama Gabung kanan membandingkan tabel sisi kanan table1 ke tabel sisi kiri2 .
Di mana semua properti dari table1 akan ditampilkan, sedangkan di table2 hanya properti yang akan ditampilkan di mana kondisi menjadi kenyataan.
Kedua kueri akan memberikan hasil yang sama karena urutan deklarasi tabel dalam kueri berbeda seperti Anda mendeklarasikan table1 dan table2 di kiri dan kanan masing-masing di kueri gabung kiri pertama , dan juga menyatakan table1 dan table2 di kanan dan kiri masing-masing di gabung kanan kedua pertanyaan.
Ini adalah alasan mengapa Anda mendapatkan hasil yang sama di kedua kueri. Jadi jika Anda ingin hasil yang berbeda maka jalankan masing-masing dua pertanyaan ini,
pilih * dari Table1 kiri bergabung dengan Table2 di Table1.id = Table2.id
pilih * dari Table1 bergabung dengan Table2 di Table1.id = Table2.id
sumber
Select * from Table1 t1 Left Join Table2 t2 on t1.id=t2.id
Menurut definisi: Gabung Kiri memilih semua kolom yang disebutkan dengan kata kunci "pilih" dari Tabel 1 dan kolom dari Tabel 2 yang cocok dengan kriteria setelah kata kunci "on".Demikian pula, menurut definisi: Gabung Kanan memilih semua kolom yang disebutkan dengan kata kunci "pilih" dari Tabel 2 dan kolom dari Tabel 1 yang cocok dengan kriteria setelah kata kunci "on".
Mengacu pada pertanyaan Anda, id di kedua tabel dibandingkan dengan semua kolom yang perlu dilemparkan ke output. Jadi, id 1 dan 2 adalah umum di kedua tabel dan sebagai hasilnya, Anda akan memiliki empat kolom dengan kolom id dan nama dari tabel pertama dan kedua secara berurutan.
*select * from Table1 left join Table2 on Table1.id = Table2.id
Ekspresi di atas, ini mengambil semua catatan (baris) dari tabel 1 dan kolom, dengan id yang cocok dari tabel 1 dan tabel 2, dari tabel 2.
select * from Table2 right join Table1 on Table1.id = Table2.id**
Demikian pula dari ungkapan di atas, dibutuhkan semua catatan (baris) dari tabel 1 dan kolom, dengan id yang cocok dari tabel 1 dan tabel 2, dari tabel 2. (ingat, ini adalah hak bergabung jadi semua kolom dari table2 dan tidak dari table1 akan dipertimbangkan).
sumber