Lewati ke konten utama

Urutan Eksekusi SQL: Memahami Cara Query Dijalankan

Pahami urutan eksekusi SQL dan bagaimana hal itu berbeda dari urutan penulisan. Tulis query yang akurat dan teroptimasi untuk kinerja yang lebih baik serta hindari kesalahan umum dalam desain query.
Diperbarui 5 Jun 2026  · 5 mnt baca

Saat menulis query SQL, kita biasanya mengikuti urutan tertentu. (SQL dikenal ditulis dari dalam ke luar.) Namun, mesin SQL mengikuti urutan eksekusi spesifik saat mengompilasi query, yang berbeda dari urutan penulisan yang umum. Memahami urutan eksekusi SQL penting untuk menguasai optimisasi query, meningkatkan akurasi dan kinerja query, serta men-debug masalah kompleks, seperti yang akan Anda lihat.

Saat kita mulai, saya merekomendasikan kursus Introduction to SQL DataCamp dan jalur keterampilan SQL Fundamentals untuk mempelajari dasar-dasar SQL dan cara mengekstrak data menggunakan query. SQL Basics Cheat Sheet akan menjadi panduan yang membantu untuk fungsi SQL umum dalam memfilter dan mengagregasi data.

Apa Itu Urutan Eksekusi SQL?

Urutan eksekusi SQL mengacu pada urutan penilaian berbagai klausa dalam query. Ini penting dipahami karena urutan eksekusi biasanya berbeda dari cara kita menulis query SQL. Mengambil contoh paling sederhana, Anda mungkin mengira bahwa pada kasus SELECT * FROM database, SELECT dievaluasi terlebih dahulu, tetapi sebenarnya urutan eksekusi dimulai dengan klausa FROM.

Berikut adalah urutan eksekusi SQL. Pada bagian berikutnya, kita akan membahas langkah-langkahnya secara rinci. 

  • FROM/JOIN: Menentukan tabel tempat mengambil data.
  • WHERE: Memfilter baris yang memenuhi kondisi sebelum pengelompokan.
  • GROUP BY: Mengelompokkan baris yang berbagi suatu properti.
  • HAVING: Memfilter grup berdasarkan kondisi, diterapkan setelah pengelompokan.
  • SELECT: Menentukan kolom yang akan diambil atau dihitung.
  • DISTINCT: Menghapus baris duplikat dari himpunan hasil.
  • ORDER BY: Mengurutkan himpunan hasil berdasarkan kolom tertentu.
  • LIMIT: Menentukan jumlah maksimum baris yang dikembalikan.
  • OFFSET: Menentukan berapa banyak baris yang dilewati sebelum mulai mengembalikan baris.

Pada query berikut, saya menambahkan komentar untuk menunjukkan mana yang dievaluasi terlebih dahulu. 

-- #6+7   SELECT DISTINCT department_id                                 
-- #1     FROM employees                                                
-- #2     JOIN orders ON customers.customer_id = orders.customer_id     
-- #3     WHERE salary > 3000                                          
-- #4     GROUP BY department 
-- #5     HAVING AVG(salary) > 5000 
-- #8     ORDER BY department 
-- #9     LIMIT 10 OFFSET 5 
-- #10    OFFSET 5 ROWS FETCH NEXT 10 ROWS ONLY; 

Saya juga membuat akrostik yang mungkin membantu: For Work Goals and Hurdles Search DataCamp's Organized Learning Opportunities.

Tahapan Eksekusi Query SQL

Meskipun sebagian besar query SQL yang kita tulis dimulai dengan pernyataan SELECT, urutan eksekusi logis dimulai dengan klausa FROM. Di sini, saya akan menulis query untuk menunjukkan urutan eksekusi query. Namun, perlu diingat bahwa query berikut tidak lengkap dan tidak akan terkompilasi.

Klausa FROM

Query SQL memulai proses eksekusi dengan klausa FROM. Ini biasanya tahap pertama karena basis data mengidentifikasi sumber data/tabel. Ketika melibatkan banyak tabel, query SQL juga akan mengevaluasi kondisi JOIN untuk menggabungkan tabel yang ditentukan sebagai sumber data.

Query tidak lengkap di bawah ini terlebih dahulu akan memilih data dari tabel customers menggunakan klausa FROM dan tabel orders menggunakan klausa JOIN.

FROM customers
JOIN orders ON customers.customer_id = orders.customer_id;

Klausa WHERE

Klausa WHERE dijalankan setelah klausa FROM dan JOIN untuk memfilter baris berdasarkan kondisi tertentu. Penting dicatat bahwa kolom yang didefinisikan dengan alias dalam klausa SELECT tidak dapat dirujuk langsung di klausa WHERE karena klausa ini diproses sebelum SELECT

Query di bawah ini menggunakan klausa WHERE untuk memfilter catatan karyawan dengan bonus lebih besar dari 5000.

FROM employees
JOIN departments ON employees.employee_id = departments.department_id
WHERE salary * 0.1 > 5000;

Klausa GROUP BY

Setelah memfilter baris, SQL mengeksekusi klausa GROUP BY untuk mengelompokkan hasil berdasarkan kolom tertentu. Langkah ini biasanya digunakan dengan fungsi agregat seperti COUNT(), SUM(), dan AVG() untuk melakukan perhitungan pada kolom yang ditentukan.

Query di bawah ini pertama-tama menyaring karyawan dengan salary lebih dari 3.000, lalu mengelompokkannya berdasarkan department dan menghitung rata-rata gaji untuk setiap grup.

FROM employees e
JOIN departments d ON e.employee_id = d.department_id
WHERE e.salary > 3000
GROUP BY e.name, d.department_name;

Klausa HAVING

Klausa HAVING mirip dengan klausa WHERE tetapi digunakan untuk memfilter data yang sudah dikelompokkan setelah operasi GROUP BY. Pada query di bawah, SQL mengelompokkan employees berdasarkan department, menghitung rata-rata gaji tiap grup, lalu menyaring grup dengan rata-rata gaji kurang dari atau sama dengan 5.000

FROM employees
JOIN departments ON employees.employee_id = departments.department_id
WHERE salary > 3000
GROUP BY department_name
HAVING AVG(salary) > 5000;

Klausa SELECT

Klausa SELECT adalah tempat SQL menentukan kolom atau ekspresi yang akan dikembalikan setelah menjalankan langkah-langkah sebelumnya. Anda dapat menerapkan operasi aritmetika, pemberian alias, dan fungsi agregat dalam klausa SELECT.

Query berikut menggunakan klausa SELECT untuk mengambil name dan bonus yang dihitung sebagai salary * 0.1 dari tabel employees.

SELECT name, salary * 0.1 AS bonus
FROM employees
JOIN orders ON customers.customer_id = orders.customer_id
WHERE salary > 3000
GROUP BY name
HAVING AVG(salary) > 5000;

Klausa DISTINCT

Klausa DISTINCT dievaluasi setelah klausa SELECT dalam sebuah query. Klausa DISTINCT penting untuk menghapus catatan duplikat dari tabel karena mengembalikan baris unik. Query di bawah ini mengembalikan setiap department_id unik, menyaring duplikat.

SELECT DISTINCT department_id
FROM employees
JOIN orders ON customers.customer_id = orders.customer_id
WHERE salary > 3000
GROUP BY department
HAVING AVG(salary) > 5000;

Klausa ORDER BY

Klausa ORDER BY mengurutkan himpunan hasil berdasarkan kolom atau ekspresi tertentu. Berbeda dengan klausa WHERE, klausa ORDER BY dapat menggunakan alias kolom yang didefinisikan dalam pernyataan SELECT.

Query di bawah ini mengurutkan kolom bonus secara menurun. Perhatikan bahwa bonus didefinisikan dalam pernyataan SELECT sebagai alias dari sebuah ekspresi.

SELECT DISTINCT department_id
FROM employees
JOIN orders ON customers.customer_id = orders.customer_id
WHERE salary > 3000
GROUP BY department
HAVING AVG(salary) > 5000
ORDER BY bonus DESC;

Klausa LIMIT/OFFSET

Klausa LIMIT dan OFFSET biasanya dieksekusi terakhir dalam query SQL untuk membatasi jumlah baris yang dikembalikan. Klausa LIMIT menentukan jumlah maksimum baris yang dikembalikan, dan OFFSET menentukan berapa banyak baris yang dilewati sebelum mulai mengembalikan baris.

Query di bawah ini mengambil nama dan gaji karyawan, mengurutkannya berdasarkan salary secara menurun, dan membatasi keluaran menjadi 10 hasil sambil melewati 5 baris pertama.

SELECT DISTINCT department_id
FROM employees
JOIN orders ON customers.customer_id = orders.customer_id
WHERE salary > 3000
GROUP BY department
HAVING AVG(salary) > 5000
ORDER BY bonus DESC
LIMIT 10 OFFSET 5;
-- OFFSET 5 ROWS FETCH NEXT 10 ROWS ONLY --SQL SERVER / ORACLE

Klausa LIMIT dan OFFSET didukung di basis data MySQL dan PostgreSQL. Untuk SQL Server dan Oracle, Anda menggunakan OFFSET, ROWS FETCH, dan ROWS ONLY untuk membatasi jumlah baris yang dikembalikan dari sebuah query.

Lihat tutorial kami tentang Cara Menggunakan SQL OFFSET untuk mempelajari lebih lanjut tentang paginasi data dan dukungan khusus basis data untuk klausa OFFSET dan LIMIT.

Urutan Eksekusi SQL vs. Urutan Penulisan

SQL adalah bahasa deklaratif, artinya urutan eksekusi query berbeda dari urutan penulisannya. Jadi, alih-alih menentukan bagaimana melakukan tugas, Anda menyatakan apa yang Anda inginkan, dan mesin basis data memutuskan cara terbaik untuk mencapainya. Metode ini berbeda dari bahasa pemrograman imperatif seperti Python atau Java, di mana Anda secara eksplisit menulis instruksi langkah demi langkah untuk dieksekusi. 

Memahami urutan eksekusi SQL mengubah cara Anda memikirkan konstruksi query. Misalnya, bayangkan Anda menulis query untuk memfilter baris berdasarkan alias yang Anda buat dalam klausa SELECT:

SELECT price * 0.9 AS discounted_price
FROM products
WHERE discounted_price > 100;

Sekilas, ini tampak logis, tetapi akan menghasilkan error. Mengapa? Karena klausa WHERE dievaluasi sebelum klausa SELECT dalam urutan eksekusi SQL. Untuk memperbaikinya, Anda perlu menggunakan subquery atau HAVING sebagai gantinya:

SELECT price * 0.9 AS discounted_price
FROM products
HAVING discounted_price > 100;

Untuk mempelajari lebih lanjut tentang WHERE dan HAVING secara khusus, baca tutorial kami: Perbedaan Antara WHERE dan HAVING di SQL.

Kesalahan Umum dan Praktik Terbaik

Meskipun urutan eksekusi query tidak dipengaruhi oleh urutan penulisan, memahami alur eksekusi sangat penting untuk menghindari kesalahan umum dan meningkatkan kinerja query. Kesalahan berikut secara langsung terkait dengan kesalahpahaman terhadap urutan eksekusi SQL:

Kesalahan umum

Berikut adalah kesalahan umum yang dapat menghambat kinerja query Anda.

  • Menggunakan Alias Kolom dalam Klausa WHERE: Karena klausa WHERE dieksekusi sebelum klausa SELECT, mencoba menggunakan alias di WHERE akan menghasilkan error. Memahami bahwa SQL mengevaluasi WHERE sebelum klausa SELECT mengajarkan bahwa Anda perlu mengulang ekspresi lengkap alih-alih mengandalkan alias.

  • Menggunakan HAVING untuk Memfilter Baris Alih-alih WHERE: Klausa HAVING dieksekusi setelah GROUP BY dan dirancang untuk memfilter data teragregasi. Jika Anda memfilter data yang tidak teragregasi, tempatnya adalah di klausa WHERE. Mengetahui perbedaan urutan eksekusi antara WHERE dan HAVING membantu Anda menentukan di mana setiap kondisi harus ditempatkan.

  • Penggunaan Agregat yang Tidak Tepat di SELECT Tanpa GROUP BY: Karena GROUP BY dieksekusi sebelum HAVING atau SELECT, kegagalan mengelompokkan data sebelum menerapkan fungsi agregat akan menyebabkan hasil yang salah atau error. Memahami urutan eksekusi memperjelas mengapa kedua klausa ini harus berjalan bersama.

  • Tidak Menggunakan Alias dengan Benar di Klausa ORDER BY: Berbeda dengan klausa WHERE, klausa ORDER BY dievaluasi setelah SELECT. Ini memungkinkan Anda menggunakan alias yang dibuat di SELECT untuk pengurutan, membantu menghindari kebingungan dengan mengetahui kapan alias tersedia untuk digunakan.

Praktik terbaik

Pertimbangkan praktik terbaik berikut untuk memastikan query Anda dieksekusi sesuai harapan.

  • Filter Lebih Awal dengan WHERE: Karena klausa WHERE dieksekusi sebelum GROUP BY dan JOIN, menerapkan filter lebih awal mengurangi jumlah baris yang diproses oleh klausa berikutnya, meningkatkan kinerja query. Dengan memfilter data yang tidak teragregasi sedini mungkin, Anda membatasi data yang perlu dikelompokkan atau digabungkan, menghemat waktu pemrosesan.

  • Pra-agregasi Data Sebelum Join: Mengetahui bahwa FROM dan JOIN adalah klausa pertama yang dieksekusi, melakukan pra-agregasi data menggunakan subquery atau common table expression (CTE) memungkinkan Anda mengecilkan himpunan data sebelum proses join. Ini memastikan lebih sedikit baris yang diproses selama join.

  • Optimalkan ORDER BY dengan Indeks: Karena klausa ORDER BY adalah salah satu langkah terakhir yang dieksekusi, memastikan kolom yang diurutkan diindeks akan mempercepat kinerja query dengan membantu basis data menangani operasi pengurutan secara lebih efisien.

  • Hindari SELECT * dalam Query Produksi: Klausa SELECT dieksekusi setelah pemfilteran, pengelompokan, dan agregasi, sehingga menentukan hanya kolom yang dibutuhkan meminimalkan jumlah data yang diambil, mengurangi beban yang tidak perlu.

Kesimpulan

Memahami urutan eksekusi SQL penting untuk menulis query yang efisien, akurat, dan teroptimasi. Kita telah membahas urutan logis eksekusi query di SQL dan membandingkannya dengan urutan penulisan. Saya mendorong Anda untuk berlatih menulis berbagai query guna lebih memahami urutan eksekusi logis. Menguasai konsep ini akan sangat meningkatkan kemampuan Anda dalam menelusuri masalah dan mengoptimalkan query SQL.

Jika Anda ingin meningkatkan keterampilan SQL, saya merekomendasikan mencoba jalur karier Associate Data Analyst in SQL dari DataCamp untuk menjadi analis data yang andal. Kursus Reporting in SQL juga akan membantu Anda mahir membangun laporan dan dasbor kompleks untuk penyajian data yang efektif. Terakhir, Anda sebaiknya memperoleh Sertifikasi SQL Associate untuk menunjukkan penguasaan Anda dalam menggunakan SQL untuk memecahkan masalah bisnis dan menonjol di antara para profesional lainnya.


Allan Ouko's photo
Author
Allan Ouko
LinkedIn
Penulis teknis Data Science dengan pengalaman langsung dalam analitik data, business intelligence, dan data science. Saya menulis konten praktis berfokus industri tentang SQL, Python, Power BI, Databricks, dan rekayasa data, yang berakar pada pekerjaan analitik dunia nyata. Tulisan saya menjembatani kedalaman teknis dan dampak bisnis, membantu para profesional mengubah data menjadi keputusan yang meyakinkan.

FAQ Urutan Eksekusi SQL

Bagaimana eksekusi SQL berbeda dari urutan penulisan?

Urutan eksekusi SQL biasanya dimulai dengan klausa FROM diikuti klausa seperti WHERE dan GROUP BY, sedangkan urutan penulisan dimulai dengan pernyataan SELECT.

Bagaimana posisi JOIN dalam urutan eksekusi?

Operasi JOIN dieksekusi sebagai bagian dari klausa FROM.

Apakah saya bisa menggunakan alias kolom di klausa WHERE?

Tidak, alias kolom didefinisikan dalam klausa SELECT, yang dieksekusi setelah klausa WHERE.

Apa perbedaan antara WHERE dan HAVING?

WHERE memfilter baris sebelum pengelompokan, sedangkan HAVING memfilter setelah GROUP BY dan bekerja pada data teragregasi.

Apakah urutan eksekusi SQL berdampak pada kinerja query?

Ya, memahami urutan eksekusi memungkinkan Anda mengoptimalkan query dengan menerapkan filter lebih awal dan mengurangi operasi yang tidak perlu.

Topik

Belajar SQL dengan DataCamp

Kursus

Manipulasi Data di SQL

4 Hr
323.6K
Kuasai kueri SQL yang kompleks yang diperlukan untuk menjawab berbagai pertanyaan ilmu data dan menyiapkan set data yang kuat untuk analisis di PostgreSQL.
Lihat DetailRight Arrow
Mulai Kursus
Lihat Lebih BanyakRight Arrow
Terkait

blogs

40 Pertanyaan Wawancara DBMS Teratas di 2026

Kuasai pertanyaan wawancara basis data, dari konsep SQL dasar hingga skenario desain sistem tingkat lanjut. Panduan mendalam ini mencakup semua yang Anda perlukan untuk sukses di wawancara DBMS dan meraih peran berikutnya.
Dario Radečić's photo

Dario Radečić

15 mnt

blogs

Tutorial Korelasi di R

Dapatkan pengenalan dasar-dasar korelasi di R: pelajari lebih lanjut tentang koefisien korelasi, matriks korelasi, plotting korelasi, dan sebagainya.
David Woods's photo

David Woods

13 mnt

blogs

Spaghetti Plot dan Jalur Badai

Temukan alasan mengapa Anda sebaiknya (tidak) menggunakan spaghetti plot untuk menyampaikan ketidakpastian jalur prediksi badai serta dampaknya terhadap interpretasi.
Hugo Bowne-Anderson's photo

Hugo Bowne-Anderson

13 mnt

blogs

12 Alternatif ChatGPT Terbaik yang Bisa Anda Coba pada 2026

Artikel ini menyajikan daftar alternatif ChatGPT yang akan meningkatkan produktivitas Anda.
Javier Canales Luna's photo

Javier Canales Luna

14 mnt

Lihat Lebih BanyakLihat Lebih Banyak