SQL - Subquery

Hai, para penggemar SQL yang bersemangat! Saya sangat senang menjadi panduan Anda dalam perjalanan menarik ini ke dunia subquery SQL. Sebagai seseorang yang telah mengajar ilmu komputer selama bertahun-tahun, saya bisa katakan bahwa subquery seperti saus rahasia yang dapat membawa keterampilan SQL Anda dari baik ke yang bagus. Jadi, mari kita masuk dan membongkar misteri subquery bersama!

SQL - Sub Queries

Subquery SQL

Apa Itu Subquery?

Bayangkan Anda membuat sandwich. Roti adalah query utama Anda, tapi yang membuatnya benar-benar lezat adalah isi di dalamnya - itu adalah subquery Anda! Dalam istilah SQL, subquery adalah query yang disembunyikan di dalam query lain. Itu seperti menanyakan pertanyaan dalam pertanyaan, memungkinkan Anda melakukan operasi kompleks yang mungkin tidak dimungkinkan dengan query tunggal.

mari kita lihat contoh sederhana:

SELECT employee_name
FROM employees
WHERE department_id = (SELECT department_id FROM departments WHERE department_name = 'Marketing');

Dalam query ini, bagian di dalam kurung adalah subquery kita. Itu mencari department_id untuk departemen Marketing, yang kemudian digunakan oleh query eksternal untuk menemukan semua karyawan di departemen itu.

Aturan yang Harus Dikikuti

Sebelum kita masuk lebih dalam, mari kitaulas beberapa aturan penting untuk menggunakan subquery:

  1. Subquery harus disembungkus dalam kurung.
  2. Subquery hanya dapat memiliki satu kolom dalam klausa SELECT, kecuali jika terdapat banyak kolom dalam query utama untuk perbandingan.
  3. Perintah ORDER BY tidak dapat digunakan dalam subquery, meskipun query utama dapat menggunakan ORDER BY.
  4. Subquery yang mengembalikan lebih dari satu baris hanya dapat digunakan dengan operator nilai ganda seperti operator IN.

Berikut adalah tabel ringkasan yang menjelaskan aturan ini:

Aturan Deskripsi
Kurung Subquery harus disembungkus dalam kurung
Satu Kolom Subquery SELECT biasanya mengembalikan satu kolom
Tanpa ORDER BY ORDER BY tidak dapat digunakan dalam subquery
Baris Ganda Gunakan operator nilai ganda untuk subquery yang mengembalikan lebih dari satu baris

Subquery Dengan Statement SELECT

Subquery biasanya digunakan dengan statement SELECT. Mereka dapat sangat kuat untuk mengambil data berdasarkan kondisi dinamis. mari kita lihat contoh yang lebih kompleks:

SELECT product_name, price
FROM products
WHERE price > (SELECT AVG(price) FROM products);

Query ini memilih semua produk dengan harga lebih tinggi dari rata-rata harga semua produk. Subquery menghitung rata-rata harga, dan query utama menggunakan hasil ini untuk menyaring produk.

Berikut adalah contoh lain yang menggunakan subquery dalam klausa SELECT:

SELECT
employee_name,
salary,
(SELECT AVG(salary) FROM employees) as avg_salary
FROM employees;

Query ini tidak hanya mengambil nama dan gaji setiap karyawan, tetapi juga termasuk rata-rata gaji semua karyawan di setiap baris. Itu seperti memiliki laporan mini untuk setiap karyawan!

Subquery Dengan Statement INSERT

Subquery juga dapat digunakan dengan statement INSERT untuk mengisi tabel dengan data dari tabel lain. mari kita lihat contoh:

INSERT INTO high_salary_employees (employee_id, employee_name, salary)
SELECT employee_id, employee_name, salary
FROM employees
WHERE salary > (SELECT AVG(salary) * 1.5 FROM employees);

Query ini memasukkan ke dalam tabel high_salary_employees semua karyawan yang gajinya lebih dari 1,5 kali rata-rata gaji. Itu seperti membuat daftar VIP dari karyawan terbaik Anda!

Subquery Dengan Statement UPDATE

Subquery dapat membuat statement UPDATE Anda menjadi lebih kuat. mari kita lihat contoh:

UPDATE products
SET price = price * 1.1
WHERE category_id = (SELECT category_id FROM categories WHERE category_name = 'Electronics');

Query ini menambahkan harga semua produk di kategori 'Electronics' sebesar 10%. Subquery mencari category_id untuk 'Electronics', yang kemudian digunakan oleh query utama untuk memperbarui produk yang benar.

Subquery Dengan Statement DELETE

Akhirnya, mari kita lihat bagaimana subquery dapat digunakan dengan statement DELETE:

DELETE FROM orders
WHERE customer_id IN (
SELECT customer_id
FROM customers
WHERE last_order_date < DATE_SUB(CURDATE(), INTERVAL 1 YEAR)
);

Query ini menghapus semua pesanan dari pelanggan yang belum memesan dalam setahun terakhir. Subquery mencari semua pelanggan seperti itu, dan query utama menghapus pesanan mereka.

Dan itu adalah dia, teman-teman! Kita telah melakukan perjalanan melalui negeri subquery SQL, dari konsep dasar ke aplikasi yang lebih lanjut. Ingat, latihan membuat sempurna, jadi jangan khawatir untuk mencoba query ini di database Anda sendiri.

Seperti yang saya selalu katakan kepada murid-muridku, SQL seperti pisau Swiss Army - dan subquery adalah bilah tersembunyi yang dapat membawa Anda keluar dari situasi yang sulit. Jadi terus jelajahi, terus query, dan yang paling penting, terus belajar!

Credits: Image by storyset