PostgreSQL - Sub Queries

Hai teman-teman pecinta basis data! Hari ini, kita akan mendalamkan pengetahuan kita tentang dunia yang menarik dari subquery PostgreSQL. Bayangkan subquery sebagai pembantu kecil yang membantu query utamamu dalam mengambil atau memanipulasi data. Mereka seperti teman pengganti yang dapat dipercaya dalam film superhero favoritmu – kadang-kadang tidak selalu di sorot, tapi penting untuk menyelesaikan pekerjaan!

PostgreSQL - Sub Queries

Subqueries dengan Statement SELECT

mari kita mulai dengan penggunaan paling umum subquery – dalam statement SELECT. Bayangkan Anda menjalankan sebuah toko buku, dan Anda ingin mengetahui buku mana yang dijual di atas rata-rata. Berikut adalah cara Anda melakukannya:

SELECT title, price
FROM books
WHERE price > (SELECT AVG(price) FROM books);

Dalam query ini, bagian (SELECT AVG(price) FROM books) adalah subquery kami. Itu menghitung harga rata-rata semua buku, dan kemudian query utama menggunakan nilai ini untuk menyaring hasilnya.

mari kitauraikan ini:

  1. Subquery menghitung harga rata-rata.
  2. Query utama kemudian membandingkan harga setiap buku dengan nilai rata-rata ini.
  3. Hanya buku dengan harga di atas rata-rata yang dikembalikan.

Berikut adalah contoh lain. Bayangkan Anda ingin menemukan semua pelanggan yang telah memesan:

SELECT customer_name
FROM customers
WHERE customer_id IN (SELECT DISTINCT customer_id FROM orders);

Dalam kasus ini, subquery (SELECT DISTINCT customer_id FROM orders) mengembalikan daftar ID pelanggan yang telah memesan. Query utama kemudian menggunakan daftar ini untuk menyaring tabel pelanggan.

Subqueries dengan Statement INSERT

Sekarang, mari kita lihat bagaimana subquery dapat digunakan dengan statement INSERT. Bayangkan Anda membuat tabel 'buku terpilih', dan Anda ingin mengisiinya dengan semua buku yang terjual lebih dari 1000 eksemplar:

INSERT INTO featured_books (book_id, title, author)
SELECT book_id, title, author
FROM books
WHERE book_id IN (SELECT book_id FROM sales WHERE copies_sold > 1000);

Di sini, subquery (SELECT book_id FROM sales WHERE copies_sold > 1000) menemukan semua buku yang terjual lebih dari 1000 eksemplar. Query utama kemudian memasukkan rincian buku ini ke dalam tabel featured_books.

Subqueries dengan Statement UPDATE

Subquery juga dapat sangat berguna dalam statement UPDATE. Bayangkan Anda ingin memberikan diskon 10% untuk semua buku dari penulis yang telah menulis lebih dari 5 buku:

UPDATE books
SET price = price * 0.9
WHERE author_id IN (
SELECT author_id
FROM books
GROUP BY author_id
HAVING COUNT(*) > 5
);

Dalam contoh ini, subquery mengidentifikasi penulis yang telah menulis lebih dari 5 buku. Query utama kemudian memperbarui harga semua buku oleh penulis-penulis ini.

Subqueries dengan Statement DELETE

Akhirnya, mari kita lihat bagaimana subquery dapat digunakan dengan statement DELETE. Bayangkan Anda ingin menghapus semua pesanan dari pelanggan yang belum membuat pembelian dalam setahun terakhir:

DELETE FROM orders
WHERE customer_id IN (
SELECT customer_id
FROM customers
WHERE last_purchase_date < CURRENT_DATE - INTERVAL '1 year'
);

Di sini, subquery menemukan semua pelanggan yang belum membuat pembelian dalam setahun terakhir. Query utama kemudian menghapus semua pesanan dari pelanggan-pelanggan ini.

Metode Subquery Umum

Berikut adalah tabel metode subquery umum di PostgreSQL:

Metode Deskripsi Contoh
IN Memeriksa apakah nilai ada dalam himpunan hasil subquery WHERE id IN (SELECT id FROM table)
EXISTS Memeriksa apakah subquery mengembalikan baris mana pun WHERE EXISTS (SELECT 1 FROM table WHERE condition)
ANY Mengembalikan benar jika nilai subquery mana pun memenuhi kondisi WHERE column > ANY (SELECT column FROM table)
ALL Mengembalikan benar jika semua nilai subquery memenuhi kondisi WHERE column > ALL (SELECT column FROM table)

Ingat, latihan membuat sempurna! Cobalah menulis query Anda sendiri, eksperimen dengan berbagai jenis scenario, dan jangan takut untuk membuat kesalahan. Itu adalah cara kita belajar dan tumbuh di dunia yang menakjubkan basis data!

Sebelum kita selesai, ini cerita kecil dari pengalaman mengajar saya. Pernah sekali, saya memiliki seorang murid yang kesulitan dengan subquery. Dia terus mencampurkan query utama dan subquery. Jadi saya katakan kepadanya untuk memikirkan seperti boneka Rusia – boneka terkecil (subquery) memasuki boneka yang lebih besar (query utama). Gambaran ini membantunya memahami konsep, dan segera dia menulis query kompleks seperti seorang ahli!

Saya harap tutorial ini telah membantu Anda untuk mendemistifikasi subquery PostgreSQL. Terus query, terus belajar, dan terutama, bersenang-senang dengan basis data!

Credits: Image by storyset