SQL, atau Structured Query Language, adalah bahasa pemrograman untuk mengelola dan memanipulasi data dalam sistem manajemen database relasional (relational database management system/RDBMS). Ini adalah bahasa standar yang digunakan di banyak perusahaan untuk membantu bisnis mengakses data dengan lancar. Karena digunakan secara luas, biasanya kemampuan SQL dicantumkan sebagai salah satu keterampilan yang diperlukan dalam pekerjaan data science. Itulah mengapa penting untuk mempelajari SQL.
Salah satu masalah umum bagi orang-orang saat belajar SQL adalah memahami kueri, terutama ketika ditulis oleh orang lain. Kita akan bekerja sebagai tim di perusahaan dan seringkali perlu membaca dan memahami kueri SQL mereka. Jadi, kita perlu berlatih mendekonstruksi kueri SQL dan memahaminya.
Artikel ini akan menjelaskan proses step-by-step untuk membaca dan memahami kueri SQL. Bagaimana kita melakukannya? Mari kita mulai.
1. Memahami Struktur Umum Kueri SQL
Hal pertama yang perlu kita lakukan saat menghadapi kueri SQL adalah memahami maksud umum dari kueri SQL tersebut. Maksud umum tidak berarti kita sepenuhnya tahu tentang struktur kueri; ini lebih tentang alur keseluruhan.
Kita harus memahami kueri SQL standar untuk memahami kueri SQL secara umum. Kebanyakan kueri SQL dimulai dengan klausa SELECT dan diikuti dengan klausa FROM. Setelah itu, kueri biasanya diikuti oleh klausa JOIN, WHERE, GROUP BY, ORDER BY, dan HAVING.
Klausa di atas adalah standar dalam kueri SQL yang perlu kita pahami. Fungsi masing-masing klausa adalah:
SELECT: Kolom apa yang akan diambil dari tabel
FROM: Dari tabel mana data berasal
JOIN: Menggabungkan tabel dengan pengidentifikasi tertentu
WHERE: Filter data berdasarkan kondisi
GROUP BY: Mengelompokkan data berdasarkan nilai kolom dan memungkinkan fungsi agregasi untuk dilakukan
ORDER BY: Mengatur urutan hasil data berdasarkan kolom tertentu
HAVING: Kondisi filter untuk fungsi agregasi yang tidak dapat ditentukan dengan WHERE
Ini adalah klausa standar dan apa saja yang harus Anda ketahui di awal saat memahami struktur umum kueri SQL. Mari gunakan kode contoh untuk belajar lebih lanjut.
SELECT
customers.name,
purchases.product,
SUM(price) as total_price
FROM
purchases
JOIN customers ON purchases.cust_id = customers.id
WHERE
purchases.category = 'kitchen'
GROUP BY
customers.name,
purchases.product
HAVING
total_price > 10000
ORDER BY
total_price DESC;
Saat Anda melihat kueri di atas, coba identifikasi klausa standar. Klausa akan memberi Anda pemahaman tentang data apa yang dipilih (SELECT), dari mana asalnya (FROM dan JOIN), dan kondisinya (WHERE, GROUP BY, ORDER BY, dan HAVING).
Misalnya, membaca kueri di atas akan memberi Anda pemahaman berikut:
Kita mencoba mengambil tiga jenis data yang berbeda: Nama (name) dari tabel customers, Produk (product) dari tabel purchases, dan agregasi kolom harga (price) yang tidak memiliki identifikasi dari tabel mana dengan alias total_price (Informasi dari klausa SELECT).
Keseluruhan data berasal dari tabel purchases dan customers yang digabungkan menggunakan kolom cust_id dari purchases dan kolom id dari tabel customers (Informasi dari klausa FROM dan JOIN).
Kita hanya akan memilih data dengan nilai kolom category di tabel purchases dengan nilai ‘kitchen’ (Informasi dari klausa WHERE).
Mengelompokkan untuk fungsi agregasi dengan kolom name dan product yang berasal dari tabel masing-masing (Informasi dari klausa GROUP BY).
Lakukan filter dari hasil fungsi agregasi sum di mana total_price lebih dari 10000 (informasi dari klausa HAVING).
Mengatur urutan data secara menurun (descending) menurut total_price (informasi dari klausa ORDER BY).
Itulah struktur umum kueri SQL yang perlu Anda ketahui dan identifikasi. Dari sana, kita bisa menjelajahi lebih lanjut dari kueri yang lebih kompleks. Mari lanjut ke langkah berikutnya.
2. Memahami Final Select
Ada kalanya Anda akan menemukan kueri yang kompleks di mana ada banyak klausa SELECT dalam satu kueri. Dalam hal ini, kita harus memahami hasil akhir dari kueri atau SELECT terakhir (pertama) yang Anda lihat dalam kueri. Kuncinya adalah mengetahui apa yang ingin dicapai dari output kueri tersebut.
Mari gunakan kode yang lebih kompleks seperti di bawah ini.
WITH customerspending AS (
SELECT
customers.id,
SUM(purchases.price) as total_spending
FROM
purchases
JOIN customers ON purchases.cust_id = customers.id
GROUP BY
customers.id
)
SELECT
c.name,
pd.product,
pd.total_product_price,
cs.total_spending
FROM
(
SELECT
purchases.cust_id,
purchases.product,
SUM(purchases.price) as total_product_price
FROM
purchases
WHERE
purchases.category = 'kitchen'
GROUP BY
purchases.cust_id,
purchases.product
HAVING
SUM(purchases.price) > 10000
) AS pd
JOIN customers c ON pd.cust_id = c.id
JOIN customerspending cs ON c.id = cs.id
ORDER BY
pd.total_product_price DESC;
Sekarang kueri ini tampak lebih kompleks dan lebih panjang, tetapi fokus awal harus pada SELECT terakhir, yang tampaknya mencoba menghasilkan total pengeluaran pelanggan (total_product_price) dan riwayat pembelian (total_spending). Cobalah untuk menilai apa yang ingin dicapai dari hasil akhirnya dan uraikan dari sana.
3. Memahami Kondisi Klausa Akhir
Kita telah memiliki wawasan tentang hasil yang seharusnya diperoleh dari kueri. Bagian selanjutnya adalah melihat apa kondisi untuk SELECT terakhir. Klausa kondisi, termasuk WHERE, GROUP BY, ORDER BY, dan HAVING adalah yang mengontrol keseluruhan hasil data.
Cobalah baca dan pahami kondisi dari kueri, dan kita akan lebih memahami hasil akhir dari kueri. Misalnya, dalam kueri SQL sebelumnya, kondisi akhir hanya ORDER BY. Ini berarti hasil akhirnya akan diurutkan berdasarkan total harga produk secara descending.
Mengetahui kondisi akhir akan membantu Anda memahami sebagian besar kueri dan maksud keseluruhan kueri.
4. Memahami Join Akhir
Terakhir, kita perlu memahami dari mana data berasal. Setelah kita mengetahui data yang akan dipilih dan kondisi untuk mendapatkannya, kita perlu memahami sumbernya. Klausa JOIN akhir akan memberi kita pemahaman tentang bagaimana tabel berinteraksi dan alur datanya.
Misalnya, kueri kompleks sebelumnya menunjukkan bahwa kita melakukan JOIN dua kali. Ini berarti kita menggunakan setidaknya tiga sumber data untuk hasil akhir. Informasi ini akan penting di langkah-langkah selanjutnya untuk memahami lebih lanjut darimana setiap sumber data berasal, terutama ketika sumber data berasal dari subkueri.
5. Membaca dari Urutan Terbalik dan Mengulanginya
Setelah memahami bagaimana seharusnya hasil akhir dan dari mana asalnya, kita perlu melihat lebih dekat pada detailnya. Dari sini, kita akan mundur ke setiap subkueri dan memahami mengapa mereka terstruktur seperti itu.
Namun, kita tidak mencoba melihatnya dalam struktur top-down. Sebaliknya, kita harus mencoba melihat subkueri yang lebih dekat dengan hasil akhir, dan kita bergerak ke yang paling jauh dari hasil akhir. Dari contoh kode di atas, kita harus mencoba memahami kode ini terlebih dahulu:
SELECT
purchases.cust_id,
purchases.product,
SUM(purchases.price) as total_product_price
FROM
purchases
WHERE
purchases.category = 'kitchen'
GROUP BY
purchases.cust_id,
purchases.product
HAVING
SUM(purchases.price) > 10000
Kemudian, kita bergerak ke kode yang paling jauh yaitu ini:
WITH customerspending AS (
SELECT
customers.id,
SUM(purchases.price) as total_spending
FROM
purchases
JOIN customers ON purchases.cust_id = customers.id
GROUP BY
customers.id
)
Kita dapat melacak proses pemikiran penulis dengan jelas saat kita menguraikan setiap subkueri dari yang lebih dekat ke hasil hingga yang paling jauh.
Coba ulangi proses di atas jika Anda memerlukan bantuan untuk memahami setiap subkueri. Dengan sedikit latihan, Anda akan memiliki pengalaman yang lebih baik dalam membaca dan memahami kueri.
Kesimpulan
Membaca dan memahami kueri SQL adalah keterampilan yang harus dimiliki oleh semua orang di era modern ini, karena setiap perusahaan berurusan dengan kueri SQL. Dengan menggunakan panduan step-by-step berikut, Anda akan lebih mudah memahami kueri SQL yang kompleks. Langkah-langkahnya meliputi:
Memahami Struktur Umum Kueri SQL
Memahami Final Select
Memahami Kondisi Klausa Akhir
Memahami Join Akhir
Membaca dari Urutan Terbalik dan Mengulanginya
Comentários