Masalah:
Anda ingin menampilkan data dari kolom tertentu (dengan tipe data serupa) dari dua tabel di SQL.
Contoh:
Ada dua tabel di database kami:employee
dan customer
.
employee
tabel berisi data dalam kolom berikut:id , nama_depan , nama_belakang , dan usia .
id | nama_depan | nama_belakang | umur |
---|---|---|---|
1 | Tom | Miller | 22 |
2 | John | Smith | 26 |
3 | Lisa | Williams | 30 |
4 | Charles | Davis | 21 |
5 | James | Moore | 22 |
customer
tabel berisi data dalam kolom berikut:id , nama_depan , nama_belakang , dan usia .
id | nama_depan | nama_belakang | umur |
---|---|---|---|
1 | Milan | Smith | 45 |
2 | Charles | Davis | 21 |
3 | Tandai | Pendukung | 19 |
Dalam satu kumpulan hasil, mari tampilkan nama depan, nama belakang, dan usia untuk semua orang di database, baik karyawan maupun pelanggan.
Solusi 1:
Kami akan menggunakan UNION ALL
untuk menggabungkan data dari kolom dalam dua tabel.
Inilah kueri yang akan Anda tulis:
SELECT first_name, last_name, age FROM employee UNION ALL SELECT first_name, last_name, age FROM customer;
Ini hasilnya:
nama_depan | nama_belakang | umur |
---|---|---|
Tom | Miller | 22 |
John | Smith | 26 |
Lisa | Williams | 30 |
Charles | Davis | 21 |
James | Moore | 28 |
Milan | Smith | 45 |
Charles | Davis | 21 |
Tandai | Pendukung | 19 |
Diskusi:
Gunakan klausa UNION ALL untuk menggabungkan data dari kolom dalam dua atau lebih tabel. Dalam contoh kami, kami menggabungkan data dari employee
dan customer
tabel. Di sebelah kiri kata kunci UNION ALL, letakkan pernyataan SELECT pertama untuk mendapatkan data dari tabel pertama (dalam contoh kita, tabel employee
). Di sebelah kanan, gunakan pernyataan SELECT lain untuk mendapatkan data dari tabel kedua (dalam contoh kita, customer
).
Ingat bahwa data yang dipilih di kedua tabel harus memiliki tipe data yang sama di setiap kolom. Misalnya, jika kolom pertama di SELECT pertama adalah tipe data string, kolom pertama di SELECT kedua juga harus tipe data string. Jika kolom kedua dalam pernyataan SELECT pertama adalah bilangan bulat, kolom kedua pada tabel kedua juga harus bertipe bilangan bulat.
Dalam kueri pertama, kami memilih usia (usia karyawan, yang merupakan tipe data integer) untuk kolom ketiga. Oleh karena itu, kolom ketiga di SELECT kedua juga merupakan nilai integer; ini adalah usia dari pelanggan.
Kolom kedua di kedua pernyataan SELECT adalah tipe data yang sama. Namun, jika nilainya sama di kedua tabel, keduanya akan ditampilkan beberapa kali; misalnya, 'Charles Davis 21' ditampilkan dua kali di kumpulan hasil.
Bagaimana jika tidak ingin beberapa catatan identik di tabel hasil? Dalam hal ini, gunakan UNION
. Ini mirip dengan UNION ALL
, tetapi menghapus rekaman duplikat. Perhatikan contoh berikut.
Solusi 2:
Berikut kueri yang menghindari catatan duplikat:
SELECT first_name, last_name FROM employee UNION SELECT first_name, last_name FROM customer;
Berikut hasil query di atas:
nama_depan | nama_belakang |
---|---|
Tandai | Pendukung |
James | Moore |
John | Smith |
Charles | Davis |
Milan | Smith |
Tom | Miller |
Lisa | Williams |
Catatan:
UNION ALL
lebih cepat dari UNION
, tapi UNION
menghapus baris duplikat. Pilihannya tergantung pada data hasil yang kita butuhkan.