PostgreSQL - Sub Queries

Hai penggemar basis data yang bersemangat! Hari ini, kita akan masuk ke dunia yang menarik dari subquery PostgreSQL. Berikan subquery seperti seorang asisten kecil yang membantu query utama Anda untuk mengambil atau memanipulasi data. Itu seperti teman baik yang selalu mendampingi pahlawan super favorit Anda di film - kadang-kadang tidak selalu di sorot, tapi sangat penting untuk menyelesaikan pekerjaan!

PostgreSQL - Sub Queries

Subqueries dengan Statement SELECT

Marilah kita mulai dengan penggunaan subquery yang paling umum - dalam sebuah statement SELECT. Bayangkan Anda menjalankan sebuah toko buku, dan Anda ingin mengetahui buku mana yang dijual di atas rata-rata. Ini 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 kita menggunakan nilai ini untuk menyaring hasilnya.

Marilah kitauraikan ini:

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

Ini adalah contoh lain. Bayangkan Anda ingin menemukan semua pelanggan yang 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 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 ini adalah tabel metode subquery umum di PostgreSQL:

Metode Deskripsi Contoh
IN Memeriksa apakah nilai ada dalam 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 perfect! Cobalah menulis query Anda sendiri, eksperimen dengan berbagai skenario, dan jangan takut untuk membuat kesalahan. Itu adalah bagaimana kita belajar dan tumbuh di dunia yang menakjubkan basis data!

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

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

Credits: Image by storyset