PostgreSQL - Klause UNIONS
Hai那里,未来的数据库巫师们!今天,我们将要进入PostgreSQL的神奇世界,探索它的一种强大魔法:UNION子句。如果你之前从未编写过一行代码,也不用担心——我会成为你这次冒险中的友好向导。所以,拿起你的魔杖(键盘),让我们开始吧!
Apa itu UNION?
Sebelum kita masuk ke dalam hal-hal kecil, mari pahami apa itu UNION. Bayangkan Anda memiliki dua daftar terpisah novel kesukaan Anda. Salah satu daftar berisi novel fantasi, dan yang lainnya memiliki judul fiksi ilmiah. Sekarang, apa bila Anda ingin menggabungkan daftar ini menjadi satu daftar super novel yang menakjubkan? Itu tepat apa yang UNION lakukan di dunia database!
Dalam PostgreSQL, UNION memungkinkan kita untuk menggabungkan hasil dua atau lebih pernyataan SELECT menjadi satu set hasil. Itu seperti mencampur cat berwarna yang berbeda untuk menciptakan warna baru yang menarik!
Sintaks
Sekarang, mari kita lihat kata-kata magis (sintaks) yang kita butuhkan untuk mencetak sihir UNION kami:
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 membawa analogi daftar buku kita ke kehidupan 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 daftar super buku kami:
SELECT title, author FROM fantasy_books
UNION
SELECT title, author FROM scifi_books;
Kueri 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 |
Kueri ini akan memberikan kita daftar gabungan semua buku dari kedua tabel, tanpa adanya duplikat. Itu seperti mencampur dua dek kartu bersama-sama, tetapi memastikan Anda tidak memiliki kartu yang berulang!
Memahami Hasil
Ketika Anda menjalankan kueri 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 indah, gabungan ini! Itu seperti menjadi tuan rumah pesta di mana pengarang fantasi dan fiksi ilmiah bisa berinteraksi. Saya hampir bisa mengimaginasikan Tolkien dan Herbert melakukan percakapan menarik tentang pembangunan dunia!
Klause UNION ALL
Sekarang, apa bila kita ingin menjaga semua baris, bahkan jika ada duplikat? Itu di mana UNION ALL berguna. Itu seperti memberitahu basis data Anda, "Saya ingin SEMUA buku, bahkan jika beberapa judul muncul lebih dari sekali!"
Mari kita modifikasi contoh sebelumnya sedikit:
-- Masukkan buku duplikat ke 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;
Kueri 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 tamu yang sama ke pesta dua kali - mereka mendapatkan dua porsi kue!
Aplikasi Praktis
Anda mungkin bertanya-tanya, "Ini menarik, tapi kapan saya sebenarnya akan menggunakannya dalam kehidupan nyata?" Pertanyaan yang bagus! Berikut adalah beberapa konteks:
- Menggabungkan data dari tabel yang berbeda tapi memiliki struktur yang mirip (seperti contoh buku kami).
- Menggabungkan hasil dari kueri yang berbeda untuk menciptakan laporan komprehensif.
- Membandingkan data antara periode waktu atau kategori yang berbeda.
Sebagai contoh, bayangkan Anda menjalankan sebuah toko buku. Anda bisa menggunakan UNION untuk menciptakan daftar tunggal semua buku yang sia-sia atau belum dijual dalam satu bulan terakhir:
SELECT title, 'Stok Rendah' AS alasan
FROM inventory
WHERE quantity < 5
UNION
SELECT title, 'Tidak Ada Penjualan Terbaru' AS alasan
FROM sales
WHERE last_sale_date < CURRENT_DATE - INTERVAL '30 days';
Kueri ini akan membantu Anda secara cepat mengidentifikasi buku mana yang mungkin perlu dipesan kembali atau dipotong harga.
Catatan 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 mengatakan "Expelliarmus!"
-
Tipe Data Tidak Kompatibel: Pastikan tipe data kolom yang sejajar kompatibel. Anda tidak dapat mencampur apel dan pesawat ruang angkasa (kecuali Anda menulis fiksi ilmiah yang sangat menarik).
-
Lupa Menggunakan ORDER BY: Operasi UNION dapat mempengaruhi urutan hasil Anda. Jika Anda memerlukan urutan tertentu, selalu tambahkan klausa ORDER BY di akhir kueri UNION Anda.
Kesimpulan
Dan di sana Anda punya nya, murid-murid tercinta! Anda baru saja belajar bagaimana menggunakan klausa UNION yang kuat di PostgreSQL. Ingat, seperti sihir yang bagus, itu memerlukan latihan untuk dikuasai. Jangan khawatir untuk mencoba kueri yang berbeda dan lihat apa hasilnya.
Sebelum saya membiarkan Anda pergi, ini adalah tantangan kecil: Cobalah membuat dua tabel sendiri (mungkin satu untuk film kesukaan Anda dan lainnya untuk acara TV kesukaan Anda) dan gunakan UNION untuk menggabungkannya. Mainkan dengan UNION dan UNION ALL untuk melihat perbedaan.
Himbauan baik, dan may your databases always be normalized and your joins swift!
Credits: Image by storyset