MySQL - Subquery: Panduan untuk Pemula

Hai teman-teman, para ahli basis data masa depan! Hari ini, kita akan memulai perjalanan menarik ke dunia subquery MySQL. Jangan khawatir jika Anda masih baru dalam programming - saya akan menjadi panduan teman baik Anda, memecah konsep yang kompleks menjadi bagian kecil dan mudah dimengerti. Jadi, ambil secangkir kopi (atau teh, jika itu yang Anda suka), dan mari kita masuk ke dalam!

MySQL - SubQuery

Apa Itu Subquery?

Sebelum kita mulai, mari pahami apa itu subquery. Bayangkan Anda sedang merencanakan pesta dan butuh membuat daftar teman yang suka kue coklat. Anda pertama-tama membuat daftar semua teman Anda, lalu mengelilingi mereka yang suka kue coklat. Dalam istilah SQL, daftar utama adalah query utama Anda, dan proses mengelilingi penggemar kue coklat adalah subquery Anda. Itu adalah query dalam query - bagus, kan?

Sekarang, mari kita jelajahi bagaimana kita dapat menggunakan subquery dalam berbagai pernyataan MySQL.

Subquery dengan Pernyataan SELECT

Pernyataan SELECT seperti sebuah kaca pembesar untuk basis data Anda. Itu membantu Anda menemukan dan mengambil informasi tertentu. Ketika kita menambahkan subquery ke SELECT, itu seperti menambahkan kaca pembesar kedua untuk melihat lebih dekat!

Imaginilah kita memiliki dua tabel: employees dan departments. Kita ingin menemukan semua karyawan yang bekerja di departemen 'IT'.

SELECT first_name, last_name
FROM employees
WHERE department_id = (
SELECT department_id
FROM departments
WHERE department_name = 'IT'
);

Dalam contoh ini, subquery (SELECT department_id FROM departments WHERE department_name = 'IT') berjalan pertama. Itu menemukan department_id departemen IT. Kemudian, query utama menggunakan id ini untuk menemukan semua karyawan di departemen itu.

Pikirkan seperti ini: Anda pertama kali bertanya, "Apa ID departemen IT?", lalu gunakan jawabannya untuk bertanya, "Siapa yang bekerja di departemen dengan ID ini?"

Subquery dengan Pernyataan INSERT

Sekarang, mari bicarakan penggunaan subquery dengan INSERT. Ini seperti menyalin informasi dari satu daftar ke daftar lain, tapi hanya bagian tertentu.

Imaginilah kita memiliki tabel top_performers dan ingin mengisi itu dengan karyawan yang telah mencapai penjualan lebih dari $100.000.

INSERT INTO top_performers (employee_id, employee_name, sales)
SELECT employee_id, CONCAT(first_name, ' ', last_name), total_sales
FROM employees
WHERE total_sales > 100000;

Di sini, subquery adalah sebenarnya seluruh pernyataan SELECT. Itu menemukan semua karyawan dengan penjualan lebih dari $100.000, dan pernyataan INSERT menambahkannya ke tabel top_performers.

Itu seperti mengatakan, "Temukan semua pegawai bintang penjualan dan letakkan mereka di daftar VIP kami!"

Subquery dengan Operator Perbandingan

Subquery juga dapat digunakan dengan operator perbandingan seperti >, <, =, dll. Ini sangat berguna ketika Anda ingin membandingkan nilai dengan hasil dari query lain.

mari menemukan semua karyawan yang mendapatkan lebih banyak daripada gaji rata-rata:

SELECT first_name, last_name, salary
FROM employees
WHERE salary > (
SELECT AVG(salary)
FROM employees
);

Subquery (SELECT AVG(salary) FROM employees) menghitung gaji rata-rata. Query utama kemudian membandingkan gaji setiap karyawan dengan rata-rata ini.

Itu seperti bertanya, "Siapa saja yang mendapatkan gaji tinggi di perusahaan kami?"

Subquery dengan Operator IN atau NOT-IN

Operator IN dan NOT IN sangat berguna ketika Anda ingin memeriksa apakah nilai cocok dengan nilai manapun dalam daftar. Dengan subquery, daftar itu dapat dibuat secara dinamis!

mari menemukan semua karyawan yang juga manajer:

SELECT first_name, last_name
FROM employees
WHERE employee_id IN (
SELECT DISTINCT manager_id
FROM employees
WHERE manager_id IS NOT NULL
);

Di sini, subquery membuat daftar semua ID manajer. Query utama kemudian menemukan semua karyawan yang IDnya ada dalam daftar ini.

Pikirkan itu seperti bertanya, "Siapa saja yang ada di daftar manajer?"

Subquery Menggunakan Program Klien

Meskipun sebagian besar contoh kita adalah langsung di SQL, Anda juga dapat menggunakan subquery dalam program klien. Ini sangat berguna ketika Anda memerlukan operasi kompleks atau ketika subquery bergantung pada input pengguna.

Ini adalah contoh sederhana Python menggunakan pustaka mysql-connector:

import mysql.connector

# Terhubung ke basis data
cnx = mysql.connector.connect(user='your_username', password='your_password',
host='127.0.0.1', database='your_database')
cursor = cnx.cursor()

# Ambil input pengguna
department = input("Masukkan nama departemen: ")

# Buat dan eksekusi query
query = """
SELECT first_name, last_name
FROM employees
WHERE department_id = (
SELECT department_id
FROM departments
WHERE department_name = %s
)
"""
cursor.execute(query, (department,))

# Ambil dan cetak hasil
for (first_name, last_name) in cursor:
print(f"{first_name} {last_name}")

# Tutup koneksi
cursor.close()
cnx.close()

Skrip ini meminta pengguna memasukkan nama departemen, lalu menemukan semua karyawan di departemen itu. Itu seperti memiliki asisten robot yang ramah yang dapat secara cepat mencari informasi bagi Anda!

Kesimpulan

Selamat! Anda baru saja mengambil langkah pertama ke dunia yang kuat dari subquery MySQL. Ingat, latihan membuat sempurna, jadi jangan khawatir untuk mencoba konsep ini.

Berikut adalah tabel rujukan cepat dari jenis subquery yang kita bahas:

Tipe Subquery Deskripsi Contoh Penggunaan
SELECT Query dalam SELECT statement Menemukan data yang berkaitan di antara tabel
INSERT Menggunakan SELECT sebagai subquery dalam INSERT Menyalin data yang difilter ke tabel lain
Perbandingan Menggunakan hasil subquery untuk perbandingan Membandingkan dengan hasil agregat
IN/NOT IN Memeriksa keanggotaan dalam hasil subquery Menemukan cocok di antara data berkaitan
Program Klien Menggunakan subquery dalam kode aplikasi Query dinamis berdasarkan input pengguna

Ingat, subquery adalah senjata rahasia di senjata SQL Anda. Mereka mungkin tampak sulit pada awalnya, tapi dengan latihan, Anda akan menjadikan mereka seperti seorang pro dalam waktu singkat!

Selamat mencari, para master data masa depan!

Credits: Image by storyset