PostgreSQL - Klause UNIONS
Hai teman-teman, para ahli basisdata masa depan! Hari ini, kita akan meluncur ke dalam dunia magis PostgreSQL dan menjelajahi salah satu sihirnya yang kuat: klause UNION. Jangan khawatir jika Anda belum pernah menulis baris kode sebelumnya - saya akan menjadi panduan yang ramah untuk Anda dalam petualangan ini. Jadi, ambil wands (keyboards) Anda dan mari kita mulai!
Apa Itu UNION?
Sebelum kita masuk ke detailnya, mari pahami apa itu UNION. Bayangkan Anda memiliki dua daftar terpisah buku kesukaan Anda. Salah satu daftar berisi novel fantasi, dan yang lainnya memiliki judul fiksi ilmiah. Sekarang, bagaimana jika Anda ingin menggabungkan daftar ini menjadi satu super-daftar buku yang menakjubkan? Itu tepatnya apa yang UNION lakukan di dunia basisdata!
Dalam PostgreSQL, UNION memungkinkan kita untuk menggabungkan hasil dari dua atau lebih pernyataan SELECT menjadi satu set hasil tunggal. Itu seperti mencampur cat berwarna yang berbeda untuk menciptakan warna baru dan menarik!
Sintaks
Sekarang, mari kita lihat kata-kata magis (sintaks) yang kita butuhkan untuk mencast sihir UNION:
SELECT column1, column2, ... FROM table1
UNION
SELECT column1, column2, ... FROM table2;
Itu terlihat sederhana, kan? Tetapi ingat, dengan kekuatan yang besar datang tanggung jawab yang besar. Berikut adalah beberapa aturan penting yang harus diikuti:
- Jumlah dan urutan kolom dalam semua pernyataan SELECT harus sama.
- Tipe data kolom yang sejajar harus kompatibel.
- Secara default, UNION menghapus baris duplikat (kami akan lihat bagaimana mengubah ini nanti).
Contoh
Mari kita hidupkan analogi daftar buku kita dengan beberapa kode nyata. Bayangkan kita memiliki dua tabel: fantasy_books
dan scifi_books
.
-- Buat tabel fantasy_books
CREATE TABLE fantasy_books (
id SERIAL PRIMARY KEY,
title VARCHAR(100),
author VARCHAR(100)
);
-- Masukkan beberapa buku fantasi
INSERT INTO fantasy_books (title, author) VALUES
('The Hobbit', 'J.R.R. Tolkien'),
('Harry Potter and the Sorcerer''s Stone', 'J.K. Rowling'),
('A Game of Thrones', 'George R.R. Martin');
-- Buat tabel scifi_books
CREATE TABLE scifi_books (
id SERIAL PRIMARY KEY,
title VARCHAR(100),
author VARCHAR(100)
);
-- Masukkan beberapa buku fiksi ilmiah
INSERT INTO scifi_books (title, author) VALUES
('Dune', 'Frank Herbert'),
('The Hitchhiker''s Guide to the Galaxy', 'Douglas Adams'),
('1984', 'George Orwell');
Sekarang, mari kita gunakan UNION untuk menciptakan super-daftar buku kita:
SELECT title, author FROM fantasy_books
UNION
SELECT title, author FROM scifi_books;
Query ini akan memberikan kita daftar gabungan semua buku dari kedua tabel, tanpa adanya duplikat. Itu seperti mencampur dua dek kartu bersama, tetapi memastikan Anda tidak memiliki kartu yang berulang!
Memahami Hasil
Ketika Anda menjalankan query ini, Anda akan melihat sesuatu seperti ini:
title | author |
---|---|
The Hobbit | J.R.R. Tolkien |
Harry Potter and the Sorcerer's Stone | J.K. Rowling |
A Game of Thrones | George R.R. Martin |
Dune | Frank Herbert |
The Hitchhiker's Guide to the Galaxy | Douglas Adams |
1984 | George Orwell |
Lihatlah daftar gabungan yang indah itu! Itu seperti menjadi tuan rumah pesta di mana kedua pengarang fantasi dan fiksi ilmiah bisa berbincang. Saya hampir bisa mengimaginasikan Tolkien dan Herbert melakukan percakapan menarik tentang pembangunan dunia!
Klause UNION ALL
Sekarang, apa jika kita ingin menjaga semua baris, bahkan jika ada duplikat? Itu di mana UNION ALL berguna. Itu seperti memberitahu basisdata Anda, "Saya ingin SEMUA buku, bahkan jika beberapa judul muncul lebih dari sekali!"
Mari kita modifikasi contoh sebelumnya sedikit:
-- Masukkan buku duplikat dalam scifi_books
INSERT INTO scifi_books (title, author) VALUES
('The Hobbit', 'J.R.R. Tolkien');
-- Sekarang mari kita gunakan UNION ALL
SELECT title, author FROM fantasy_books
UNION ALL
SELECT title, author FROM scifi_books;
Query ini akan memberikan kita:
title | author |
---|---|
The Hobbit | J.R.R. Tolkien |
Harry Potter and the Sorcerer's Stone | J.K. Rowling |
A Game of Thrones | George R.R. Martin |
Dune | Frank Herbert |
The Hitchhiker's Guide to the Galaxy | Douglas Adams |
1984 | George Orwell |
The Hobbit | J.R.R. Tolkien |
Perhatikan bagaimana "The Hobbit" muncul dua kali sekarang? Itu seperti mengundang同一嘉宾 ke pesta Anda dua kali - mereka mendapat dua porsi kue!
Aplikasi Praktis
Anda mungkin berpikir, "Ini menarik, tapi kapan saya akan benar-benar menggunakan ini dalam kehidupan nyata?" Pertanyaan yang bagus! Berikut adalah beberapa konteks:
- Menggabungkan data dari tabel yang berbeda tapi memiliki struktur yang mirip (seperti contoh bukunya).
- Menggabungkan hasil dari query yang berbeda untuk menciptakan laporan komprehensif.
- Mengkomparasi data antara periode waktu yang berbeda atau kategori.
Misalnya, bayangkan Anda menjalankan sebuah toko buku. Anda bisa menggunakan UNION untuk menciptakan daftar tunggal buku yang sia-sia atau belum dijual dalam satu bulan terakhir:
SELECT title, 'Stok Rendah' AS reason
FROM inventory
WHERE quantity < 5
UNION
SELECT title, 'Tidak Ada Penjualan Terbaru' AS reason
FROM sales
WHERE last_sale_date < CURRENT_DATE - INTERVAL '30 days';
Query ini akan membantu Anda dengan cepat mengidentifikasi buku mana yang mungkin perlu dipesan ulang atau dipromosikan.
Kekeliruan Umum dan Cara Menghindarinya
-
Kolom Tidak Cocok: Ingat, jumlah dan urutan kolom dalam semua pernyataan SELECT harus sama. Jika tidak, PostgreSQL akan memberikan kesalahan lebih cepat daripada Anda dapat mengucapkan "Expelliarmus!"
-
Tipe Data Tidak Kompatibel: Pastikan tipe data kolom yang sejajar kompatibel. Anda tidak bisa mencampur apel dan pesawat ruang angkasa (kecuali Anda menulis fiksi ilmiah yang sangat menarik).
-
Lupa Menambahkan ORDER BY: Operasi UNION dapat mempengaruhi urutan hasil Anda. Jika Anda memerlukan urutan tertentu, selalu tambahkan klausa ORDER BY di akhir query UNION Anda.
Kesimpulan
Dan begitu, teman-teman saya! Anda telah belajar bagaimana menggunakan klausa UNION yang kuat di PostgreSQL. Ingat, seperti sihir yang bagus, memerlukan latihan untuk menjadi ahli. Jangan khawatir untuk mencoba query yang berbeda dan lihat apa hasilnya.
Sebelum saya membiarkan Anda pergi, ini adalah tantangan kecil: Cobalah membuat dua tabel Anda sendiri (mungkin satu untuk film kesukaan Anda dan lainnya untuk tayangan TV kesukaan Anda) dan gunakan UNION untuk menggabungkannya. Mainkan dengan UNION dan UNION ALL untuk melihat perbedaan.
Selamat mencari dan may your databases always be normalized and your joins swift!
Credits: Image by storyset