All Products
Search
Document Center

Tablestore:Pernyataan DQL

Last Updated:Jun 06, 2026

Kueri data dalam tabel pemetaan menggunakan sintaksis DQL yang kompatibel dengan MySQL, mencakup pernyataan SELECT, fungsi agregat, operasi JOIN, pencarian teks lengkap, pencarian vektor, serta fungsi JSON untuk indeks pencarian.

Prasyarat

Buat hubungan pemetaan sebelum menjalankan pernyataan SELECT. Untuk informasi selengkapnya, lihat Operasi DDL.

Kueri data

Pernyataan SELECT mengambil baris dari tabel pemetaan dengan opsi penyaringan, pengelompokan, pengurutan, dan paginasi.

Catatan
  • Tabel pemetaan indeks pencarian mendukung kemampuan tambahan seperti pencarian teks lengkap, kueri array, kueri bersarang, pencarian vektor, dan fungsi JSON. Untuk informasi selengkapnya, lihat Operasi indeks pencarian.

  • Jika indeks sekunder dan indeks pencarian keduanya tersedia pada tabel data, mesin SQL secara otomatis memilih indeks yang paling sesuai. Untuk informasi selengkapnya, lihat Optimasi kueri.

  • Urutan eksekusi klausa: WHERE > GROUP BY > HAVING > ORDER BY > LIMIT/OFFSET.

Sintaksis

SELECT
    [ALL | DISTINCT | DISTINCTROW]
    select_expr [, select_expr] ...
    [FROM table_references | join_expr]
    [WHERE where_condition]
    [GROUP BY groupby_condition]
    [HAVING having_condition]
    [ORDER BY order_condition]
    [LIMIT {[offset,] row_count | row_count OFFSET offset}]

Parameter

Parameter

Wajib

Deskripsi

ALL | DISTINCT | DISTINCTROW

Tidak

Mode deduplikasi. ALL (default) mengembalikan semua baris. DISTINCT menghapus baris duplikat dari set hasil. DISTINCTROW setara dengan DISTINCT.

select_expr

Ya

Nama kolom atau ekspresi dalam format column_name | expression [AS alias]. Gunakan * untuk mengembalikan semua kolom.

table_references

Ya

Tabel target. Tentukan nama tabel atau subkueri SELECT dalam format table_name | select_statement. Untuk kueri multi-tabel, lihat bagian Join.

where_condition

Tidak

Klausa WHERE. Mendukung kondisi kesetaraan dan rentang kunci primer, operator logika (AND/OR/NOT), operator perbandingan (=, >, <, >=, <=, !=), IN, LIKE, IS NULL, dan BETWEEN.

groupby_condition

Tidak

Klausa GROUP BY. Mengelompokkan baris berdasarkan kolom yang ditentukan, biasanya digunakan bersama fungsi agregat.

having_condition

Tidak

Klausa HAVING. Menyaring hasil yang telah dikelompokkan oleh GROUP BY.

order_condition

Tidak

Klausa ORDER BY. Mengurutkan hasil berdasarkan kolom yang ditentukan. Mendukung ASC (ascending, default) dan DESC (descending).

LIMIT / OFFSET

Tidak

Membatasi jumlah baris yang dikembalikan. LIMIT row_count mengembalikan N baris pertama. LIMIT offset, row_count atau LIMIT row_count OFFSET offset melewati offset baris lalu mengembalikan N baris.

Contoh

Kueri semua data dari exampletable, mengembalikan maksimal 20 baris:

SELECT * FROM exampletable LIMIT 20;

Kueri dengan kondisi dan pengurutan:

SELECT pk, col_long, col_keyword FROM exampletable WHERE col_long > 100 ORDER BY col_long DESC LIMIT 10;

Deduplikasi hasil:

SELECT DISTINCT col_keyword FROM exampletable;

Kelompokkan dan hitung:

SELECT col_keyword, COUNT(*) AS cnt FROM exampletable GROUP BY col_keyword HAVING cnt > 1;

Paginasi hasil (lewati 10 baris pertama dan kembalikan 5 baris):

SELECT * FROM exampletable LIMIT 10, 5;

Fungsi agregat

Fungsi agregat menghitung satu nilai tunggal dari beberapa baris. Gunakan bersama GROUP BY untuk menghasilkan statistik terkelompok.

Fungsi

Tipe kembalian

Deskripsi

COUNT()

BIGINT

Mengembalikan jumlah baris yang sesuai dengan kondisi yang ditentukan. COUNT(*) menghitung semua baris. COUNT(column) menghitung baris non-NULL.

COUNT(DISTINCT)

BIGINT

Mengembalikan jumlah nilai unik dalam kolom yang ditentukan.

SUM()

DOUBLE

Mengembalikan jumlah total kolom numerik.

AVG()

DOUBLE

Mengembalikan rata-rata kolom numerik.

MAX()

Sama dengan tipe kolom

Mengembalikan nilai maksimum dalam kolom.

MIN()

Sama dengan tipe kolom

Mengembalikan nilai minimum dalam kolom.

Contoh

SELECT COUNT(*) FROM exampletable;
SELECT SUM(col_long), AVG(col_long) FROM exampletable;
SELECT col_keyword, COUNT(*) AS cnt, MAX(col_long) FROM exampletable GROUP BY col_keyword;

Join

Gabungkan dua atau lebih tabel untuk mengembalikan baris gabungan di mana kolom yang ditentukan cocok.

Sintaksis

table_references join_type table_references [ ON join_condition | USING ( join_column [, ...] ) ]

table_references : {
  table_name [ [ AS ] alias_name ]
  | select_statement
}

join_type : {
  [ INNER ] JOIN
  | LEFT [ OUTER ] JOIN
  | RIGHT [ OUTER ] JOIN
  | CROSS JOIN
}

Parameter

Parameter

Wajib

Deskripsi

table_references

Ya

Tabel yang akan digabungkan. Tentukan nama tabel dengan alias opsional, atau subkueri SELECT. Tabel di sisi kiri kata kunci JOIN adalah tabel kiri, dan tabel di sisi kanan adalah tabel kanan.

join_type

Ya

Jenis join:

  • INNER JOIN (default): Mengembalikan hanya baris yang memenuhi kondisi join di kedua tabel.

  • LEFT OUTER JOIN: Mengembalikan semua baris dari tabel kiri. Isi NULL untuk kolom yang tidak memiliki kecocokan di tabel kanan.

  • RIGHT OUTER JOIN: Mengembalikan semua baris dari tabel kanan. Isi NULL untuk kolom yang tidak memiliki kecocokan di tabel kiri.

  • CROSS JOIN: Mengembalikan Produk Kartesius dari kedua tabel.

join_condition

Ya

Menentukan kolom join. Gunakan ON untuk menentukan kondisi, atau gunakan USING(column) untuk menyederhanakan join pada kolom dengan nama identik. Kedua pernyataan berikut setara:

SELECT * FROM t1 JOIN t2 ON t1.col_a = t2.col_a AND t1.col_b = t2.col_b;
        SELECT * FROM t1 JOIN t2 USING (col_a, col_b);

Algoritma join

Tablestore menggunakan INDEX JOIN secara default dan beralih ke HASH JOIN ketika kolom join pada tabel kanan tidak memenuhi kondisi indeks.

Algoritma

Kondisi berlaku

Deskripsi

INDEX JOIN

Kolom join tabel kanan memenuhi kondisi indeks

Membaca data dari tabel kiri dan menggunakan indeks atau kunci primer tabel kanan untuk mencari baris yang cocok. Kolom join tabel kanan harus memenuhi salah satu kondisi berikut:

  • Saat diakses melalui kunci primer atau indeks sekunder, kolom join memenuhi pencocokan awalan kiri.

  • Saat diakses melalui indeks pencarian, semua kolom join diindeks dalam indeks pencarian dan kondisi filter dapat didorong ke bawah.

HASH JOIN

Kolom join tidak memenuhi kondisi INDEX JOIN

Membaca data dari tabel kiri untuk membangun tabel hash, lalu mencocokkan dengan baris dari tabel kanan untuk menemukan kecocokan. Tidak memerlukan indeks.

Catatan
  • Tanpa indeks yang sesuai pada tabel kanan, INDEX JOIN akan turun menjadi pemindaian tabel penuh. Tambahkan indeks pada kolom join dan kolom filter untuk meningkatkan performa kueri.

  • INNER JOIN memberikan performa lebih baik untuk set hasil yang lebih kecil, sedangkan HASH JOIN lebih unggul untuk set hasil yang lebih besar. Tempatkan tabel yang lebih kecil di sisi kiri untuk performa optimal.

Contoh

Asumsikan dua tabel, orders dan customers:

-- orders table
+----------+-------------+------------+--------------+
| order_id | customer_id | order_date | order_amount |
+----------+-------------+------------+--------------+
|     1001 |           1 | 2023-01-01 |           50 |
|     1002 |           2 | 2023-01-02 |           80 |
|     1003 |           3 | 2023-01-03 |          180 |
|     1004 |           4 | 2023-01-04 |          220 |
|     1005 |           6 | 2023-01-05 |          250 |
+----------+-------------+------------+--------------+

-- customers table
+-------------+---------------+----------------+
| customer_id | customer_name | customer_phone |
+-------------+---------------+----------------+
|           1 |         Alice |    11111111111 |
|           2 |           Bob |    22222222222 |
|           3 |         Carol |    33333333333 |
|           4 |         David |    44444444444 |
|           5 |           Eve |    55555555555 |
+-------------+---------------+----------------+

INNER JOIN hanya mengembalikan baris di mana customer_id cocok di kedua tabel. Pesanan 1005 (customer_id=6) dikecualikan karena tidak ada baris yang cocok di tabel kanan.

SELECT * FROM orders JOIN customers ON orders.customer_id = customers.customer_id;
-- Equivalent:
SELECT * FROM orders JOIN customers USING(customer_id);

LEFT JOIN mengembalikan semua baris dari tabel kiri (orders). Kolom dari tabel kanan diisi dengan NULL jika tidak ada kecocokan.

SELECT * FROM orders LEFT JOIN customers ON orders.customer_id = customers.customer_id;

CROSS JOIN mengembalikan Produk Kartesius dari kedua tabel.

SELECT * FROM orders CROSS JOIN customers;