Kursus
Data yang konsisten penting untuk keandalan dan integritas dalam basis data relasional. Saat memodifikasi data yang sudah ada di tabel-tabel yang saling terkait, kita menggunakan pernyataan UPDATE dengan klausa JOIN untuk mencapai konsistensi data. Operasi UPDATE dengan JOIN didukung di SQL Server dan bermanfaat untuk memastikan sinkronisasi data yang akurat antar tabel.
Operasi SQL JOIN memungkinkan pembaruan yang lebih kompleks melampaui operasi satu tabel melalui foreign key yang dibagikan di berbagai tabel. Operasi UPDATE dengan JOIN berguna bagi pengembang dan administrator basis data karena meningkatkan efisiensi dan mengurangi risiko inkonsistensi data.
Sebelum Anda mulai, saya menyarankan mengikuti kursus Introduction to SQL Server dari DataCamp untuk membiasakan diri dengan cara kerja basis data SQL Server. Tutorial ini ditulis khusus dengan mempertimbangkan SQL Server. Selain itu, lihat juga tutorial kami, Introduction to SQL Joins, untuk mempelajari cara menggunakan JOIN saat bekerja dengan beberapa tabel di SQL.
Cara Menggunakan SQL UPDATE dengan JOIN
Di SQL Server, operasi UPDATE dengan JOIN memungkinkan Anda memperbarui rekaman di satu tabel berdasarkan data yang cocok dari tabel lain. Teknik ini sangat berguna saat menyinkronkan data di beberapa tabel.
Menggunakan SQL UPDATE dengan INNER JOIN
INNER JOIN dalam SQL mengambil baris/rekaman dengan data yang cocok di kedua tabel. Saat digunakan dengan pernyataan UPDATE, INNER JOIN memastikan bahwa hanya rekaman di tabel target yang memiliki pasangan yang sesuai di tabel yang di-join yang diperbarui.
Struktur umum UPDATE dengan INNER JOIN melibatkan penentuan tabel target yang perlu diperbarui dan mendefinisikan kolom yang akan diperbarui. Strukturnya juga mencakup penggunaan INNER JOIN untuk mengaitkannya dengan tabel lain berdasarkan kolom umum agar hanya rekaman yang diperlukan yang diperbarui.
Contoh INNER JOIN
Misalkan Anda mengelola basis data ritel yang perlu memperbarui tabel Sales agar selaras dengan perubahan di tabel Customer. Seorang pelanggan baru saja mengubah metode kontak yang disukai, dan Anda ingin perubahan ini tercermin di kedua tabel. Anda akan menggunakan UPDATE dengan INNER JOIN untuk memastikan bahwa hanya rekaman penjualan yang terkait dengan pelanggan yang telah memperbarui informasi kontaknya yang diubah tanpa memengaruhi baris lain dalam data.
-- Update the Sales table based on the new preferred contact methods in the Customers table
UPDATE s
SET s.ContactMethod = c.PreferredContactMethod
FROM Sales s
INNER JOIN Customers c ON s.CustomerID = c.CustomerID
WHERE c.CustomerID IN (3, 7, 9);
Praktik terbaik UPDATE dengan INNER JOIN
Saat menggunakan UPDATE dengan INNER JOIN, pertimbangkan praktik terbaik berikut untuk kueri yang efisien.
-
Gunakan Indeks pada Kolom Join: Pastikan kolom yang digunakan dalam kondisi
JOINdiindeks untuk mengoptimalkan kinerja, mempercepat eksekusi kueri. -
Batasi Cakupan Pembaruan: Gunakan klausa
WHEREuntuk memastikan hanya baris yang relevan yang diperbarui dan meningkatkan kinerja kueri.
Menggunakan SQL UPDATE dengan LEFT JOIN
LEFT JOIN digunakan untuk mengambil semua rekaman dari tabel kiri (pertama) dan rekaman yang cocok dari tabel kanan (kedua). Kueri dengan LEFT JOIN akan mengembalikan hasil NULL dari tabel kanan jika tidak ada hasil yang cocok. Saat digunakan dengan pernyataan UPDATE, LEFT JOIN dapat memperbarui rekaman bahkan ketika tidak ada data yang cocok di tabel kedua, yang bermanfaat untuk mengisi data yang hilang. Lihat SQL Joins Cheat Sheet kami jika Anda ingin meninjau kembali join SQL.
Contoh LEFT JOIN
Pertimbangkan skenario saat Anda mengelola basis data untuk toko ritel online. Tabel Customers berisi daftar semua pelanggan, sementara tabel Orders berisi detail pesanan yang dilakukan oleh sebagian pelanggan tersebut. Anda akan menggunakan LEFT JOIN untuk mengambil dan memperbarui detail pesanan untuk semua pelanggan, termasuk mereka yang belum pernah melakukan pemesanan. Metode ini akan mengisi data yang hilang untuk pelanggan yang belum memiliki pesanan dengan nilai NULL atau nilai tertentu.
Contoh LEFT JOIN kita akan sedikit berbeda karena LEFT JOIN mengembalikan nilai NULL jika tidak ditemukan rekaman yang cocok di tabel kanan. Karena itu, penting untuk mengetahui cara menangani nilai NULL ini. Anda dapat menangani nilai NULL dengan menetapkan nilai bawaan pada kolom yang akan diperbarui. Dengan menggunakan fungsi COALESCE(), LEFT JOIN akan menyertakan kondisi nilai bawaan untuk data yang hilang. Kueri berikut menunjukkan cara menetapkan nilai bawaan untuk nilai NULL.
-- Update all customers to set default values where OrderStatus and OrderDate are NULL
UPDATE c
SET
c.OrderStatus = COALESCE(o.OrderStatus, 'No Orders'),
c.OrderDate = COALESCE(o.OrderDate, '2023-01-01')
FROM Customers c
LEFT JOIN Orders o ON c.CustomerID = o.CustomerID;
-- Select from the updated Customers table
SELECT *
FROM Customers;
Anda juga dapat menggunakan fungsi COALESCE() atau IFNULL() untuk menangani nilai NULL yang melibatkan perhitungan sebelum memperbarui kolom. Lihat tutorial kami COALESCE() SQL Function untuk mempelajari lebih lanjut.
Praktik terbaik UPDATE dengan LEFT JOIN
Saat menggunakan UPDATE dengan LEFT JOIN, pertimbangkan praktik terbaik berikut untuk kueri yang efisien.
-
Gunakan Referensi Kolom Eksplisit: Alih-alih menggunakan
SELECT *, sebutkan secara eksplisit kolom yang ingin Anda perbarui agar kueri lebih jelas dan menghindari pembaruan yang tidak diinginkan. -
Gunakan Indeks pada Kolom Join: Pastikan kolom yang digunakan dalam kondisi
JOINdiindeks untuk meningkatkan kinerja operasiJOINdan waktu eksekusi kueri secara keseluruhan.
Pertimbangan Performa SQL Update dengan Join
Memahami implikasi performa saat menggunakan UPDATE dengan JOIN dalam SQL penting untuk memastikan kueri Anda berjalan efisien. Performa operasi ini dapat dipengaruhi oleh beberapa faktor, termasuk ukuran tabel yang digunakan, jenis join yang digunakan, dan apakah indeks yang tepat tersedia.
Indeks dan kecepatan kueri
Mengindeks kolom yang terlibat dalam kondisi join penting untuk mempercepat proses pembaruan. Ketika Anda mengindeks kolom dengan tepat, operasi hanya akan menemukan baris yang cocok selama join, sehingga mengurangi waktu yang diperlukan untuk pemindaian tabel.
Dampak dataset besar
Saat bekerja dengan dataset besar, eksekusi kueri mungkin lebih lambat karena operasi yang memakan sumber daya. Pertimbangkan praktik terbaik berikut untuk mengurangi masalah performa pada dataset besar. Juga, coba jalur keterampilan SQL Server for Database Administrators jika Anda akan merancang atau memelihara basis data secara rutin sebagai bagian dari pekerjaan Anda.
-
Pembaruan Bertahap (Batch Updates): Pecah pembaruan menjadi batch yang lebih kecil untuk mengurangi beban pada basis data dan memperbarui rekaman secara efisien.
-
Batasi Cakupan Pembaruan: Saat Anda menggunakan klausa
WHERE, Anda menentukan baris yang akan diperbarui, sehingga mengurangi waktu pemrosesan kueri.
Kesalahan Umum dan Cara Menghindarinya
Ada beberapa kesalahan umum yang mungkin Anda temui saat menggunakan UPDATE dengan JOIN di SQL Server. Kesalahan ini dapat menyebabkan masalah performa atau memperbarui data yang tidak diinginkan. Berikut beberapa kesalahan tersebut dan cara menghindarinya.
Pembaruan yang tidak diinginkan
Jika Anda gagal menentukan kondisi join dengan benar, UPDATE dengan JOIN akan memperbarui lebih banyak rekaman daripada yang dimaksudkan. Kesalahan ini akan memperbarui seluruh tabel alih-alih subset yang diperlukan. Untuk menghindari kesalahan ini, selalu pastikan Anda menggunakan kondisi JOIN yang tepat untuk memperbarui baris yang diperlukan.
Produk Kartesius
Produk Kartesius terjadi ketika kondisi join salah atau tidak ada, yang menyebabkan kueri mencocokkan setiap baris dari tabel kiri dengan setiap baris dari tabel kanan. Masalah ini dapat memperlambat operasi kueri dan menghasilkan hasil yang tidak akurat. Untuk mencegah kesalahan ini, selalu pastikan Anda memiliki kondisi JOIN yang didefinisikan dengan benar. Pastikan juga Anda menunjukkan kolom yang tepat untuk menerapkan kondisi join.
Alternatif SQL UPDATE dengan JOIN
Meskipun UPDATE dengan JOIN adalah metode yang kuat untuk memperbarui rekaman di tabel-tabel yang terkait, ada metode alternatif untuk melakukan pembaruan. Berikut beberapa opsinya.
Subkueri
Subkueri adalah alternatif penting untuk JOIN saat Anda ingin melakukan pembaruan berdasarkan kondisi sederhana. Dengan subkueri, Anda akan menghindari banyak tabel kompleks dengan menentukan kondisi di dalam subkueri.
Contoh berikut menunjukkan cara menggunakan subkueri untuk memperbarui tabel Sales dengan CustomerStatus terbaru dari tabel Customers.
-- Update the CustomerStatus in the Sales table
UPDATE Sales
-- Set the CustomerStatus in Sales to corresponding value from the Customers table
SET CustomerStatus = (
-- Fetch CustomerStatus from the Customers table for the matching CustomerID
SELECT CustomerStatus
FROM Customers
WHERE Customers.CustomerID = Sales.CustomerID
)
-- Update rows in Sales where a matching CustomerID exists in the Customers table
WHERE EXISTS (
-- Subquery to check if a matching CustomerID exists in the Customers table
SELECT 1
FROM Customers
WHERE Customers.CustomerID = Sales.CustomerID
);
Pernyataan MERGE
Pernyataan MERGE adalah perintah SQL serbaguna yang memungkinkan Anda melakukan operasi UPDATE, INSERT, atau DELETE dalam satu kueri berdasarkan perbandingan dua tabel. Pernyataan MERGE berguna saat Anda perlu menyinkronkan data antara dua tabel, menangani baris yang cocok dan tidak cocok.
Menggunakan pernyataan MERGE membantu karena menyediakan metode ringkas untuk melakukan beberapa operasi dalam satu kueri. Sintaks pernyataan MERGE adalah sebagai berikut.
-- Merge data from the source table into the target table
MERGE INTO target_table AS target
USING source_table AS source
-- Define the common key between the source and target tables
ON target.common_column = source.common_column
-- When a match is found in both tables based on the common key
WHEN MATCHED THEN
-- Update the target table's column with the corresponding value from the source table
UPDATE SET target.column = source.column
-- When a row exists in the source table but not in the target table
WHEN NOT MATCHED THEN
-- Insert the new data into the target table
INSERT (column1, column2)
VALUES (source.column1, source.column2)
-- When a row exists in the target table but not in the source table
WHEN NOT MATCHED BY SOURCE THEN
-- Delete the row from the target table
DELETE;
Kesimpulan
Memahami cara menggunakan UPDATE dengan JOIN di SQL Server penting untuk pembaruan data lintas tabel yang efisien dalam basis data relasional. Teknik ini memungkinkan Anda memperbarui rekaman di satu tabel berdasarkan data yang cocok di tabel lain, memastikan konsistensi dan sinkronisasi data di tabel-tabel yang terkait. Menerapkan teknik dan praktik terbaik ini dapat meningkatkan operasi basis data Anda, memastikan pengelolaan data yang akurat, efisien, dan andal.
Jika Anda ingin meningkatkan keterampilan SQL, saya sarankan melihat jalur keterampilan SQL Server Fundamentals dari DataCamp untuk meningkatkan keterampilan analisis data Anda. Kursus Writing Functions and Stored Procedures in SQL Server juga akan membantu Anda mempelajari manipulasi data yang efisien di SQL Server. Jika Anda sedang mempersiapkan wawancara SQL, saya sarankan membaca posting blog kami, 20 Top SQL Joins Interview Questions untuk membantu Anda bersiap. Terakhir, jika Anda ingin menerapkan keterampilan SQL dalam karier sebagai data engineer, pertimbangkan juga untuk mengikuti jalur karier Data Engineer in Python, lengkap dengan sertifikasi di akhir.
Pertanyaan SQL yang Sering Diajukan
Apa tujuan menggunakan UPDATE dengan JOIN dalam SQL?
UPDATE dengan JOIN memungkinkan Anda memperbarui rekaman di satu tabel berdasarkan data yang cocok dari tabel lain.
Bagaimana perbedaan INNER JOIN dari LEFT JOIN saat digunakan dalam pernyataan UPDATE?
INNER JOIN hanya memperbarui rekaman yang memiliki baris yang cocok di kedua tabel, sementara LEFT JOIN memperbarui semua rekaman di tabel target, termasuk yang tidak memiliki baris yang cocok di tabel yang di-join, dengan mengisi data yang hilang atau menangani nilai NULL.
Apa masalah performa dari UPDATE dengan JOIN dalam SQL?
Tabel/dataset besar dapat memengaruhi performa kueri UPDATE dengan JOIN karena memerlukan daya pemrosesan yang lebih besar.
Basis data mana yang mendukung UPDATE dengan JOIN dalam SQL?
Konsep UPDATE dengan JOIN berfungsi di SQL Server, MySQL, dan PostgreSQL, meskipun sintaksnya berbeda tergantung basis data. Oracle tidak mendukung UPDATE dengan JOIN secara langsung dan memerlukan pendekatan berbeda menggunakan subkueri atau pernyataan MERGE.
Apa alternatif dari UPDATE dengan JOIN dalam SQL?
Menggunakan subkueri atau pernyataan MERGE adalah alternatif yang sesuai untuk UPDATE dengan JOIN.

