Operator merupakan elemen kunci dalam pernyataan SQL. Operator memungkinkan Anda menjalankan tugas pengambilan dan pemrosesan data yang kompleks, membantu mencapai pemrosesan data yang lebih efisien, penilaian kondisional, atau operasi lainnya. Topik ini menjelaskan format dan makna operator yang didukung oleh MaxCompute serta memberikan contoh penggunaannya.
Tabel berikut menunjukkan jenis-jenis operator yang didukung oleh MaxCompute.
Jenis Operator | Deskripsi |
Digunakan untuk operasi perbandingan. | |
Digunakan untuk operasi penggabungan string. | |
Digunakan untuk operasi aritmatika. | |
Digunakan untuk operasi pada digit biner. | |
Digunakan untuk menghubungkan beberapa kondisi. Dalam kebanyakan kasus, operator logika digunakan untuk menghubungkan ekspresi atau nilai tipe BOOLEAN. |
Operator Relasional
Operator | Deskripsi |
A=B |
|
A<=>B |
|
A<>B |
|
A<B |
|
A<=B |
|
A>B |
|
A>=B |
|
A IS NULL | Jika A adalah NULL, TRUE dikembalikan. Jika tidak, FALSE dikembalikan. |
A IS NOT NULL | Jika A bukan NULL, TRUE dikembalikan. Jika tidak, FALSE dikembalikan. |
A LIKE B | Jika A atau B adalah NULL, maka NULL dikembalikan. Jika String A cocok dengan Pola B, TRUE dikembalikan. Jika tidak, FALSE dikembalikan.
|
A RLIKE B | Jika String A cocok dengan String Konstan B atau Ekspresi Reguler B, TRUE dikembalikan. Jika tidak, FALSE dikembalikan. Jika B adalah string kosong, kesalahan akan dikembalikan. Jika A atau B adalah NULL, maka NULL dikembalikan. Catatan "A RLIKE B" memiliki efek yang sama dengan "A REGEXP B." |
A IN B |
|
BETWEEN AND | Ekspresinya adalah
|
IS [NOT] DISTINCT FROM | Ekspresinya adalah |
Penggunaan umum dalam pernyataan:
SELECT * FROM user WHERE user_id = '0001';
SELECT * FROM user WHERE user_name <> 'maggie';
SELECT * FROM user WHERE age > '50';
SELECT * FROM user WHERE birth_day >= '1980-01-01 00:00:00';
SELECT * FROM user WHERE is_female is null;
SELECT * FROM user WHERE is_female is not null;
SELECT * FROM user WHERE user_id in (0001,0010);
SELECT * FROM user WHERE user_name like 'M%';Sebelum melakukan operasi relasional, Anda harus mengonversi tipe data terlebih dahulu. Jika tidak, hasilnya mungkin NULL. Untuk informasi lebih lanjut tentang konversi tipe data, lihat Konversi Tipe.
Nilai tipe DOUBLE di MaxCompute memiliki presisi yang berbeda. Oleh karena itu, disarankan untuk tidak menggunakan tanda sama dengan (=) saat membandingkan dua nilai tipe DOUBLE. Sebagai alternatif, Anda dapat mengurangi satu nilai DOUBLE dari nilai DOUBLE lainnya, lalu mendapatkan nilai absolut untuk perbandingan. Jika nilai absolut tersebut dapat diabaikan, kedua nilai DOUBLE dianggap sama. Contoh:
ABS(0.9999999999 - 1.0000000000) < 0.000000001
-- 0.9999999999 dan 1.0000000000 memiliki presisi 10 digit desimal, sedangkan 0.000000001 memiliki presisi 9 digit desimal.
-- 0.9999999999 dianggap sama dengan 1.0000000000.ABS adalah fungsi bawaan yang disediakan oleh MaxCompute. Fungsi ini digunakan untuk mendapatkan nilai absolut dari inputnya. Untuk informasi lebih lanjut, lihat ABS.
Dalam kebanyakan kasus, nilai tipe DOUBLE di MaxCompute dapat memberikan presisi hingga 14 digit desimal.
Jika Anda membandingkan nilai tipe STRING dengan nilai tipe BIGINT, tipe data nilai-nilai tersebut akan dikonversi secara otomatis menjadi DOUBLE. Kehilangan presisi mungkin terjadi selama perbandingan. Untuk mengatasi masalah ini, Anda dapat menggunakan CAST STRING AS BIGINT untuk mengonversi tipe STRING menjadi BIGINT.
Operator Karakter
Operator | Deskripsi |
A||B | Digunakan untuk operasi penggabungan karakter. Misalnya, a||b||c setara dengan CONCAT(a, b, c). |
Operator Aritmatika
Operator | Deskripsi |
A+B | Jika A atau B adalah NULL, maka NULL dikembalikan. Jika tidak, hasil dari A ditambah B dikembalikan. |
A-B | Jika A atau B adalah NULL, maka NULL dikembalikan. Jika tidak, hasil dari A dikurangi B dikembalikan. |
A*B | Jika A atau B adalah NULL, maka NULL dikembalikan. Jika tidak, hasil dari A dikalikan B dikembalikan. |
A/B | Jika A atau B adalah NULL, maka NULL dikembalikan. Jika tidak, hasil dari A dibagi B dikembalikan. Catatan Jika A dan B bertipe BIGINT, nilai yang dikembalikan bertipe DOUBLE. |
A%B | Jika A atau B adalah NULL, maka NULL dikembalikan. Jika tidak, sisa dari A dibagi B dikembalikan. |
+A | A dikembalikan. |
-A | Jika A adalah NULL, maka NULL dikembalikan. Jika tidak, -A dikembalikan. |
A DIV B | Jika A atau B adalah NULL, maka NULL dikembalikan. Jika tidak, hasil dari A DIV B dikembalikan. |
Penggunaan umum dalam pernyataan:
SELECT age+10, age-10, age%10, -age, age*age, age/10, age div 10 FROM user;Hanya nilai bertipe STRING, BIGINT, DOUBLE, dan TIMESTAMP_NTZ yang dapat digunakan dalam operasi aritmatika. Nilai tanggal dan nilai bertipe BOOLEAN tidak dapat digunakan dalam operasi aritmatika. Untuk informasi lebih lanjut tentang tipe data TIMESTAMP_NTZ, lihat Tipe Data TIMESTAMP_NTZ MaxCompute.
Nilai bertipe STRING secara implisit dikonversi menjadi tipe DOUBLE sebelum operasi aritmatika.
Jika Anda menggunakan nilai bertipe BIGINT dan DOUBLE dalam operasi aritmatika, nilai bertipe BIGINT akan dikonversi secara implisit menjadi tipe DOUBLE sebelum operasi. Nilai yang dikembalikan bertipe DOUBLE.
Jika A dan B bertipe BIGINT, nilai yang dikembalikan bertipe DOUBLE setelah Anda melakukan operasi A/B. Untuk operasi aritmatika lainnya, nilai yang dikembalikan bertipe BIGINT.
Operator Bitwise
Operator | Contoh | Deskripsi |
|
| Hasil AND bitwise dari A dan B dikembalikan. Misalnya, hasil dari |
|
| Hasil OR bitwise dari A dan B dikembalikan. Misalnya, hasil dari |
|
| Hasil NOT bitwise dari A dikembalikan. Misalnya, hasil dari |
|
| Hasil XOR bitwise dari A dan B dikembalikan. Misalnya, hasil dari |
Operator bitwise tidak mendukung konversi tipe implisit. Anda hanya dapat menggunakan nilai bertipe BIGINT dalam operasi bitwise.
Operator Logika
Operator | Deskripsi |
A and B | TRUE and TRUE=TRUE |
TRUE and FALSE=FALSE | |
FALSE and TRUE=FALSE | |
FALSE and FALSE=FALSE | |
FALSE and NULL=FALSE | |
NULL and FALSE=FALSE | |
TRUE and NULL=NULL | |
NULL and TRUE=NULL | |
NULL and NULL=NULL | |
A or B | TRUE or TRUE=TRUE |
TRUE or FALSE=TRUE | |
FALSE or TRUE=TRUE | |
FALSE or FALSE=FALSE | |
FALSE or NULL=NULL | |
NULL or FALSE=NULL | |
TRUE or NULL=TRUE | |
NULL or TRUE=TRUE | |
NULL or NULL=NULL | |
NOT A | Jika A adalah NULL, maka NULL dikembalikan. |
Jika A adalah TRUE, maka FALSE dikembalikan. | |
Jika A adalah FALSE, maka TRUE dikembalikan. |
Operator logika tidak mendukung konversi tipe implisit. Anda hanya dapat menggunakan nilai bertipe BOOLEAN dalam operasi logika.
Prioritas Operator
Tabel berikut mencantumkan prioritas operator dalam urutan menurun. Jika operator memiliki prioritas yang sama, operasi dilakukan dari kiri ke kanan secara default.
Operator | Prioritas |
IS (NOT) NULL | 1 |
^ | 2 |
*, /, %, DIV | 3 |
+, - | 4 |
|| | 5 |
& | 6 |
| | 7 |
(NOT) LIKE, (NOT) RLIKE, =, ==, IS (NOT) DISTINCT FROM, <>, !=, <=, <, >=, > | 8 |
(NOT) IN, (NOT) BETWEEN AND | 9 |
NOT | 10 |
AND | 11 |
OR | 12 |
Untuk memprioritaskan beberapa operasi, gunakan tanda kurung (). Contoh:
a=1 and b=1 or c=1 -- Pertama hitung a=1 AND b=1, lalu lakukan operasi OR.
a=1 and (b=1 or c=1) -- Pertama hitung b=1 OR c=1, lalu lakukan operasi AND.