Gunakan join luar

Selesai

Meskipun tidak seumum inner join, penggunaan outer join dalam kueri multi-tabel dapat memberikan tampilan alternatif atas data bisnis Anda. Seperti halnya inner join, Anda akan menyatakan hubungan logis antara tabel. Namun, Anda tidak hanya akan mengambil baris dengan atribut yang cocok, tetapi juga semua baris yang ada dalam satu atau kedua tabel, apakah ada kecocokan di tabel lain atau tidak.

Sebelumnya, Anda mempelajari cara menggunakan INNER JOIN untuk menemukan baris yang cocok di antara dua tabel. Seperti yang Anda lihat, prosesor kueri menyusun hasil kueri INNER JOIN dengan memfilter baris yang tidak memenuhi kondisi yang dinyatakan dalam predikat klausa ON. Hasilnya adalah hanya baris yang cocok dengan baris di tabel lain yang diperoleh. Dengan OUTER JOIN, Anda dapat memilih untuk menampilkan semua baris yang memiliki baris yang cocok di antara tabel, ditambah semua baris yang tidak cocok di tabel lain. Mari kita lihat contohnya, lalu jelajahi prosesnya.

Pertama, periksa kueri berikut, yang ditulis dengan INNER JOIN:

SELECT emp.FirstName, ord.Amount
FROM HR.Employee AS emp
INNER JOIN Sales.SalesOrder AS ord
    ON emp.EmployeeID = ord.EmployeeID;

Baris ini mewakili kecocokan antara SDM. Karyawan dan Sales.SalesOrder. Hanya nilai EmployeeID yang ada di kedua tabel yang akan muncul dalam hasil.

Diagram Venn memperlihatkan hasil gabungan kecocokan anggota dari set Employee dan SalesOrder

Sekarang, mari kita periksa kueri berikut, ditulis sebagai LEFT OUTER JOIN:

SELECT emp.FirstName, ord.Amount
FROM HR.Employee AS emp
LEFT OUTER JOIN Sales.SalesOrder AS ord
    ON emp.EmployeeID = ord.EmployeeID;

Contoh ini menggunakan operator LEFT OUTER JOIN, yang mengarahkan prosesor kueri untuk mempertahankan semua baris dari tabel di sebelah kiri (SDM. Karyawan) dan menampilkan nilai Jumlah untuk baris yang cocok di Sales.SalesOrder. Namun, semua karyawan dikembalikan, apakah mereka telah mengambil pesanan penjualan atau tidak. Sebagai pengganti nilai Jumlah, perintah akan mengembalikan NULL untuk karyawan yang tidak memiliki pesanan penjualan.

Diagram Venn memperlihatkan hasil gabungan luar dari set Employee dan SalesOrder

Sintaks OUTER JOIN

Gabungan luar dinyatakan menggunakan kata kunci LEFT, RIGHT, atau FULL sebelumnya OUTER JOIN. Tujuan kata kunci adalah untuk menunjukkan tabel mana (di sisi mana kata kunci JOIN) harus dipertahankan dan menampilkan semua barisnya; cocok, atau tidak ada kecocokan.

Saat menggunakan LEFT, RIGHT, atau FULL untuk menentukan gabungan, Anda dapat menghilangkan kata kunci OUTER seperti yang ditunjukkan di sini:

SELECT emp.FirstName, ord.Amount
FROM HR.Employee AS emp
LEFT JOIN Sales.SalesOrder AS ord
    ON emp.EmployeeID = ord.EmployeeID;

Namun, seperti kata kunci INNER, seringkali berguna untuk menulis kode yang eksplisit tentang jenis gabungan yang digunakan.

Saat menulis kueri menggunakan OUTER JOIN, pertimbangkan panduan berikut:

  • Seperti yang telah Anda lihat, alias tabel lebih disukai tidak hanya untuk daftar SELECT, tetapi juga untuk klausa ON.
  • Seperti halnya INNER JOIN, OUTER JOIN dapat dilakukan pada satu kolom yang cocok atau pada beberapa atribut yang cocok.
  • Tidak seperti INNER JOIN, urutan tabel dicantumkan dan digabungkan dalam klausa FROM tidak masalah dengan OUTER JOIN, karena akan menentukan apakah Anda memilih LEFT atau RIGHT untuk gabungan Anda.
  • Gabungan multi-tabel lebih kompleks saat terdapat OUTER JOIN. Kehadiran NULL dalam hasil OUTER JOIN dapat menyebabkan masalah jika hasil perantara kemudian digabungkan ke tabel ketiga. Baris dengan NULL dapat difilter berdasarkan predikat gabungan kedua.
  • Untuk menampilkan hanya baris di mana tidak ada kecocokan, tambahkan pengujian untuk nilai NULL dalam klausa WHERE setelah predikat OUTER JOIN.
  • Jenis penggabungan FULL OUTER JOIN jarang digunakan. Ini mengembalikan semua baris yang cocok antara dua tabel, ditambah semua baris dari tabel pertama yang tidak memiliki pasangan di tabel kedua, serta semua baris dari tabel kedua yang tidak memiliki pasangan di tabel pertama.
  • Tidak ada cara untuk memprediksi urutan baris akan kembali tanpa klausa ORDER BY. Tidak ada cara untuk mengetahui apakah baris yang cocok atau tidak cocok akan dikembalikan terlebih dahulu.