

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# SELECT
<a name="select"></a>

Mengambil baris data dari nol atau lebih tabel.

**catatan**  
Topik ini menyediakan informasi ringkasan untuk referensi. Untuk informasi lengkap tentang penggunaan`SELECT`dan bahasa SQL berada di luar cakupan dokumentasi ini. Untuk informasi tentang menggunakan SQL yang khusus untuk Athena, lihat[Pertimbangan dan batasan untuk kueri SQL di Amazon Athena](other-notable-limitations.md)dan[Jalankan kueri SQL di Amazon Athena](querying-athena-tables.md). Untuk contoh membuat database, membuat tabel, dan menjalankan `SELECT` kueri pada tabel di Athena, lihat. [Memulai](getting-started.md)

## Sinopsis
<a name="synopsis"></a>

```
[ WITH with_query [, ...] ]
SELECT [ ALL | DISTINCT ] select_expression [, ...]
[ FROM from_item [, ...] ]
[ WHERE condition ]
[ GROUP BY [ ALL | DISTINCT ] grouping_element [, ...] ]
[ HAVING condition ]
[ { UNION | INTERSECT | EXCEPT } [ ALL | DISTINCT ] select ]
[ ORDER BY expression [ ASC | DESC ] [ NULLS FIRST | NULLS LAST] [, ...] ]
[ OFFSET count [ ROW | ROWS ] ]
[ LIMIT [ count | ALL ] ]
```

**catatan**  
kata Reserved dalam pernyataan SQL SELECT harus tertutup dalam tanda kutip ganda. Untuk informasi selengkapnya, lihat [Kata kunci yang dicadangkan untuk melarikan diri dalam pernyataan SQL SELECT](reserved-words.md#list-of-reserved-words-sql-select).

## Parameter
<a name="select-parameters"></a>

**[DENGAN with\$1query [,...]]**  
Anda dapat menggunakan`WITH`untuk meratakan kueri Nest, atau untuk menyederhanakan subqueries.  
Menggunakan `WITH` klausa untuk membuat kueri rekursif didukung mulai dari mesin Athena versi 3. Kedalaman rekursi maksimum adalah 10.  
Parameter`WITH`mendahului`SELECT`dalam kueri dan mendefinisikan satu atau lebih subqueries untuk digunakan dalam`SELECT`kueri.   
Setiap subquery mendefinisikan tabel sementara, mirip dengan definisi tampilan, yang dapat Anda referensi dalam`FROM`Klausul WHER Tabel yang digunakan hanya saat kueri berjalan.   
`with_query`Sintaks adalah:  

```
subquery_table_name [ ( column_name [, ...] ) ] AS (subquery)
```
Di mana:  
+  `subquery_table_name`adalah nama unik untuk tabel sementara yang mendefinisikan hasil`WITH`Klausul subkueri. Setiap`subquery`harus memiliki nama tabel yang dapat direferensikan dalam`FROM`Klausul WHER
+  `column_name [, ...]`adalah daftar opsional nama kolom output. Jumlah nama kolom harus sama dengan atau kurang dari jumlah kolom yang ditentukan oleh`subquery`.
+  `subquery`adalah pernyataan kueri.

**[SEMUA \$1 BERBEDA] select\$1expression**  
 `select_expression`menentukan baris yang akan dipilih. A `select_expression` dapat menggunakan salah satu format berikut:  

```
expression [ [ AS ] column_alias ] [, ...]
```

```
row_expression.* [ AS ( column_alias [, ...] ) ]
```

```
relation.*
```

```
*
```
+ `expression [ [ AS ] column_alias ]`Sintaks menentukan kolom output. `[AS] column_alias`Sintaks opsional menentukan nama heading kustom yang akan digunakan untuk kolom dalam output.
+ Untuk`row_expression.* [ AS ( column_alias [, ...] ) ]`, `row_expression` adalah ekspresi arbitrer dari tipe `ROW` data. Bidang baris menentukan kolom keluaran yang akan dimasukkan dalam hasil.
+ Untuk`relation.*`, kolom termasuk dalam hasil. `relation` Sintaks ini tidak mengizinkan penggunaan alias kolom.
+ Tanda bintang `*` menentukan bahwa semua kolom dimasukkan dalam set hasil.
+ Dalam kumpulan hasil, urutan kolom sama dengan urutan spesifikasinya dengan ekspresi pilih. Jika ekspresi pilih mengembalikan beberapa kolom, urutan kolom mengikuti urutan yang digunakan dalam relasi sumber atau ekspresi tipe baris.
+ Ketika alias kolom ditentukan, alias akan mengganti nama kolom atau kolom baris yang sudah ada sebelumnya. Jika ekspresi pilih tidak memiliki nama kolom, nama kolom anonim yang diindeks nol (`_col0`,`_col1`,`_col2, ...`) ditampilkan dalam output.
+  `ALL` sebagai default. Menggunakan`ALL`diperlakukan sama seperti jika dihilangkan; semua baris untuk semua kolom yang dipilih dan duplikat disimpan.
+ Gunakan`DISTINCT`untuk kembali nilai-nilai hanya berbeda saat kolom berisi nilai-nilai duplikat.

**DARI from\$1item [,...]**  
Menunjukkan masukan untuk kueri, dimana`from_item`bisa menjadi tampilan, bergabung membangun, atau subquery seperti yang dijelaskan di bawah ini.  
Parameter`from_item`dapat berupa:  
+  `table_name [ [ AS ] alias [ (column_alias [, ...]) ] ]` 

  Di mana`table_name`adalah nama dari tabel target untuk memilih baris,`alias`adalah nama untuk memberikan output dari`SELECT`pernyataan, dan`column_alias`mendefinisikan kolom untuk`alias`ditentukan.
 **-ATAU-**   
+  `join_type from_item [ ON join_condition | USING ( join_column [, ...] ) ]` 

  Di mana`join_type`adalah salah satu dari:
  +  `[ INNER ] JOIN` 
  +  `LEFT [ OUTER ] JOIN` 
  +  `RIGHT [ OUTER ] JOIN` 
  +  `FULL [ OUTER ] JOIN` 
  +  `CROSS JOIN` 
  +  `ON join_condition | USING (join_column [, ...])`Di mana menggunakan`join_condition`memungkinkan Anda untuk menentukan nama kolom untuk bergabung kunci dalam beberapa tabel, dan menggunakan`join_column`membutuhkan`join_column`ada di kedua tabel.

**[syarat WHERE]**  
Menyaring hasil sesuai dengan`condition`Anda tentukan, tempat`condition`umumnya memiliki sintaks berikut.  

```
column_name operator value [[[AND | OR] column_name operator value] ...]
```
Itu *operator* bisa menjadi salah satu pembanding`=`,,`>`,`<`,`>=`, `<=``<>`,`!=`.   
Ekspresi subquery berikut juga dapat digunakan dalam`WHERE`Klausul WHER  
+ `[NOT] BETWEEN integer_A AND integer_B`- Menentukan rentang antara dua bilangan bulat, seperti dalam contoh berikut. Jika tipe data kolom adalah`varchar`, kolom harus dilemparkan ke integer terlebih dahulu.

  ```
  SELECT DISTINCT processid FROM "webdata"."impressions"
  WHERE cast(processid as int) BETWEEN 1500 and 1800
  ORDER BY processid
  ```
+ `[NOT] LIKE value`— Pencarian untuk pola yang ditentukan. Gunakan tanda persen (`%`) sebagai karakter wildcard, seperti dalam contoh berikut.

  ```
  SELECT * FROM "webdata"."impressions"
  WHERE referrer LIKE '%.org'
  ```
+ `[NOT] IN (value[, value[, ...])`— Menentukan daftar nilai yang mungkin untuk kolom, seperti dalam contoh berikut.

  ```
  SELECT * FROM "webdata"."impressions"
  WHERE referrer IN ('example.com','example.net','example.org')
  ```

**[GROUP BY [SEMUA \$1 berbeda] grouping\$1expressions [,...]]**  
Membagi output dari`SELECT`pernyataan ke dalam baris dengan nilai-nilai yang cocok.  
 `ALL`dan`DISTINCT`menentukan apakah duplikat pengelompokan set masing-masing menghasilkan baris output yang berbeda. Jika dihilangkan,`ALL`diasumsikan.   
`grouping_expressions`memungkinkan Anda untuk melakukan operasi pengelompokan kompleks. Anda dapat menggunakan operasi pengelompokan kompleks untuk melakukan analisis yang memerlukan agregasi pada beberapa set kolom dalam satu kueri.  
Parameter`grouping_expressions`elemen dapat fungsi apapun, seperti`SUM`,`AVG`, atau`COUNT`, dilakukan pada kolom input.   
`GROUP BY`ekspresi dapat grup output dengan masukan nama kolom yang tidak muncul dalam output dari`SELECT`.   
Semua ekspresi output harus baik fungsi agregat atau kolom hadir dalam`GROUP BY`Klausul WHER   
Anda dapat menggunakan kueri tunggal untuk melakukan analisis yang membutuhkan menggabungkan beberapa set kolom.   
Athena mendukung agregasi kompleks menggunakan`GROUPING SETS`,`CUBE`dan`ROLLUP`.`GROUP BY GROUPING SETS`menentukan beberapa daftar kolom untuk grup pada.`GROUP BY CUBE`menghasilkan semua set pengelompokan mungkin untuk satu set tertentu kolom.`GROUP BY ROLLUP`menghasilkan semua subtotal mungkin untuk satu set tertentu kolom. Operasi pengelompokan kompleks tidak mendukung pengelompokan ekspresi terdiri dari kolom input. Hanya nama kolom yang diperbolehkan.   
Anda sering dapat menggunakan`UNION ALL`untuk mencapai hasil yang sama seperti ini`GROUP BY`, tetapi kueri yang menggunakan`GROUP BY`memiliki keuntungan membaca data satu kali, sedangkan`UNION ALL`membaca data yang mendasari tiga kali dan dapat menghasilkan hasil yang tidak konsisten saat sumber data dapat berubah. 

**[Memiliki syarat]**  
Digunakan dengan fungsi agregat dan`GROUP BY`Klausul WHER Mengontrol grup mana yang dipilih, menghilangkan grup yang tidak memuaskan`condition`. Penyaringan ini terjadi setelah grup dan agregat dihitung.

**[\$1UNION \$1 INTERSECT \$1 KECUL\$1 [SEMUA \$1 berbeda] union\$1query]]**  
`UNION`,`INTERSECT`, dan`EXCEPT`menggabungkan hasil lebih dari satu`SELECT`pernyataan ke dalam kueri tunggal.`ALL`atau`DISTINCT`mengontrol keunikan baris termasuk dalam set hasil akhir.   
`UNION`menggabungkan baris yang dihasilkan dari kueri pertama dengan baris yang dihasilkan dari kueri kedua. Untuk menghilangkan duplikat,`UNION`membangun sebuah tabel hash, yang mengkonsumsi memori. Untuk performa yang lebih baik, pertimbangkan menggunakan`UNION ALL`jika permintaan Anda tidak memerlukan penghapusan duplikat. Banyak`UNION`diproses kiri ke kanan kecuali Anda menggunakan tanda kurung untuk secara eksplisit menentukan urutan pemrosesan.  
`INTERSECT`kembali hanya baris yang hadir dalam hasil kedua pertama dan kedua kueri.  
`EXCEPT`mengembalikan baris dari hasil kueri pertama, tidak termasuk baris ditemukan oleh kueri kedua.  
`ALL`menyebabkan semua baris untuk dimasukkan, bahkan jika baris identik.  
`DISTINCT`menyebabkan baris hanya unik untuk dimasukkan dalam set hasil gabungan.

**[ORDER BY ekspresi [ASC \$1 DESC] [NULLS PERTAMA \$1 NULLS TERAKHIR] [,...]]**  
Mengurutkan hasil yang ditetapkan oleh satu atau lebih output`expression`.   
Saat klausa berisi beberapa ekspresi, hasil set diurutkan sesuai dengan yang pertama`expression`. Lalu yang kedua`expression`diterapkan ke baris yang memiliki nilai yang cocok dari ekspresi pertama, dan seterusnya.   
Setiap`expression`dapat menentukan kolom keluaran dari`SELECT`atau nomor urut untuk kolom output dengan posisi, mulai dari satu.  
`ORDER BY`dievaluasi sebagai langkah terakhir setelah`GROUP BY`atau`HAVING`Klausul WHER`ASC`dan`DESC`Menentukan apakah hasil diurutkan dalam urutan naik atau turun. Urutan penyortiran default adalah ascending (`ASC`). Default null pemesanan adalah`NULLS LAST`, terlepas dari urutan menaik atau menurun.

**[Hitungan OFFSET [BARIS \$1 BARIS]]**  
Gunakan `OFFSET` klausa untuk membuang sejumlah baris terdepan dari kumpulan hasil. Jika `ORDER BY` klausa ada, `OFFSET` klausa dievaluasi melalui kumpulan hasil yang diurutkan, dan himpunan tetap diurutkan setelah baris yang dilewati dibuang. Jika kueri tidak memiliki `ORDER BY` klausa, itu adalah arbitrer baris mana yang dibuang. Jika hitungan ditentukan `OFFSET` sama dengan atau melebihi ukuran set hasil, hasil akhirnya kosong. 

**LIMIT [menghitung \$1 SEMUA]**  
Membatasi jumlah baris dalam hasil diatur ke`count`.`LIMIT ALL`adalah sama dengan menghilangkan`LIMIT`Klausul WHER Jika kueri tidak memiliki`ORDER BY`klausul, hasilnya sewenang-wenang.

**Tablesample [BERNOULLI \$1 SISTEM] (persentase**  
Operator opsional untuk memilih baris dari tabel berdasarkan metode sampling.  
 `BERNOULLI`memilih setiap baris untuk berada dalam sampel tabel dengan probabilitas`percentage`. Semua blok fisik tabel dipindai, dan baris tertentu dilewati berdasarkan perbandingan antara sampel`percentage`dan nilai acak dihitung pada saat runtime.   
Dengan`SYSTEM`, tabel dibagi menjadi segmen logis data, dan tabel sampel di granularity ini.   
Entah semua baris dari segmen tertentu yang dipilih, atau segmen dilewati berdasarkan perbandingan antara sampel`percentage`dan nilai acak dihitung pada saat runtime.`SYSTEM`sampling tergantung pada konektor. Metode ini tidak menjamin probabilitas sampling independen.

**[UNNEST (array\$1or\$1map) [DENGAN ORDIALITAS]]**  
Memperluas larik atau peta ke dalam relasi. Larik diperluas menjadi satu kolom. Peta diperluas menjadi dua kolom (*kunci*,*nilai*).   
Anda dapat menggunakan`UNNEST`dengan beberapa argumen, yang diperluas menjadi beberapa kolom dengan banyak baris sebagai argumen kardinalitas tertinggi.   
kolom lainnya empuk dengan nulls.   
Parameter`WITH ORDINALITY`klausa menambahkan kolom ordinalitas sampai akhir.  
 `UNNEST`biasanya digunakan dengan`JOIN`dan dapat referensi kolom dari relasi di sisi kiri`JOIN`.

## Mendapatkan lokasi file untuk data sumber di Amazon S3
<a name="select-path"></a>

Untuk melihat lokasi file Amazon S3 untuk data dalam baris tabel, Anda dapat menggunakan`"$path"`dalam`SELECT`query, seperti dalam contoh berikut:

```
SELECT "$path" FROM "my_database"."my_table" WHERE year=2019;
```

Perintah ini akan menampilkan hasil berikut.

```
s3://amzn-s3-demo-bucket/datasets_mytable/year=2019/data_file1.json
```

Untuk kembali diurutkan, daftar unik dari jalur nama file S3 untuk data dalam tabel, Anda dapat menggunakan`SELECT DISTINCT`dan`ORDER BY`, seperti dalam contoh berikut.

```
SELECT DISTINCT "$path" AS data_source_file
FROM sampledb.elb_logs
ORDER By data_source_file ASC
```

Untuk mengembalikan hanya nama file tanpa path, Anda dapat melewati`"$path"`sebagai parameter untuk`regexp_extract`, seperti dalam contoh berikut.

```
SELECT DISTINCT regexp_extract("$path", '[^/]+$') AS data_source_file
FROM sampledb.elb_logs
ORDER By data_source_file ASC
```

Untuk mengembalikan data dari file tertentu, tentukan file di`WHERE`, seperti dalam contoh berikut.

```
SELECT *,"$path" FROM my_database.my_table WHERE "$path" = 's3://amzn-s3-demo-bucket/my_table/my_partition/file-01.csv'
```

Untuk informasi selengkapnya dan untuk contoh, lihat artikel Pusat Pengetahuan[Bagaimana saya bisa melihat file sumber Amazon S3 untuk baris dalam tabel Athena?](https://aws.amazon.com/premiumsupport/knowledge-center/find-s3-source-file-athena-table-row/).

**catatan**  
Di Athena, kolom metadata tersembunyi Hive atau Iceberg`$bucket`, `$file_modified_time``$file_size`, dan tidak didukung untuk tampilan. `$partition`

## Melarikan diri dari kutipan tunggal
<a name="select-escaping"></a>

 Untuk melarikan diri kutipan tunggal, mendahului dengan kutipan tunggal lain, seperti dalam contoh berikut. Jangan mengelirukan ini dengan sebut harga berganda. 

```
Select 'O''Reilly'
```

**Hasil**  
`O'Reilly`

## Sumber daya tambahan
<a name="select-additional-resources"></a>

Untuk informasi selengkapnya tentang penggunaan`SELECT`pernyataan di Athena, lihat sumber daya berikut.


| Untuk informasi tentang ini | Lihat ini | 
| --- | --- | 
| Menjalankan kueri di Athena | [Jalankan kueri SQL di Amazon Athena](querying-athena-tables.md) | 
| Untuk membuat tabel menggunakan SELECT API | [Buat tabel dari hasil kueri (CTAS)](ctas.md) | 
| Memasukkan data dariSELECTquery ke dalam tabel lain | [INSERT INTO](insert-into.md) | 
| Menggunakan fungsi bawaan diSELECTpernyataan | [Fungsi di Amazon Athena](functions.md) | 
| Menggunakan fungsi yang ditetapkan pengguna diSELECTpernyataan | [Kueri dengan fungsi yang ditentukan pengguna](querying-udf.md) | 
| Memkueri metadata Katalog Data | [Kueri AWS Glue Data Catalog](querying-glue-catalog.md) | 