FlowingDev

Penjelasan SQL: Bahasa yang Menanyai Datamu Pertanyaan-pertanyaan Sulit

SQL adalah bahasa universal untuk 'berbicara' dengan database. Pelajari cara SQL menyusun query untuk meminta data yang kamu butuhkan, dari pencarian sederhana hingga join yang kompleks.

Coba tool-nya: SQL Playground

Dalam satu kalimat

SQL (Structured Query Language) adalah bahasa pemrograman universal untuk mengajukan pertanyaan (query) ke database terstruktur dan mendapatkan jawaban dalam format tabel yang rapi.

Masalah yang dipecahkannya

Di zaman purba komputasi, setiap database itu ibarat kerajaan kecil dengan dialeknya sendiri yang aneh. Kalau kamu mau mengambil data dari Sistem A, kamu harus belajar mantra-mantra khususnya. Kalau perusahaanmu kemudian membeli Sistem B, kamu harus membuang semua pengetahuan itu dan mulai dari awal lagi. Ini tidak efisien, kacau, dan bikin para developer pengen banting meja (mereka yang sangat besar dan berwarna krem).

Pada awal tahun 1970-an, beberapa peneliti brilian di IBM, Donald Chamberlin dan Raymond Boyce, sedang mengerjakan model database jenis baru yang diusulkan oleh Edgar F. Codd yang disebut "model relasional." Ide besarnya adalah menyimpan data dalam tabel-tabel sederhana (atau "relasi") dan mendefinisikan hubungan di antara mereka. Untuk 'berbicara' dengan database jenis baru ini, mereka menciptakan sebuah bahasa yang mereka sebut SEQUEL (Structured English Query Language).

Namanya kemudian disingkat menjadi SQL, tetapi tujuannya tetap sama: menciptakan bahasa standar yang cukup mudah dibaca manusia untuk mengelola dan mengambil data. Hasilnya sukses besar. Tiba-tiba, kamu bisa menulis sebuah query, dan dengan sedikit penyesuaian, query itu akan berfungsi di database dari IBM, Oracle, atau perusahaan baru lainnya.

SQL memecahkan masalah "Menara Babel" untuk database. Ia menciptakan sebuah lingua franca yang memisahkan apa (data yang kamu inginkan) dari bagaimana (detail-detail teknis tingkat rendah tentang cara mesin database menemukan dan mengambilnya). Ini memungkinkan developer dan analis fokus pada logika pertanyaan mereka, bukan pada mekanika proprietary dari sistem penyimpanan.

Cara kerjanya di balik layar

Pada intinya, SQL adalah bahasa deklaratif. Kamu tidak memberitahu database bagaimana cara mendapatkan data langkah demi langkah; kamu hanya mendeklarasikan data apa yang kamu inginkan. Query optimizer database kemudian akan mencari cara paling efisien untuk menjalankan permintaanmu. Ini seperti memesan pizza: kamu hanya bilang "satu pepperoni ukuran besar," kamu tidak memberikan petunjuk arah belokan demi belokan ke pizzeria.

Sebuah "playground" SQL atau tool berbasis browser membawa ini selangkah lebih maju dengan menjalankan mesin database lengkap langsung di dalam tab browsermu, yang merupakan sebuah keajaiban web modern yang keren.

Klausa Inti: SELECT, FROM, WHERE

Tiga serangkai suci dari query SQL. Hampir setiap query pengambilan data yang kamu tulis akan memiliki setidaknya SELECT dan FROM.

  • SELECT: Menentukan kolom (field) yang ingin kamu dapatkan.
  • FROM: Menentukan tabel tempat kamu mengambilnya.
  • WHERE: Menyaring baris, jadi kamu hanya mendapatkan baris yang cocok dengan kondisi tertentu.

Bayangkan sebuah tabel employees sederhana:

id name department salary
1 Alice Engineering 90000
2 Bob Marketing 65000
3 Charlie Engineering 110000

Untuk menemukan nama semua karyawan di departemen Engineering, kamu akan menulis:

SELECT name, salary
FROM employees
WHERE department = 'Engineering';

Mesin database melihat ini, menemukan tabel employees, memindainya untuk baris di mana kolom department adalah 'Engineering', dan kemudian hanya mengambil kolom name dan salary untuk baris-baris tersebut, dan mengembalikan:

name salary
Alice 90000
Charlie 110000

Menyambungkan Titik-titik: Kekuatan JOIN

Di sinilah bagian "relasional" dari "database relasional" bersinar. Data jarang sekali berada dalam satu tabel raksasa. Biasanya, data dipecah menjadi tabel-tabel logis untuk menghindari duplikasi (konsep yang disebut normalisasi). JOIN adalah cara kamu menyatukannya kembali untuk sebuah query.

Mari kita tambahkan tabel projects:

id project_name lead_employee_id
101 Project Phoenix 3
102 Project Chimera 1

lead_employee_id di sini "menunjuk" ke id di tabel employees. Untuk mendapatkan daftar proyek dan nama pimpinannya, kamu tidak bisa hanya melakukan query pada satu tabel. Kamu perlu melakukan JOIN:

SELECT
  projects.project_name,
  employees.name AS lead_name
FROM projects
INNER JOIN employees ON projects.lead_employee_id = employees.id;

Klausa ON adalah kuncinya—ini adalah instruksi yang memberitahu database bagaimana kedua tabel itu berhubungan. Mesin kemudian membuat tampilan gabungan sementara dari data di mana ID-nya cocok, dan mengambil nama proyek dan nama karyawan darinya.

Agregasi dan Pengelompokan: GROUP BY dan Fungsi Agregat

Terkadang kamu tidak menginginkan baris individual; kamu menginginkan ringkasan. Di sinilah fungsi agregat seperti COUNT(), SUM(), AVG(), MAX(), dan MIN() berperan. Ketika dikombinasikan dengan GROUP BY, mereka menjadi kekuatan super untuk analisis data.

Ingin tahu berapa banyak karyawan di setiap departemen?

SELECT
  department,
  COUNT(id) AS number_of_employees
FROM employees
GROUP BY department;

Database pertama-tama secara logis mengelompokkan baris berdasarkan department. Kemudian, di dalam setiap grup, ia menerapkan fungsi COUNT(id). Hasilnya adalah tabel ringkasan:

department number_of_employees
Engineering 2
Marketing 1

Database di Browser-mu: SQLite dan WebAssembly

Jadi, bagaimana ini bekerja di tool browser tanpa server? Rahasianya adalah WebAssembly (Wasm). SQLite, salah satu mesin database paling populer di dunia, ditulis dalam bahasa pemrograman C. Dengan menggunakan compiler khusus (seperti Emscripten), kode C tersebut dapat dikompilasi bukan menjadi file executable tradisional, tetapi menjadi modul Wasm.

Browser-mu dapat memuat dan menjalankan modul Wasm ini dalam sandbox yang aman. Hasilnya adalah kamu memiliki mesin database SQL yang lengkap, berbasis file, dan transaksional yang berjalan secara lokal. Saat kamu mengetik query, itu tidak dikirim melalui jaringan. Itu diserahkan langsung ke mesin SQLite di dalam memori, yang memprosesnya dan mengembalikan hasilnya. Cepat, pribadi, dan tidak memerlukan penyiapan sama sekali—lingkungan yang sempurna untuk belajar, menguji, dan eksplorasi data cepat.

Kisah dari dunia nyata

Kasus Mock API "Cepat dan Praktis"

Seorang developer frontend sedang membangun komponen grid data yang kompleks. API backend belum siap, tapi dia sudah punya skema JSON untuk datanya. Dia perlu menguji pengurutan, penyaringan, dan paginasi. Alih-alih menulis banyak logika JavaScript tiruan, dia menempelkan data tersebut ke dalam tool SQL berbasis browser, membuat tabel products secara instan. Dia kemudian bisa menulis query SQL sederhana seperti SELECT * FROM products WHERE category = 'Gadgets' ORDER BY price DESC LIMIT 20 OFFSET 40. Ini meniru panggilan API asli dengan sempurna, memungkinkannya membangun dan menguji seluruh UI sebelum backend-nya selesai di-deploy.

Pelajaran: Playground SQL di browser adalah alat yang luar biasa bagi developer frontend untuk membuat prototipe dengan sumber data yang realistis tanpa ketergantungan pada backend.

Senjata Rahasia si Analis

Seorang analis bisnis diberi tiga file CSV terpisah: satu untuk pelanggan, satu untuk pesanan, dan satu untuk produk. Bosnya ingin tahu "pelanggan mana di California yang paling banyak membeli 'SuperWidget 3000s' bulan lalu." Melakukan ini di Excel akan menjadi mimpi buruk VLOOKUP, pivot table, dan sheet sementara. Sebaliknya, analis itu memuat ketiga CSV ke dalam playground SQL, membuat tiga tabel. Dengan satu query yang dibuat dengan baik yang menggabungkan ketiga tabel, menyaring berdasarkan negara bagian dan nama produk, dan mengelompokkan berdasarkan pelanggan, dia mendapatkan jawabannya dalam hitungan menit.

Pelajaran: SQL dirancang khusus untuk memotong, memilah, dan menggabungkan kumpulan data, mengubah berjam-jam senam spreadsheet menjadi beberapa baris kode yang ekspresif.

Si DBA Dadakan

Seorang programmer baru sedang men-debug masalah performa. Sebuah halaman di aplikasinya butuh waktu sangat lama untuk dimuat. Dia melihat kodenya dan menemukan bahwa kode itu mengambil daftar semua pengguna, lalu melakukan iterasi satu per satu untuk membuat panggilan database lain untuk setiap jumlah postingan pengguna. Ini disebut "masalah query N+1." Senior dev yang membantunya tidak hanya memperbaikinya; mereka membuka playground SQL, membuat dua tabel sederhana (users, posts), dan menunjukkan kepadanya bagaimana satu query GROUP BY bisa mendapatkan semua hitungan dalam sekali jalan. Lampu di kepalanya pun menyala.

Pelajaran: Memahami cara SQL berpikir membantumu menulis kode aplikasi yang lebih efisien dengan mengalihkan pekerjaan data yang kompleks ke database, yang sangat dioptimalkan untuk itu.

Kesalahan umum dan jebakan

  • SELECT * adalah teman tapi musuh. Ini bagus untuk SELECT * FROM my_table LIMIT 10 cepat untuk melihat apa saja kolomnya. Tetapi dalam kode aplikasi, ini adalah jebakan performa. Ini mengambil data yang tidak kamu perlukan, memberi lebih banyak tekanan pada database dan jaringan, dan dapat menyebabkan aplikasimu rusak jika seseorang menambah, menghapus, atau mengganti nama kolom di tabel. Selalu eksplisit tentang kolom yang kamu butuhkan.
  • Lupa WHERE pada UPDATE atau DELETE. Ini adalah ritual wajib bagi siapa pun yang bekerja dengan SQL. DELETE FROM users; tidak menghapus satu pengguna. Itu menghapus semua pengguna. Klausa WHERE adalah sabuk pengaman yang mencegahmu menghapus semua datamu. Selalu periksa ulang WHERE-mu pada setiap pernyataan modifikasi data.
  • NULL bukanlah nol atau string kosong. NULL merepresentasikan ketiadaan nilai, dan ia memiliki logika tiga nilai yang aneh. Perbandingan seperti my_column = NULL tidak akan bekerja seperti yang kamu harapkan. Kamu harus menggunakan my_column IS NULL atau my_column IS NOT NULL. Ini menjebak hampir setiap pendatang baru.
  • Tertukar antara WHERE dan HAVING. Keduanya menyaring data, tetapi pada tahap yang berbeda. WHERE menyaring baris sebelum dikelompokkan oleh GROUP BY. HAVING menyaring grup setelah grup tersebut dibuat dan diagregasi. Jika kamu ingin menyaring berdasarkan fungsi agregat (seperti COUNT(*) > 5), itu harus ada di klausa HAVING.

Mengapa ini harus kamu lirik

SQL bukan hanya untuk administrator database. Di dunia yang didorong oleh data saat ini, ini adalah keterampilan fundamental untuk berbagai macam peran:

  • Backend Developer membutuhkannya untuk membangun API dan mengelola data aplikasi.
  • Frontend Developer mendapat manfaat dari pemahamannya untuk berinteraksi dengan API secara lebih efektif dan membangun pengalaman pengguna yang lebih baik.
  • Data Scientist dan Analis hidup dan bernapas dengan SQL. Ini adalah cara utama mereka mengekstrak dan menjelajahi data mentah.
  • Product Manager dapat menggunakannya untuk menjawab pertanyaan mereka sendiri tentang perilaku pengguna tanpa harus menunggu tiket dari tim engineering.

Mengetahui SQL memberimu jalur langsung ke kebenaran aplikasi atau bisnismu. Ini adalah kekuatan super yang memungkinkanmu mengajukan pertanyaan yang tepat dan mendapatkan jawaban yang konkret. Entah kamu sedang men-debug API yang lambat, menjalankan laporan pemasaran, atau hanya ingin tahu tentang data yang sedang kamu kerjakan, SQL adalah alat yang wajib ada di kotak perkakas teknologi modern.

Pelajari lebih dalam

  • Wikipedia: SQL: Gambaran tingkat tinggi tentang sejarah, standar, dan variasinya.
  • SQLite: SQL Understood by SQLite: Dokumentasi resmi untuk dialek SQL spesifik yang digunakan oleh mesin SQLite, yang mendukung banyak tool di browser.
  • SQLBolt: Serangkaian pelajaran interaktif yang sangat bagus untuk belajar SQL dari awal.
  • PostgreSQL Tutorial: Sumber daya yang bagus untuk mempelajari dialek SQL berbasis server yang lebih kaya fitur.
  • A Relational Model of Data for Large Shared Data Banks: Makalah asli tahun 1970 oleh E. F. Codd yang memulai semuanya. Bacaan yang padat tetapi signifikan secara historis.
  • Select Star SQL: Buku interaktif yang menyenangkan dan visual yang mengajarkan SQL dengan pendekatan yang ramah.

Cara editor memahami kode

Warna berasal dari parser bahasa, bukan dari menjalankan program. CodeMirror dan Lezer mengenali token dan struktur secara lokal di browser. Saran menggabungkan kata kunci, nama lokal jika didukung, cuplikan dan referensi bawaan kecil; mengarahkan kursor ke simbol yang terdokumentasi menampilkan tanda tangannya. Saran bukan jaminan API tersedia di runtime. Diagnostik parser mendeteksi sintaks keliru jika didukung, tetapi tidak menggantikan pemeriksaan tipe atau eksekusi: sintaks valid tetap bisa gagal. Ruby dan Lua memakai mode berbasis token dengan diagnostik lebih terbatas. Tidak ada server bahasa jarak jauh; kode tetap di perangkat.

CodeMirror & Lezer: MIT.

Teori beres. Saatnya praktik — 100% di browser kamu.

Coba tool-nya: SQL Playground