全部产品
Search
文档中心

Tablestore:Gabung

更新时间:Jun 24, 2025

Fungsi JOIN menggabungkan dua tabel atau lebih dan mengembalikan data yang memenuhi kondisi penggabungan serta kueri.

Catatan Penggunaan

Dalam topik ini, tabel kiri adalah tabel di sisi kiri kata kunci JOIN, sedangkan tabel kanan adalah tabel di sisi kanan kata kunci JOIN.

Sebagai contoh, dalam pernyataan SQL berikut, table_1 adalah tabel kiri dan table_2 adalah tabel kanan.

SELECT * FROM table_1 JOIN table_2 on ......;

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

Diperlukan

Deskripsi

table_references

Ya

Informasi tentang tabel yang ingin Anda gabungkan. Nilainya bisa berupa nama tabel atau pernyataan SELECT.

Tabel kiri dan tabel kanan dibedakan berdasarkan apakah tabel tersebut berada di sisi kiri atau kanan dari kata kunci JOIN.

join_type

Ya

Jenis fungsi JOIN. Nilai yang valid:

  • INNER JOIN (default): menggabungkan dua tabel berdasarkan kolom yang ditentukan dalam kondisi penggabungan dan mengembalikan baris yang memiliki nilai cocok di kolom-kolom tersebut.

  • LEFT OUTER JOIN: menggabungkan dua tabel berdasarkan kolom yang ditentukan dalam kondisi penggabungan dan mengembalikan baris yang memiliki nilai cocok di kolom-kolom tersebut serta baris tersisa dari tabel kiri. Jika sebuah baris di tabel kiri tidak memiliki nilai cocok di tabel kanan, NULL akan ditetapkan sebagai nilainya.

  • RIGHT OUTER JOIN: menggabungkan dua tabel berdasarkan kolom yang ditentukan dalam kondisi penggabungan dan mengembalikan baris yang memiliki nilai cocok di kolom-kolom tersebut serta baris tersisa dari tabel kanan. Jika sebuah baris di tabel kanan tidak memiliki nilai cocok di tabel kiri, NULL akan ditetapkan sebagai nilainya.

  • CROSS JOIN: menggabungkan setiap baris di tabel kiri dengan setiap baris di tabel kanan dan mengembalikan Produk Kartesius dari baris-baris kedua tabel tersebut.

join_condition

Ya

Kolom berdasarkan mana Anda ingin menggabungkan dua tabel.

Pernyataan SQL berikut menunjukkan bahwa table_1 dan table_2 digabungkan dengan mencocokkan kolom col_A di table_1 dan kolom col_B di table_2.

SELECT * FROM table_1 JOIN table_2 on table_1.col_A = table_2.col_B;

Jika nama kolom yang ditentukan dalam kondisi penggabungan sama di kedua tabel, Anda dapat menggunakan USING ( join_column [, ...] ) untuk menyederhanakan pernyataan SQL. Anda dapat menggunakan klausa USING untuk menyederhanakan pernyataan SQL berikut:

SELECT * FROM table_1 JOIN table_2 
on table_1.col_A = table_2.col_A and table_1.col_B = table_2.col_B;

Pernyataan SQL yang disederhanakan:

SELECT * FROM table_1 JOIN table_2 USING (col_A, col_B);

Algoritma JOIN

Tablestore menyediakan algoritma berikut untuk operasi JOIN: INDEX JOIN dan HASH JOIN. INDEX JOIN merupakan algoritma JOIN default. Jika kolom yang ditentukan di tabel kanan tidak memenuhi syarat untuk menggunakan INDEX JOIN, sistem akan menggunakan HASH JOIN.

  • INDEX JOIN (default): Membaca data dari tabel kiri, menggunakan indeks atau kunci utama tabel kanan untuk membaca baris di tabel kanan yang cocok dengan data di tabel kiri, lalu menggabungkan kedua tabel. Untuk informasi lebih lanjut, lihat INDEX JOIN.

  • HASH JOIN: Membaca data dari tabel kiri untuk membuat tabel hash, membaca data dari tabel kanan untuk menentukan apakah baris di tabel kanan cocok dengan data di tabel hash, lalu menggabungkan kedua tabel. Untuk informasi lebih lanjut, lihat HASH JOIN.

INDEX JOIN

Untuk menggunakan INDEX JOIN, pastikan bahwa kolom yang ditentukan di tabel kanan memenuhi kondisi tertentu untuk menggunakan indeks. Tidak ada persyaratan tambahan untuk tabel kiri.

  • Jika Anda menggunakan indeks sekunder atau kunci utama tabel kanan untuk membaca data dari tabel kanan, kolom yang ditentukan di tabel kanan harus mematuhi prinsip pencocokan paling kiri.

  • Jika Anda menggunakan indeks pencarian tabel kanan untuk membaca data dari tabel kanan, pastikan bahwa kolom yang ditentukan di tabel kanan termasuk dalam indeks pencarian dan bahwa kondisi penyaringan yang ditentukan dapat didorong ke indeks pencarian tersebut.

Jika jumlah baris di tabel yang ingin digabungkan kecil, jumlah data di tabel kiri kecil, atau jumlah data setelah difilter kecil, INDEX JOIN dapat meningkatkan kinerja selama tabel kanan memenuhi kondisi untuk menggunakan INDEX JOIN. Dalam skenario di mana INDEX JOIN digunakan, jika parameter join_type diatur ke INNER JOIN dan kedua tabel memenuhi kondisi untuk menggunakan INDEX JOIN, disarankan untuk menetapkan tabel dengan jumlah data lebih kecil atau yang memiliki jumlah data lebih kecil setelah difilter sebagai tabel kiri.

HASH JOIN

Tablestore tidak memberlakukan batasan pada skenario penggunaan HASH JOIN. Jika kondisi untuk menggunakan INDEX JOIN tidak terpenuhi, sistem akan menggunakan HASH JOIN.

Jika jumlah baris di tabel yang ingin digabungkan besar, HASH JOIN dapat memberikan kinerja yang lebih baik.

Dalam skenario di mana HASH JOIN digunakan, jika parameter join_type diatur ke INNER JOIN, disarankan untuk menetapkan tabel dengan jumlah data lebih kecil atau yang memiliki jumlah data lebih kecil setelah difilter sebagai tabel kiri.

Saran

  • Jika Anda ingin menggunakan INDEX JOIN, pastikan bahwa kolom yang ditentukan di tabel kanan memenuhi kondisi tertentu untuk menggunakan indeks. Tablestore tidak memberlakukan persyaratan pada tabel kiri.

    • Jika Anda menggunakan indeks sekunder atau kunci utama tabel kanan untuk membaca data dari tabel kanan, kolom yang ditentukan di tabel kanan harus mematuhi prinsip pencocokan paling kiri.

    • Jika Anda menggunakan indeks pencarian tabel kanan untuk membaca data dari tabel kanan, pastikan bahwa kolom yang ditentukan di tabel kanan termasuk dalam indeks pencarian dan bahwa kondisi penyaringan yang ditentukan dapat didorong ke indeks pencarian.

    Jika sejumlah besar kondisi penyaringan ditentukan untuk tabel kanan dan tidak ada indeks yang digunakan, kinerja pembacaan akan terganggu.

  • Ketika parameter join_type diatur ke INNER JOIN, tabel di sisi kiri kata kunci JOIN adalah tabel eksternal, dan tabel di sisi kanan kata kunci JOIN adalah tabel internal. Disarankan untuk menetapkan tabel dengan jumlah baris lebih sedikit atau yang memiliki jumlah baris lebih sedikit setelah difilter sebagai tabel eksternal, yang berada di sisi kiri kata kunci JOIN.

  • Jika jumlah baris di tabel yang ingin digabungkan kecil atau tabel eksternal memiliki jumlah baris lebih sedikit atau memiliki jumlah baris lebih sedikit setelah difilter, INDEX JOIN memberikan kinerja yang lebih baik daripada HASH JOIN. Namun, jika jumlah data atau jumlah baris di tabel yang ingin digabungkan besar, kinerja INDEX JOIN terganggu. Dalam hal ini, HASH JOIN memberikan kinerja yang lebih baik.

  • Jika sejumlah besar kondisi penyaringan digunakan untuk tabel yang ditentukan dalam pernyataan SQL di mana klausa JOIN digunakan, kinerja pembacaan terganggu ketika tidak ada indeks yang digunakan. Dalam hal ini, Anda dapat menggunakan indeks untuk mempercepat operasi pembacaan data, yang mungkin membantu meningkatkan kecepatan eksekusi pernyataan SQL.

Contoh

Contoh berikut menggunakan dua tabel bernama orders dan customers:

SELECT * FROM orders;
+----------+-------------+------------+--------------+
| 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 |
+----------+-------------+------------+--------------+

SELECT * FROM customers;
+-------------+---------------+----------------+
| customer_id | customer_name | customer_phone |
+-------------+---------------+----------------+
|           1 |         Alice |    11111111111 |
|           2 |           Bob |    22222222222 |
|           3 |         Carol |    33333333333 |
|           4 |         David |    44444444444 |
|           5 |           Eve |    55555555555 |
+-------------+---------------+----------------+
  • Contoh 1: INNER JOIN

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

    Pernyataan INNER JOIN di atas setara dengan pernyataan SQL berikut di mana USING digunakan:

    SELECT * FROM orders JOIN customers USING(customer_id);

    Keluaran berikut dikembalikan:

    +----------+-------------+------------+--------------+-------------+---------------+----------------+
    | order_id | customer_id | order_date | order_amount | customer_id | customer_name | customer_phone |
    +----------+-------------+------------+--------------+-------------+---------------+----------------+
    |     1001 |           1 | 2023-01-01 |           50 |           1 |         Alice |    11111111111 |
    |     1002 |           2 | 2023-01-02 |           80 |           2 |           Bob |    22222222222 |
    |     1003 |           3 | 2023-01-03 |          180 |           3 |         Carol |    33333333333 |
    |     1004 |           4 | 2023-01-04 |          220 |           4 |         David |    44444444444 |
    +----------+-------------+------------+--------------+-------------+---------------+----------------+
  • Contoh 2: LEFT JOIN

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

    Pernyataan LEFT JOIN di atas setara dengan pernyataan SQL berikut di mana USING digunakan:

    SELECT * FROM orders LEFT JOIN customers USING(customer_id);

    Keluaran berikut dikembalikan:

    +----------+-------------+------------+--------------+-------------+---------------+----------------+
    | order_id | customer_id | order_date | order_amount | customer_id | customer_name | customer_phone |
    +----------+-------------+------------+--------------+-------------+---------------+----------------+
    |     1001 |           1 | 2023-01-01 |           50 |           1 |         Alice |    11111111111 |
    |     1002 |           2 | 2023-01-02 |           80 |           2 |           Bob |    22222222222 |
    |     1003 |           3 | 2023-01-03 |          180 |           3 |         Carol |    33333333333 |
    |     1004 |           4 | 2023-01-04 |          220 |           4 |         David |    44444444444 |
    |     1005 |           6 | 2023-01-05 |          250 |        NULL |          NULL |           NULL |
    +----------+-------------+------------+--------------+-------------+---------------+----------------+
  • Contoh 3: CROSS JOIN

    SELECT * FROM orders CROSS JOIN customers;

    Keluaran berikut dikembalikan:

    +----------+-------------+------------+--------------+-------------+---------------+----------------+
    | order_id | customer_id | order_date | order_amount | customer_id | customer_name | customer_phone |
    +----------+-------------+------------+--------------+-------------+---------------+----------------+
    |     1001 |           1 | 2023-01-01 |           50 |           1 |         Alice |    11111111111 |
    |     1002 |           2 | 2023-01-02 |           80 |           1 |         Alice |    11111111111 |
    |     1003 |           3 | 2023-01-03 |          180 |           1 |         Alice |    11111111111 |
    |     1004 |           4 | 2023-01-04 |          220 |           1 |         Alice |    11111111111 |
    |     1005 |           6 | 2023-01-05 |          250 |           1 |         Alice |    11111111111 |
    |     1001 |           1 | 2023-01-01 |           50 |           2 |           Bob |    22222222222 |
    |     1002 |           2 | 2023-01-02 |           80 |           2 |           Bob |    22222222222 |
    |     1003 |           3 | 2023-01-03 |          180 |           2 |           Bob |    22222222222 |
    |     1004 |           4 | 2023-01-04 |          220 |           2 |           Bob |    22222222222 |
    |     1005 |           6 | 2023-01-05 |          250 |           2 |           Bob |    22222222222 |
    |     1001 |           1 | 2023-01-01 |           50 |           3 |         Carol |    33333333333 |
    |     1002 |           2 | 2023-01-02 |           80 |           3 |         Carol |    33333333333 |
    |     1003 |           3 | 2023-01-03 |          180 |           3 |         Carol |    33333333333 |
    |     1004 |           4 | 2023-01-04 |          220 |           3 |         Carol |    33333333333 |
    |     1005 |           6 | 2023-01-05 |          250 |           3 |         Carol |    33333333333 |
    |     1001 |           1 | 2023-01-01 |           50 |           4 |         David |    44444444444 |
    |     1002 |           2 | 2023-01-02 |           80 |           4 |         David |    44444444444 |
    |     1003 |           3 | 2023-01-03 |          180 |           4 |         David |    44444444444 |
    |     1004 |           4 | 2023-01-04 |          220 |           4 |         David |    44444444444 |
    |     1005 |           6 | 2023-01-05 |          250 |           4 |         David |    44444444444 |
    |     1001 |           1 | 2023-01-01 |           50 |           5 |           Eve |    55555555555 |
    |     1002 |           2 | 2023-01-02 |           80 |           5 |           Eve |    55555555555 |
    |     1003 |           3 | 2023-01-03 |          180 |           5 |           Eve |    55555555555 |
    |     1004 |           4 | 2023-01-04 |          220 |           5 |           Eve |    55555555555 |
    |     1005 |           6 | 2023-01-05 |          250 |           5 |           Eve |    55555555555 |
    +----------+-------------+------------+--------------+-------------+---------------+----------------+