Pernahkah kamu bertanya-tanya, sebenarnya apa itu query dalam SQL? Query dalam bahasa Indonesia disebut kueri. Query adalah sekumpulan instruksi khusus untuk mengekstraksi data dari database. Query sering ditemui oleh para developer dan data engineer ketika berinteraksi dengan database.
Tahukah kamu, query dalam SQL hanya dapat dieksekusi oleh database tertentu, yaitu yang memiliki karakteristik data terstruktur, berbentuk tabel, dan saling berelasi atau biasa disebut relational database management system (RDBMS). Beberapa contoh RDBMS yang populer adalah PostgreSQL, MySQL, dan SQL Server.
Query terbagi menjadi beberapa tipe menurut kegunaannya, yaitu data definition language (DDL), data manipulation language (DML), data control language (DCL), dan transaction control language (TCL).
💻 Mulai Belajar Pemrograman
Belajar pemrograman di Dicoding Academy dan mulai perjalanan Anda sebagai developer profesional.
Daftar Sekarang- DDL berfungsi untuk menciptakan struktur data yang sesuai dengan kebutuhan, seperti membuat database serta membuat dan mengubah tabel.
- DML berfungsi untuk melakukan manipulasi terhadap data yang sudah disimpan pada sebuah database atau tabel, seperti menambah, mengubah, mengambil, dan menghapus data.
- DCL berfungsi untuk membatasi akses pengguna ke dalam database atau tabel, seperti memperbolehkan seorang pengguna mengakses database atau tabel dan memblokir akses dari database atau tabel.
- TCL berfungsi untuk mengatur alur transaksi query. Transaksi bisa diibaratkan sebuah unit kerja yang menjalankan satu atau lebih query di dalamnya. Contoh hal yang dilakukan TCL adalah membuka transaksi serta menyimpan atau membatalkan perubahan dari sebuah transaksi.
Pada artikel ini, kita akan coba memahami cakupan query data manipulation language (DML) yang sangat sering digunakan. Sebenarnya, seperti apa bentuk query? Berikut adalah beberapa contohnya.
Query untuk Mengambil Data (SELECT Query)
Query untuk Menambah Data (INSERT Query)
Query untuk Mengubah Data (UPDATE Query)
Query untuk Menghapus Data (DELETE Query)
Cara Kerja Query
Secara singkat, ketika kita mengeksekusi sebuah query, sistem akan mengembalikan sekumpulan data, menambahkan, menghapus, atau mengubah data tergantung dari query yang kita tuliskan. Mari kita bedah query lebih dalam lagi!
Parser
Katakanlah kita sudah membuat query dan sudah menjalankannya. Query akan diproses oleh parser untuk kemudian dilakukan pengujian dan penerjemahan ke bahasa yang lebih dimengerti oleh database. Apa saja yang diuji oleh parser? Dari query yang diberi, parser akan menguji apakah query yang kita buat sudah benar penulisannya?
Setelah berhasil melewati pengujian penulisan, parser akan melakukan pengecekan akun dalam database. Proses ini akan mencegah akses atau pengambilan data yang tidak diinginkan oleh orang yang tidak bertanggung jawab. Kemudian, parser akan menerjemahkan query menjadi bahasa yang lebih dimengerti oleh database.
Relational Engine
Setelah query dapat dibaca oleh database, relational engine akan mengambil alih query tadi untuk menciptakan rencana pengambilan data. Relational engine memiliki beberapa aturan yang dapat mencari data dengan sangat efektif.
Relational engine akan melakukan pengecekan terhadap beberapa query serupa yang pernah dijalankan, menggunakan indeks yang terpasang pada tabel dalam database, dan beberapa proses lainnya sehingga proses pencarian berjalan dengan cepat dan efektif.
Salah satu hal yang dilakukan oleh relational engine adalah mengatur urutan eksekusi dari query yang didapat. Berikut adalah urutan eksekusi komponen SELECT Query yang dilakukan terlebih dahulu hingga terakhir dieksekusi.
Klausa “FROM”
Klausa atau perintah “FROM” akan dijalankan pertama kali untuk mendapatkan data dari tabel yang diinginkan. Contohnya adalah “… FROM users”, query ini akan mengambil semua data pada tabel “users” kemudian disimpan dalam memori atau RAM. Klausa ini wajib ada dalam setiap query yang berhubungan dengan data pada database.
Klausa “JOIN”
Apabila ada klausa “JOIN” dalam query kita, database akan menggunakan data yang telah didapat dalam proses sebelumnya, kemudian digabungkan dengan tabel yang diinginkan pada klausa ini.
Contohnya adalah “… FROM users JOIN user_categories …”, data “users” yang telah diambil pada proses sebelumnya akan digabungkan dengan data dalam tabel “user_categories”. Klausa ini tidak wajib ada dalam sebuah query.
Klausa “WHERE”
Setelah data-data dikumpulkan, klausa “WHERE” akan memilah data-data yang memenuhi kondisi yang telah diberikan. Misalnya “… WHERE users.id < 10 …“, kondisi yang diberikan adalah “ambil data yang memiliki id bernilai kurang dari 10”. Selanjutnya, users yang memiliki id lebih dari 10 tidak akan diikutsertakan. Klausa ini tidak wajib ada dalam sebuah query.
Klausa “GROUP BY”
Setelah data-data terpilah, klausa “GROUP BY” akan mengelompokkan data berdasarkan data yang dipilih. Misalnya, “… GROUP BY users.city …”, query ini akan mengelompokkan data berdasarkan nilai dalam kolom “city”. Query ini biasanya digunakan bersamaan dengan fungsi agregat. Klausa ini tidak wajib ada dalam sebuah query.
Fungsi agregat adalah sebuah fungsi yang melakukan perhitungan sekelompok nilai atau baris untuk menghasilkan sebuah nilai. Contoh fungsi agregat adalah “COUNT”, “MIN”, dan “MAX”.
Tanpa menggunakan klausa “GROUP BY”, fungsi agregat akan mengambil keseluruhan data pada tabel. Apabila kita menggunakan “GROUP BY”, fungsi agregat mengambil data mengacu pada data yang terkelompok berdasarkan kondisi “GROUP BY”.
Klausa “HAVING”
Setelah data-data dikelompokkan, klausa “HAVING” akan kembali memilah data yang sudah diproses pada tahap sebelumnya. Lalu, apa bedanya dengan klausa “WHERE”? Perbedaan dari klausa “WHERE” dan “HAVING” berada pada datanya.
Data yang digunakan oleh klausa “WHERE” adalah data sebelum dikelompokkan/diproses melalui fungsi agregat. Sementara, data yang digunakan klausa “HAVING” adalah data sesudah pengelompokkan/pemrosesan melalui fungsi agregat. Klausa ini tidak wajib ada dalam sebuah query.
Klausa “SELECT”
Setelah data-data digabungkan dan dipilah, klausa “SELECT” akan memilih data apa saja yang dikirimkan ke pengguna. Klausa “SELECT” adalah klausa yang wajib ada dalam setiap query yang berhubungan dengan data pada database.
Klausa “DISTINCT”
Klausa “DISTINCT” memiliki banyak cara penempatannya pada suatu SELECT Query. Namun, memiliki kegunaan yang sama, yaitu mengeliminasi atau menghapus duplikasi atau data yang sama antar baris. Klausa ini tidak wajib ada dalam sebuah query.
Klausa “ORDER BY”
Klausa “ORDER BY” berfungsi untuk mengurutkan data sebelum akhirnya masuk ke tahap akhir sebelum dikembalikan ke pengguna. Klausa ini tidak wajib ada dalam sebuah query.
Klausa “LIMIT … OFFSET …”
Klausa “LIMIT” bertugas untuk membatasi jumlah pengambilan data. Misalnya. “… LIMIT 10” maka query akan mengambil 10 baris saja. Sementara, klausa “OFFSET” bertugas untuk mengabaikan beberapa baris pertama. Contohnya, “… OFFSET 100” artinya abaikan 100 baris pertama.
Storage Engine
Storage engine adalah jembatan terakhir dengan data pada perangkat penyimpanan. Storage engine akan menerima perintah dari relational engine kemudian mengambil data pada perangkat penyimpanan.
Ternyata perjalanan query tidak semudah yang dilakukan. Tentu, masih banyak hal yang perlu dipelajari untuk benar-benar memahami cara kerja sebuah database, seperti indexing, heap, dan page. Semoga artikel ini dapat menambah wawasanmu sebagai developer atau data engineer. Jika kamu menemukan kesalahan dalam artikel ini, sampaikan di kolom komentar, ya!
Terima kasih, sampai jumpa pada artikel selanjutnya~