SQL - Sub Queries
Hai, penggemar SQL yang bersemangat! Saya sangat senang menjadi panduan Anda dalam perjalanan yang menarik ke dunia subquery SQL. Sebagai seseorang yang telah mengajar ilmu komputer selama bertahun-tahun, saya bisa katakan bahwa subquery adalah seperti saus rahasia yang dapat membuat keterampilan SQL Anda berkembang dari baik menjadi sangat baik. Jadi, mari kita masuk dan membongkar misteri subquery bersama!
Subquery SQL
Apa Itu Subquery?
Imaginasi Anda membuat sandwich. Rotinya adalah query utama Anda, tapi apa 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 meminta pertanyaan di dalam pertanyaan, memungkinkan Anda melakukan operasi yang kompleks yang mungkin tidak bisa dilakukan 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 luar untuk menemukan semua karyawan di departemen itu.
Aturan yang Harus Dikikuti
Sebelum kita masuk lebih dalam, mari kitaulas beberapa aturan penting untuk menggunakan subquery:
- Subquery harus ditutup dalam kurung.
- Subquery hanya bisa memiliki satu kolom dalam klausa SELECT, kecuali jika ada beberapa kolom dalam query utama untuk perbandingan.
- Perintah ORDER BY tidak dapat digunakan dalam subquery, meskipun query utama dapat menggunakan ORDER BY.
- Subquery yang mengembalikan lebih dari satu baris hanya dapat digunakan dengan operator nilai ganda seperti operator IN.
Berikut adalah tabel praktis yang menyummarisakan aturan ini:
Aturan | Deskripsi |
---|---|
Kurung | Subquery harus ditutup dalam kurung |
Satu Kolom | Subquery SELECT biasanya mengembalikan hanya satu kolom |
Tanpa ORDER BY | ORDER BY tidak dapat digunakan dalam subquery |
Beberapa Baris | Gunakan operator nilai ganda untuk subquery yang mengembalikan lebih dari satu baris |
Subquery Dengan Statement SELECT
Subquery paling banyak digunakan dengan statement SELECT. Mereka bisa 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 yang lebih tinggi dari harga rata-rata semua produk. Subquery menghitung harga rata-rata, 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 gaji rata-rata seluruh 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 gaji rata-rata. Itu seperti membuat daftar VIP dari karyawan top 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 selama setahun terakhir. Subquery mencari semua pelanggan seperti itu, dan query utama menghapus pesanan mereka.
Dan begitulah, teman-teman! Kita telah melakukan perjalanan melalui negeri subquery SQL, dari konsep dasar hingga aplikasi yang lebih lanjut. Ingat, latihan membuat sempurna, jadi jangan takut untuk mencoba query ini di database Anda sendiri.
Seperti yang saya selalu katakan kepada murid-muridku, SQL adalah 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