Gunakan sintaks SELECT untuk menanyakan data dalam tabel.
Mesin yang berlaku
Sintaks SELECT berlaku untuk LindormTable dan LindormTSDB.
Batasan
Sintaks SELECT di Lindorm tidak mendukung query join lintas beberapa tabel.
Sintaks
SELECT [hint_clause] ( select_clause | '*' )
FROM table_name
[ WHERE where_clause ]
[ GROUP BY group_by_clause ]
[ ORDER BY ordering_clause ]
[ LIMIT integer [OFFSET integer] ] | [LIMIT integer, integer]
select_clause ::= selector [ AS identifier ] ( ',' selector [ AS identifier ] )
selector ::= column_name
| term
| function_name '(' [ selector ( ',' selector )* ] ')'
where_clause ::= relation ( AND|OR relation )*
relation ::= column_name operator term
|'(' column_name ( ',' column_name )* ')' operator tuple_literal
operator ::= '=' | '<' | '>' | '<=' | '>=' | '!=' | IN | IS NOT? NULL | LIKE
group_by_clause ::= column_name ( ',' column_name )*
ordering_clause ::= column_name [ ASC | DESC ] ( ',' column_name [ ASC | DESC ] )*
hint_clause::=/*+hint_items*/
hint_items::=hint_item(','hint_item)*
hint_item::=identifier('('hint_option(','hint_option)*')')
hint_option::=expressionParameter
SELECT
Parameter SELECT menentukan kolom, konstanta, dan ekspresi fungsi yang dikembalikan dalam hasil query. Fungsi AS digunakan untuk menentukan alias sementara dari kolom dalam set hasil.
WHERE
Parameter WHERE digunakan untuk menentukan kondisi query.
Saat menentukan parameter WHERE dalam pernyataan untuk menanyakan data dalam tabel lebar, perhatikan hal-hal berikut:
Kami sarankan Anda menentukan kondisi query sesuai aturan berikut untuk meningkatkan efisiensi query.
Tentukan hanya kolom kunci utama pertama atau kolom indeks pertama dari tabel indeks sebagai kondisi query.
Jika kondisi query mencakup kolom selain kolom kunci utama pertama atau kolom indeks pertama, tentukan rentang query untuk kolom kunci utama pertama atau kolom indeks pertama.
Jika kondisi query tidak memenuhi aturan di atas, gunakan hint /*+ _l_allow_filtering_ */ dalam pernyataan untuk memaksa menjalankan query yang tidak efisien. Untuk informasi lebih lanjut, lihat Memaksa melakukan query yang tidak efisien.
Jika kolom dinamis diaktifkan untuk tabel lebar:
Untuk memastikan performa query, kami sarankan menyertakan kolom kunci utama atau kolom indeks dalam kondisi query yang ditentukan oleh
WHERE.Kondisi query yang ditentukan untuk kolom dinamis dalam
WHEREharus berupa string hex.
Untuk informasi lebih lanjut tentang kolom dinamis, lihat Kolom Dinamis.
GROUP BY
Parameter GROUP BY didukung oleh LindormTable dan LindormTSDB. Parameter ini dapat digunakan untuk mengelompokkan dan menggabungkan hasil query.
ORDER BY
Parameter ORDER BY menentukan satu atau beberapa kolom untuk mengurutkan hasil query.
LIMIT
Parameter LIMIT digunakan untuk mengembalikan hasil query per halaman. Jika parameter LIMIT diikuti oleh satu digit, digit tersebut menunjukkan jumlah baris yang dikembalikan di setiap halaman. Jika parameter LIMIT diikuti oleh dua digit yang dipisahkan oleh koma (,), digit pertama menunjukkan offset dan digit kedua menunjukkan jumlah baris yang dikembalikan di setiap halaman. Klausa LIMIT integer [OFFSET integer] setara dengan klausa LIMIT integer, integer.
Jika Anda menentukan nilai offset dalam klausa LIMIT, baris yang dilewati tetap akan diperiksa oleh pernyataan. Untuk mengurangi beban kerja pada node LindormTable, kami sarankan menyetel offset ke nilai yang sama dengan atau kurang dari 5.000.
Jika kolom dinamis diaktifkan untuk tabel lebar, perhatikan hal-hal berikut:
Pernyataan
SELECT *digunakan untuk menanyakan data dalam tabel yang memiliki kolom dinamis diaktifkan. Dalam hal ini, tambahkan klausa LIMIT di akhir pernyataan agar Lindorm SQL dapat memastikan integritas metadata dari set hasil.Jika Anda menggunakan pernyataan
SELECT *dengan klausa LIMIT yang ditentukan untuk menanyakan data dalam tabel yang memiliki kolom dinamis diaktifkan, nilai maksimum default LIMIT adalah 5.000. Anda dapat menentukan nilai maksimum. Jika nilai yang diminta melebihi nilai maksimum, kesalahan akan dikembalikan.
HINT
Dalam LindormTable dan LindormTSDB, Anda dapat menggunakan hint dalam pernyataan untuk mengoptimalkan rencana query atau menggunakan fitur query tertentu. Untuk informasi lebih lanjut, lihat Ikhtisar.
Contoh
Dalam contoh berikut, tabel sampel sensor dibuat dengan menjalankan pernyataan yang dijelaskan dalam dokumentasi sintaks CREATE TABLE dan UPSERT:
CREATE TABLE sensor (
device_id VARCHAR NOT NULL,
region VARCHAR NOT NULL,
time BIGINT NOT NULL,
temperature DOUBLE,
humidity BIGINT,
PRIMARY KEY(device_id, region, time)
);Menjalankan query sederhana
SELECT * FROM sensor; --Pilih semua kolom dalam tabel.
SELECT device_id,region,humidity FROM senor; --Pilih sebagian kolom dalam tabel.
SELECT * FROM sensor WHERE device_id = 'F07A1260' LIMIT 20 OFFSET 5; --Klausa LIMIT setara dengan LIMIT 5,20.
SELECT count(*) AS countRow FROM sensor; --Tentukan alias untuk kolom dalam hasil.Menjalankan query agregat
Ukur jumlah semua catatan data yang dilaporkan oleh perangkat
F07A1260pada titik waktu tertentu.
SELECT count(*) FROM sensor WHERE device_id = 'F07A1260' AND time = '2021-04-22 15:33:00';Tanyakan suhu tertinggi perangkat
F07A1260dalam periode waktu yang ditentukan.
SELECT max(temperature) AS max_temp FROM sensor WHERE device_id = 'F07A1260' AND time >= '2021-04-22 15:33:00' AND time < '2021-04-22 15:33:20';Menjalankan query berdasarkan kondisi
Tanyakan kelembaban perangkat dengan ID
F07A1260. Perangkat harus memenuhi salah satu dari kondisi berikut: 1. Wilayah adalah north-cn dan suhu lebih tinggi dari 15 derajat. 2. Wilayah adalah south-cn, suhu lebih tinggi dari 10 derajat, dan kelembaban tidak kosong.
SELECT device_id, humidity FROM sensor WHERE ((region='north-cn' AND temperature >15) OR (region='south-cn' AND temperature >10))
AND device_id = 'F07A1260' AND humidity is not null;Tanyakan data perangkat dengan ID
F07A1260atauF07A1261.
SELECT * FROM sensor WHERE device_id IN ('F07A1260', 'F07A1261');Memaksa menjalankan query yang tidak efisien
SELECT /*+ _l_allow_filtering_ */ * FROM sensor WHERE humidity=20;