Terkadang Anda mungkin perlu membandingkan dua tabel di MySQL untuk menemukan catatan yang cocok atau catatan yang tidak cocok. Berikut query SQL untuk membandingkan dua tabel di MySQL.
Cara Membandingkan Dua Tabel di MySQL
Berikut adalah langkah-langkah untuk membandingkan dua tabel di MySQL. Ada kasus penggunaan yang berbeda untuk membandingkan dua tabel dalam SQL. Kita akan melihat masing-masing satu per satu. Katakanlah Anda memiliki 2 tabel berikut pesanan(id, tanggal_pesanan, jumlah) dan pesanan2(id, tanggal_pesanan, jumlah) yang memiliki 2 record identik.
mysql> create table orders(id int, order_date date, amount int); mysql> insert into orders(id, order_date, amount) values(1,'2020-07-25',250), (2,'2020-07-26',350), (3,'2020-07-27',200), (4,'2020-07-28',150); mysql> select * from orders; +------+------------+--------+ | id | order_date | amount | +------+------------+--------+ | 1 | 2020-07-25 | 250 | | 2 | 2020-07-26 | 350 | | 3 | 2020-07-27 | 200 | | 4 | 2020-07-28 | 150 | +------+------------+--------+ mysql> create table orders2(id int, order_date date, amount int); mysql> insert into orders2(id, order_date, amount) values(3,'2020-07-27',200), (4,'2020-07-28',150), (5,'2020-07-29',250), (6,'2020-07-30',300); mysql> select * from orders2; +------+------------+--------+ | id | order_date | amount | +------+------------+--------+ | 3 | 2020-07-27 | 200 | | 4 | 2020-07-28 | 150 | | 5 | 2020-07-29 | 250 | | 6 | 2020-07-30 | 300 | +------+------------+--------+
Bonus Baca :Cara Mendapatkan Data Satu Bulan Terakhir di MySQL
MySQL Bandingkan Dua Kolom dari tabel yang berbeda
Katakanlah Anda hanya ingin membandingkan dua kolom (misalnya id) dari dua tabel pesanan yang berbeda dan pesanan2. Berikut query SQL untuk membandingkan dua kolom dari tabel yang berbeda dan memilih record yang cocok.
mysql> select * from orders where id in (select id from orders2); +------+------------+--------+ | id | order_date | amount | +------+------------+--------+ | 3 | 2020-07-27 | 200 | | 4 | 2020-07-28 | 150 | +------+------------+--------+
Dalam kueri di atas, kami memilih catatan dari pesanan yang id nilai kolom ada dalam daftar id nilai kolom yang diperoleh dari orders2 menggunakan subquery.
Demikian pula, jika Anda ingin membandingkan dua kolom dan memilih catatan yang tidak cocok, perbarui kueri di atas dengan menambahkan kata kunci NOT sebelum IN, seperti yang ditunjukkan di bawah ini.
mysql> select * from orders where id NOT in (select id from orders2); +------+------------+--------+ | id | order_date | amount | +------+------------+--------+ | 1 | 2020-07-25 | 250 | | 2 | 2020-07-26 | 350 | +------+------------+--------+
Bonus Baca :Cara Menyalin Tabel di MySQL
MySQL Bandingkan Dua tabel untuk Menemukan Catatan yang Cocok
Jika Anda ingin membandingkan dua tabel dan menemukan catatan yang cocok berdasarkan beberapa kolom, maka inilah kueri SQL. Katakanlah Anda ingin menemukan catatan yang identik dengan membandingkan beberapa kolom id, order_date, jumlah
Pertama, kita melakukan UNION ALL dari dua tabel untuk mempertahankan baris duplikat.
mysql> select id, order_date, amount from orders union all select id, order_date, amount from orders2; +------+------------+--------+ | id | order_date | amount | +------+------------+--------+ | 1 | 2020-07-25 | 250 | | 2 | 2020-07-26 | 350 | | 3 | 2020-07-27 | 200 | | 4 | 2020-07-28 | 150 | | 3 | 2020-07-27 | 200 | | 4 | 2020-07-28 | 150 | | 5 | 2020-07-29 | 250 | | 6 | 2020-07-30 | 300 | +------+------------+--------+
Selanjutnya, kita melakukan GROUP BY untuk menghitung record berdasarkan id, order_date dan jumlah kolom untuk mencari record dengan count>1, yaitu record yang muncul lebih dari satu kali. Kami menggunakan kueri di atas sebagai subkueri.
mysql> select id, order_date, amount from ( select id, order_date, amount from orders union all select id, order_date, amount from orders2) temp group by id, order_date, amount having count(*)>1; +------+------------+--------+ | id | order_date | amount | +------+------------+--------+ | 3 | 2020-07-27 | 200 | | 4 | 2020-07-28 | 150 | +------+------------+--------+
Bonus Baca :Cara Menambahkan batasan NOT NULL di MySQL
MySQL Bandingkan Dua Tabel untuk Menemukan record yang tidak cocok
Demikian pula, inilah cara membandingkan dua tabel untuk menemukan kolom yang tidak cocok di MySQL. Dalam query di atas, daripada menggunakan count(*)>1, kita menggunakan kondisi count(*)=1, yaitu record yang hanya muncul sekali.
Berikut SQL untuk membandingkan dua tabel dan menemukan catatan tanpa kecocokan.
mysql> select id, order_date, amount from ( select id, order_date, amount from orders union all select id, order_date, amount from orders2) temp group by id, order_date, amount having count(*)=1; +------+------------+--------+ | id | order_date | amount | +------+------------+--------+ | 1 | 2020-07-25 | 250 | | 2 | 2020-07-26 | 350 | | 5 | 2020-07-29 | 250 | | 6 | 2020-07-30 | 300 | +------+------------+--------+
Bonus Baca :Cara Menambahkan Batasan Default di MySQL
MySQL membandingkan dua tabel dari database yang berbeda
Demikian pula, jika Anda ingin membandingkan dua tabel pesanan dan pesanan2 dari database yang berbeda db1 dan db2 masing-masing, cukup awali nama database sebelum nama tabel dengan titik (.)
Berikut query SQL untuk membandingkan dua tabel dari database yang berbeda dan mendapatkan record yang cocok.
mysql> select id, order_date, amount from ( select id, order_date, amount from db1.orders union all select id, order_date, amount from db2.orders2) temp group by id, order_date, amount having count(*)>1;
Dan inilah kueri SQL untuk membandingkan dua tabel dari database yang berbeda dan mendapatkan catatan yang tidak cocok.
mysql> select id, order_date, amount from ( select id, order_date, amount from db1.orders union all select id, order_date, amount from db2.orders2) temp group by id, order_date, amount having count(*)>1;
Mudah-mudahan, sekarang Anda dapat membandingkan dua tabel di MySQL
Ubiq memudahkan untuk memvisualisasikan data dalam hitungan menit, dan memantau di dasbor waktu nyata. Cobalah Hari ini!