全部产品
Search
文档中心

Hologres:SELECT

更新时间:Feb 04, 2026

Topik ini menjelaskan cara menggunakan pernyataan SELECT untuk mengquery data di Hologres.

Ikhtisar perintah

Pernyataan SELECT mengkueri data dari nol atau lebih tabel. Parameter utama tercantum dalam tabel berikut.

Parameter

WITH clause

Daftar SELECT

Klausa FROM

Klausa WHERE

Klausa GROUP BY

Klausa CUBE

Klausa DISTINCT

Klausa COUNT DISTINCT

Klausa UNION

Klausa INTERSECT

Klausa EXCEPT

Klausa ORDER BY

Klausa LIMIT

Tidak ada

Sintaks perintah

Sintaks dasar pernyataan SELECT adalah sebagai berikut.

[ WITH with_query [, ...] ]
SELECT [ALL | DISTINCT [ON (expression [, ...])]]
  * | expression [[AS] output_name] [, ...]
  [FROM from_item [, ...]]
  [WHERE condition]
  [GROUP BY grouping_element [, ...]]
  [HAVING condition [, ...]]
  [{UNION | INTERSECT | EXCEPT} [ALL] select]
  [ORDER BY expression [ASC | DESC | USING operator] [, ...]]
  [LIMIT {count | ALL}]

Dalam sintaks ini, grouping_element dan from_item didefinisikan sebagai berikut:

  • grouping_element berisi sebuah expression. Ekspresi dapat berupa nama kolom, konstanta, fungsi, atau kombinasi apa pun dari nama kolom dan konstanta yang dihubungkan oleh operator aritmetika atau bitwise.

  • from_item berisi

    table_name [[AS] alias [( column_alias [, ...] )]]
    (select) [AS] alias [( column_alias [, ...] )]
    from_item [NATURAL] join_type from_item
              [ON join_condition | USING ( join_column [, ...] )]

Penggunaan perintah

Berikut adalah metode SELECT umum:

  1. Semua elemen dalam daftar FROM, yang merupakan tabel nyata atau virtual, dievaluasi. Jika daftar berisi lebih dari satu elemen, hasilnya adalah gabungan mereka.

  2. Jika klausa WHERE ditentukan, klausa tersebut menyaring semua baris yang tidak memenuhi kondisi yang ditentukan.

  3. Jika klausa GROUP BY ditentukan atau jika fungsi agregat digunakan, baris-baris tersebut digabungkan ke dalam kelompok berdasarkan nilai yang cocok. Fungsi agregat kemudian dihitung untuk setiap kelompok. Jika klausa HAVING ada, klausa tersebut menyaring kelompok yang tidak memenuhi kondisi yang ditentukan.

  4. Ekspresi output SELECT digunakan untuk menghitung baris output aktual dari baris atau kelompok yang dipilih.

  5. Anda dapat menggabungkan beberapa pernyataan SELECT menjadi satu set hasil menggunakan operator himpunan UNION, INTERSECT, dan EXCEPT. Operator UNION mengembalikan semua baris yang ada di salah satu atau kedua set hasil. Operator INTERSECT mengembalikan semua baris yang ada di kedua set hasil. Operator EXCEPT mengembalikan baris yang ada di set hasil pertama tetapi tidak ada di yang kedua. Untuk ketiga operator tersebut, baris duplikat dihapus dari set hasil akhir kecuali Anda menentukan ALL. Secara default, operator-operator ini menghapus duplikat, yang setara dengan menentukan DISTINCT. Perhatikan bahwa perilaku ini berbeda dari pernyataan SELECT standar, di mana perilaku default-nya adalah mengembalikan semua baris, termasuk duplikat.

  6. Jika Anda menentukan klausa ORDER BY, baris yang dikembalikan diurutkan sesuai urutan yang ditentukan. Jika Anda tidak menentukan klausa ORDER BY, baris dikembalikan dalam urutan arbitrer, yang biasanya merupakan urutan tercepat bagi sistem untuk menghasilkannya.

  7. Jika klausa LIMIT (atau FETCH FIRST) atau OFFSET ditentukan, pernyataan SELECT hanya mengembalikan subset dari baris hasil.

Deskripsi parameter

  • WITH clause

    • Ikhtisar Perintah

      Klausa WITH memungkinkan Anda mendefinisikan satu atau beberapa subkueri yang dapat dirujuk berdasarkan nama dalam kueri utama. Subkueri bernama ini dikenal sebagai Common Table Expressions (CTEs). Klausa WITH biasanya ditempatkan sebelum pernyataan SELECT utama. Sintaksnya adalah sebagai berikut:

      with query_name [ ( column_name [, ...] ) ] AS ( select )
    • Deskripsi Parameter

      Parameter

      Deskripsi

      query_name

      Menentukan nama CTE saat ini. Nama ini dapat berupa pengenal yang valid apa pun.

      column_name

      Menampilkan daftar nama kolom yang sesuai dengan nilai kembali subkueri. Ini mirip dengan semantik AS dalam klausa SELECT. Subkueri dapat berupa kueri SELECT biasa.

      CTE dipisahkan dengan koma. Definisi CTE yang lebih belakang dapat mereferensikan CTE sebelumnya. Saat ini, CTE rekursif tidak didukung. Dalam kueri selanjutnya, Anda dapat menggunakan query_name secara langsung sebagai tampilan. Jika daftar column_name tidak ditentukan, column_name tampilan tersebut secara default menggunakan nama kolom yang dikembalikan oleh subkueri. Jika daftar column_name ditentukan, Anda harus menggunakan column_name yang telah didefinisikan, dan jumlah entri column_name harus sesuai dengan jumlah kolom yang dikembalikan oleh pernyataan SELECT.

  • SELECT list

    • Ikhtisar Perintah

      Daftar SELECT, yaitu bagian pernyataan antara kata kunci SELECT dan FROM, menentukan ekspresi yang membentuk baris output pernyataan SELECT. Ekspresi ini dapat merujuk pada kolom yang dihitung dalam klausa FROM.

    • Deskripsi Parameter

      Setiap kolom output dalam pernyataan SELECT memiliki nama. Dalam pernyataan SELECT sederhana, nama ini digunakan untuk memberi label kolom saat ditampilkan. Jika pernyataan SELECT adalah subkueri, kueri luar menggunakan nama ini untuk mereferensikan kolom dari tabel virtual yang dihasilkan oleh subkueri. Untuk menentukan nama kolom output, tambahkan AS output_name setelah ekspresi kolom. Anda dapat menghilangkan AS, tetapi hanya jika nama output yang diinginkan tidak cocok dengan kata kunci PostgreSQL apa pun. Untuk menghindari potensi konflik dengan kata kunci di masa depan, kami menyarankan agar Anda menggunakan AS atau membungkus nama output dalam tanda kutip ganda. Jika Anda tidak menentukan nama kolom, PostgreSQL secara otomatis menetapkan satu. Jika ekspresi kolom adalah referensi kolom sederhana, nama yang ditetapkan sama dengan nama kolom tersebut. Dalam kasus yang lebih kompleks yang melibatkan fungsi atau nama tipe, sistem dapat menghasilkan nama generik, seperti ?column?.

      Anda dapat mereferensikan kolom output berdasarkan namanya dalam klausa ORDER BY dan GROUP BY. Namun, Anda tidak dapat mereferensikan kolom output berdasarkan namanya dalam klausa WHERE atau HAVING. Dalam klausa tersebut, Anda harus menggunakan ekspresinya sendiri.

      Anda dapat menggunakan tanda bintang (*) dalam daftar output sebagai singkatan untuk semua kolom dari baris yang dipilih. Anda juga dapat menggunakan table_name.* sebagai singkatan untuk semua kolom dari tabel tertentu. Dalam kasus ini, Anda tidak dapat menggunakan AS untuk menentukan nama baru. Nama kolom output akan sama dengan nama kolom asli tabel.

  • FROM clause

    • Ikhtisar Perintah

      Klausa FROM menentukan satu atau beberapa tabel sumber untuk pernyataan SELECT. Jika Anda menentukan beberapa tabel sumber, hasilnya adalah Produk Kartesius (cross join) dari semua tabel sumber. Biasanya, Anda dapat menambahkan klausa WHERE dengan kondisi join untuk membatasi baris yang dikembalikan menjadi subset kecil dari Produk Kartesius.

    • Deskripsi Parameter

      Klausa FROM dapat mencakup elemen-elemen berikut:

      Element

      Deskripsi

      table_name

      Nama tabel atau tampilan yang ada (opsional dengan skema).

      alias

      Nama alternatif untuk item FROM yang mencakup alias. Alias membuat penulisan lebih ringkas atau menyelesaikan ambiguitas dalam self-join (di mana tabel yang sama dipindai beberapa kali). Ketika alias disediakan, nama tabel atau fungsi yang sebenarnya disembunyikan. Misalnya, diberikan FROM foo AS f, sisa SELECT harus merujuk item FROM ini sebagai f, bukan foo.

      select

      Sub-SELECT dapat muncul dalam klausa FROM. Ini bertindak seolah-olah outputnya adalah tabel sementara yang dibuat selama perintah SELECT berlangsung. Perhatikan bahwa sub-SELECT harus diapit tanda kurung dan harus memiliki alias.

      function_name

      Pemanggilan fungsi dapat muncul dalam klausa FROM (terutama berguna untuk fungsi yang mengembalikan set hasil, tetapi fungsi apa pun dapat digunakan). Ini bertindak seolah-olah output fungsi tersebut adalah tabel sementara yang dibuat selama perintah SELECT berlangsung.

      Anda dapat memberikan alias seperti halnya pada tabel. Jika Anda memberikan alias, Anda juga dapat menentukan daftar alias kolom untuk memberikan nama alternatif pada satu atau beberapa atribut dari tipe kembalian komposit fungsi tersebut, termasuk kolom baru apa pun yang ditambahkan oleh ORDINALITY (jika ada).

      Anda dapat menggabungkan beberapa pemanggilan fungsi menjadi satu item klausa FROM dengan mengapitnya dalam ROWS FROM(。). Output dari item tersebut menggabungkan baris pertama dari setiap fungsi, lalu baris kedua dari setiap fungsi, dan seterusnya. Jika beberapa fungsi menghasilkan lebih sedikit baris daripada yang lain, nilai NULL mengisi posisi data yang hilang, sehingga jumlah total baris yang dikembalikan selalu sesuai dengan fungsi yang menghasilkan baris paling banyak.

      join_type

      Mencakup lima jenis berikut:

      • [ INNER ] JOIN

        Untuk jenis join INNER dan OUTER, Anda harus menentukan kondisi join: salah satu dari NATURAL, ON join_condition, atau USING (join_column [, ...]) (hanya satu). Lihat di bawah untuk maknanya. Untuk CROSS JOIN, klausa-klausa ini tidak boleh muncul. Klausa JOIN menggabungkan dua item FROM (disebut “tabel” untuk kenyamanan, meskipun bisa berupa jenis item FROM apa pun). Gunakan tanda kurung untuk mengontrol urutan bersarang jika diperlukan. Tanpa tanda kurung, JOIN bersarang dari kiri ke kanan. Dalam semua kasus, pengikatan JOIN lebih kuat daripada item daftar FROM yang dipisahkan koma.

      • LEFT [ OUTER ] JOIN

        LEFT OUTER JOIN mengembalikan semua baris dari Produk Kartesius terbatas (semua kombinasi yang memenuhi kondisi join), ditambah satu salinan setiap baris yang tidak cocok dari tabel kiri. Baris kiri yang tidak cocok diperluas menjadi baris tabel join lengkap dengan memasukkan nilai NULL di kolom sisi kanan. Perhatikan bahwa hanya kondisi milik klausa JOIN itu sendiri yang menentukan baris mana yang cocok. Kondisi luar diterapkan setelahnya.

      • RIGHT [ OUTER ] JOIN

        RIGHT OUTER JOIN mengembalikan semua baris yang digabungkan ditambah setiap baris sisi kanan yang tidak cocok (diperluas dengan NULL di sisi kiri). Ini hanyalah kenyamanan notasi, karena Anda dapat mengonversinya menjadi LEFT OUTER JOIN dengan menukar tabel kiri dan kanan.

      • FULL [ OUTER ] JOIN

        FULL OUTER JOIN mengembalikan semua baris yang digabungkan, ditambah setiap baris sisi kiri yang tidak cocok (diperluas dengan NULL di sisi kanan), ditambah setiap baris sisi kanan yang tidak cocok (diperluas dengan NULL di sisi kiri).

      • CROSS JOIN

        CROSS JOIN dan INNER JOIN menghasilkan Produk Kartesius sederhana—hasil yang sama seperti mencantumkan dua tabel dalam FROM—tetapi dibatasi oleh kondisi join (jika ada). CROSS JOIN setara dengan INNER JOIN ON (TRUE), artinya kondisi tersebut tidak menghapus baris apa pun. Jenis join ini murni merupakan kenyamanan notasi, karena semua yang dilakukannya juga dapat dilakukan dengan FROM dan WHERE biasa.

      join_condition

      join_condition adalah ekspresi yang mengevaluasi ke nilai Boolean (mirip dengan klausa WHERE), yang menentukan baris mana yang dianggap cocok dalam join.

      USING ( a, b, ... )

      Klausa USING (a, b...) adalah singkatan untuk ON left_table.a = right_table.a AND left_table.b = right_table.b .... Selain itu, USING memastikan hanya satu kolom dari setiap pasangan yang sama muncul dalam output join.

      NATURAL

      Singkatan untuk USING yang mencantumkan semua kolom dengan nama identik di kedua tabel.

  • WHERE clause

    • Ikhtisar Perintah

      Klausa WHERE opsional memiliki bentuk berikut:

      WHERE condition
    • Deskripsi Parameter

      Parameter

      Deskripsi

      condition

      condition adalah ekspresi apa pun yang mengevaluasi ke hasil Boolean. Setiap baris yang tidak memenuhi kondisi ini dihapus dari output. Suatu baris memenuhi kondisi jika mengganti nilai aktualnya untuk referensi variabel menyebabkan ekspresi mengembalikan true.

  • GROUP BY clause

    • Ikhtisar Perintah

      Klausa GROUP BY opsional menggabungkan semua baris yang dipilih yang memiliki nilai yang sama untuk ekspresi pengelompokan menjadi satu baris ringkasan. Klausa GROUP BY memiliki bentuk berikut:

      GROUP BY grouping_element [, ...]
    • Deskripsi Parameter

      Ekspresi dalam grouping_element dapat berupa nama kolom input, nama atau nomor ordinal kolom output dari daftar SELECT, atau ekspresi yang dibentuk dari nilai kolom input. Jika suatu nama ambigu, klausa GROUP BY menginterpretasikannya sebagai nama kolom input, bukan nama kolom output.

      Jika elemen pengelompokan berisi GROUPING SETS, ROLLUP, atau CUBE, klausa GROUP BY mendefinisikan beberapa set pengelompokan independen. Ini setara dengan UNION ALL dari subkueri, di mana setiap subkueri memiliki klausa GROUP BY sendiri yang sesuai dengan salah satu set pengelompokan tersebut.

      Jika Anda menggunakan fungsi agregat, fungsi tersebut dihitung di seluruh baris dalam setiap kelompok, yang menghasilkan satu nilai untuk setiap kelompok. Jika Anda menggunakan fungsi agregat tetapi tidak menyertakan klausa GROUP BY, kueri memperlakukan semua baris yang dipilih sebagai satu kelompok. Anda dapat menyaring baris yang diteruskan ke fungsi agregat dengan menambahkan klausa FILTER ke pemanggilan fungsi agregat. Jika klausa FILTER ada, hanya baris yang memenuhi kondisi filter yang dimasukkan ke dalam input untuk fungsi agregat tersebut.

      Jika klausa GROUP BY atau fungsi agregat apa pun ada, ekspresi dalam daftar SELECT tidak dapat mereferensikan kolom yang tidak dikelompokkan, kecuali dalam fungsi agregat atau jika kolom yang tidak dikelompokkan tersebut secara fungsional bergantung pada kolom yang dikelompokkan. Hal ini karena jika tidak, akan ada lebih dari satu nilai yang mungkin dikembalikan untuk kolom yang tidak dikelompokkan tersebut. Ketergantungan fungsional ada jika kolom yang dikelompokkan mencakup primary key, atau subset dari primary key, dari tabel yang berisi kolom yang tidak dikelompokkan tersebut.

      Semua fungsi agregat dihitung sebelum ekspresi skalar apa pun dalam klausa HAVING atau daftar SELECT. Artinya, misalnya, ekspresi CASE tidak dapat digunakan untuk melewati perhitungan fungsi agregat.

  • CUBE clause

    • CUBE

      Subklausa CUBE secara otomatis membuat subtotal untuk semua kombinasi kolom pengelompokan yang ditentukan dalam klausa GROUP BY. Set hasil mencakup semua kombinasi nilai yang mungkin dalam kolom dimensi, bersama dengan nilai agregat dari baris dasar yang cocok dengan kombinasi dimensi tersebut. CUBE mengembalikan satu baris ringkasan untuk setiap kelompok. Anda dapat menggunakan CUBE untuk menghasilkan nilai cross-tabulation. Misalnya, jika Anda menentukan tiga ekspresi (n = 3) dalam klausa CUBE, operasi tersebut menghasilkan 2n = 23 = 8 kelompok. Baris yang dikelompokkan berdasarkan semua nilai ekspresi n adalah baris biasa. Semua baris lainnya adalah baris super-agregat. Sintaksnya adalah sebagai berikut:

      CUBE ( { expression | ( expression [, …] ) } [, …] )
    • ROLLUP

      Subklausa ROLLUP adalah ekstensi dari klausa GROUP BY. Saat menghasilkan statistik dan laporan, Anda dapat menggunakan ROLLUP untuk mengembalikan subtotal untuk setiap kelompok dan total keseluruhan untuk semua kelompok. Sintaksnya adalah sebagai berikut:

      ROLLUP ( { expression | ( expression [, …] ) } [, …] ) 
    • GROUPING SETS

      Subklausa GROUPING SETS adalah ekstensi dari klausa GROUP BY yang memungkinkan Anda menentukan beberapa opsi GROUP BY dalam satu kueri. Ini meningkatkan efisiensi dengan memungkinkan Anda memilih hanya set pengelompokan yang Anda butuhkan. Saat Anda hanya menentukan kelompok data yang diperlukan, database tidak perlu menghitung set agregasi lengkap yang dihasilkan oleh CUBE atau ROLLUP. Sintaksnya adalah sebagai berikut:

      GROUPING SETS ( grouping_element [, …] ) 
  • DISTINCT clause

    Jika Anda menentukan SELECT DISTINCT, semua baris duplikat dihapus dari set hasil. Hanya satu baris yang disimpan dari setiap kelompok baris duplikat.

    Catatan

    SELECT DISTINCT pada kolom dengan tipe data ARRAY tidak didukung.

    SELECT DISTINCT accountid FROM table;
  • COUNT DISTINCT clause

    • Ikhtisar Perintah

      COUNT DISTINCT menghitung jumlah nilai unik dalam suatu kolom. Nilai yang muncul beberapa kali hanya dihitung sekali. Mirip dengan fungsi COUNT, nilai NULL dalam kolom tidak termasuk dalam perhitungan.

    • Deskripsi Sintaks

      • Sintaks untuk perhitungan eksak:

        SELECT c1, COUNT(DISTINCT c2) FROM table GROUP BY c1
      • Perhitungan COUNT DISTINCT eksak dapat mengonsumsi sumber daya signifikan. Oleh karena itu, Hologres juga mendukung perhitungan COUNT DISTINCT perkiraan. Sintaksnya adalah sebagai berikut:

        SELECT c1, approx_count_distinct(c2) FROM table GROUP BY c1
  • UNION clause

    • Ikhtisar Perintah

      Sintaks klausa UNION adalah sebagai berikut:

      select_statement UNION [ ALL | DISTINCT ] select_statement
    • Deskripsi Parameter

      Parameter

      Deskripsi

      select_statement

      select_statement adalah pernyataan SELECT apa pun tanpa klausa ORDER BY, LIMIT, FOR NO KEY UPDATE, FOR UPDATE, FOR SHARE, atau FOR KEY SHARE (jika subekspresi diapit tanda kurung, ORDER BY dan LIMIT dapat dilampirkan padanya. Tanpa tanda kurung, klausa-klausa ini berlaku untuk hasil UNION, bukan ekspresi sisi kanan).

      UNION

      Operator UNION menghitung gabungan baris yang dikembalikan oleh pernyataan SELECT yang terlibat. Suatu baris muncul dalam gabungan jika muncul di setidaknya satu dari dua set hasil. Pernyataan SELECT yang digunakan sebagai operand UNION harus menghasilkan jumlah kolom yang sama, dan kolom yang sesuai harus memiliki tipe data yang kompatibel.

      Hasil UNION tidak berisi baris duplikat kecuali opsi ALL ditentukan. ALL mencegah penghapusan duplikat (sehingga UNION ALL biasanya jauh lebih cepat daripada UNION; gunakan ALL kapan pun memungkinkan). Anda dapat secara eksplisit menentukan penghapusan duplikat dengan menulis DISTINCT.

      Beberapa operator UNION dalam pernyataan SELECT yang sama dievaluasi dari kiri ke kanan kecuali tanda kurung menentukan urutan yang berbeda.

  • INTERSECT clause

    • Ikhtisar Perintah

      Klausa INTERSECT memiliki bentuk berikut:

      select_statement INTERSECT [ ALL | DISTINCT ] select_statement
    • Deskripsi Parameter

      Parameter

      Deskripsi

      select_statement

      select_statement adalah pernyataan SELECT apa pun tanpa klausa ORDER BY LIMIT.

      INTERSECT

      Operator INTERSECT menghitung irisan baris yang dikembalikan oleh pernyataan SELECT yang terlibat. Suatu baris muncul dalam irisan hanya jika muncul di kedua set hasil.

      Hasil INTERSECT tidak berisi baris duplikat kecuali opsi ALL ditentukan. Dengan ALL, baris yang muncul m kali di tabel kiri dan n kali di tabel kanan muncul min(m, n) kali dalam hasil. Anda dapat secara eksplisit menentukan penghapusan duplikat dengan menulis DISTINCT.

      Beberapa operator INTERSECT dalam pernyataan SELECT yang sama dievaluasi dari kiri ke kanan kecuali tanda kurung menentukan urutan yang berbeda. INTERSECT memiliki presedensi lebih tinggi daripada UNION. Dengan demikian, A UNION B INTERSECT C dibaca sebagai A UNION (B INTERSECT C).

  • EXCEPT clause

    • Ikhtisar Perintah

      Klausa EXCEPT memiliki bentuk berikut:

      select_statement EXCEPT [ ALL | DISTINCT ] select_statement
    • Deskripsi Parameter

      Parameter

      Deskripsi

      select_statement

      select_statement adalah pernyataan SELECT apa pun tanpa klausa ORDER BY LIMIT.

      EXCEPT

      Operator EXCEPT menghitung himpunan baris yang muncul dalam hasil pernyataan SELECT kiri tetapi tidak dalam hasil pernyataan SELECT kanan.

      Hasil EXCEPT tidak berisi baris duplikat kecuali opsi ALL ditentukan. Dengan ALL, baris yang muncul m kali di tabel kiri dan n kali di tabel kanan muncul max(m - n, 0) kali dalam hasil. Anda dapat secara eksplisit menentukan penghapusan duplikat dengan menulis DISTINCT.

      Beberapa operator EXCEPT dalam pernyataan SELECT yang sama dievaluasi dari kiri ke kanan kecuali tanda kurung menentukan urutan yang berbeda. EXCEPT memiliki presedensi yang sama dengan UNION.

      Saat ini, FOR NO KEY UPDATE, FOR UPDATE, FOR SHARE, dan FOR KEY SHARE tidak dapat digunakan dengan hasil EXCEPT atau input EXCEPT apa pun.

  • ORDER BY clause

    • Ikhtisar Perintah

      Klausa ORDER BY opsional memiliki bentuk berikut:

      ORDER BY expression [ ASC | DESC | USING operator ] [ NULLS { FIRST | LAST } ] [, ...]
    • Deskripsi Parameter

      Klausa ORDER BY mengurutkan baris hasil berdasarkan ekspresi yang ditentukan. Jika dua baris sama menurut ekspresi paling kiri, baris tersebut dibandingkan berdasarkan ekspresi berikutnya, dan seterusnya. Jika baris tersebut sama untuk semua ekspresi yang ditentukan, baris tersebut dikembalikan dalam urutan yang bergantung pada implementasi.

      Setiap ekspresi dapat berupa nama atau nomor ordinal kolom output dari daftar SELECT, atau ekspresi yang dibentuk dari nilai kolom input.

      Nomor ordinal mengacu pada posisi kolom output, dari kiri ke kanan. Fitur ini memungkinkan Anda menentukan urutan untuk kolom yang tidak memiliki nama unik. Ini biasanya tidak diperlukan karena Anda dapat menggunakan klausa AS untuk memberikan nama unik pada kolom output.

      Anda juga dapat menggunakan ekspresi arbitrer dalam klausa ORDER BY, termasuk kolom yang tidak ada dalam daftar output SELECT. Misalnya, pernyataan berikut valid:

      SELECT name FROM distributors ORDER BY code;

      Batasan fitur ini adalah bahwa ketika Anda menerapkan klausa ORDER BY pada hasil klausa UNION, INTERSECT, atau EXCEPT, klausa ORDER BY hanya dapat menentukan nama kolom output atau nomor ordinal, bukan ekspresi.

      Jika ekspresi ORDER BY adalah nama sederhana yang cocok dengan nama kolom output dan nama kolom input, ORDER BY menginterpretasikannya sebagai nama kolom output. Perilaku ini berbeda dari klausa GROUP BY, yang menginterpretasikan nama ambigu sebagai nama kolom input. Ketidakkonsistenan ini dimaksudkan untuk kompatibilitas dengan standar SQL.

      Anda dapat menambahkan kata kunci ASC (ascending) atau DESC (descending) setelah ekspresi apa pun dalam klausa ORDER BY. Jika Anda tidak menentukan kata kunci, ASC digunakan secara default. Atau, Anda dapat menentukan nama operator pengurutan dalam klausa USING. Operator pengurutan harus merupakan anggota less-than atau greater-than dari family operator Pohon-B. ASC biasanya setara dengan USING <, dan DESC biasanya setara dengan USING >. Namun, pembuat tipe data yang ditentukan pengguna dapat menentukan urutan pengurutan default tertentu, yang mungkin sesuai dengan operator dengan nama lain.

      Jika Anda menentukan NULLS LAST, nilai null diurutkan setelah nilai non-null. Jika Anda menentukan NULLS FIRST, nilai null diurutkan sebelum nilai non-null. Jika Anda tidak menentukan salah satunya, perilaku default untuk ASC adalah NULLS LAST, dan perilaku default untuk DESC adalah NULLS FIRST. Secara default, nilai null dianggap lebih besar daripada nilai non-null. Saat Anda menggunakan klausa USING, urutan null default bergantung pada apakah operator tersebut adalah operator less-than atau greater-than.

      Perhatikan bahwa opsi pengurutan hanya berlaku untuk ekspresi yang diikuti. Misalnya, ORDER BY x, y DESC berbeda dari ORDER BY x DESC, y DESC.

  • LIMIT clause

    • Ikhtisar Perintah

      Klausa LIMIT terdiri dari dua subklausa independen:

      LIMIT { count | ALL }
      OFFSET start
    • Deskripsi Parameter

      Parameter count menentukan jumlah maksimum baris yang akan dikembalikan. Parameter start menentukan jumlah baris yang dilewati sebelum sistem mulai mengembalikan baris. Jika Anda menentukan kedua parameter, sistem melewati jumlah baris start yang ditentukan sebelum mulai menghitung jumlah baris count yang akan dikembalikan.

      Jika ekspresi count mengevaluasi ke NULL, ekspresi tersebut diperlakukan sebagai LIMIT ALL, yang berarti tidak ada batasan. Jika ekspresi start mengevaluasi ke NULL, ekspresi tersebut diperlakukan sebagai OFFSET 0.

      Saat Anda menggunakan klausa LIMIT, Anda juga harus menyertakan klausa ORDER BY untuk membatasi baris ke urutan yang unik. Jika tidak, Anda akan mengambil subset baris kueri yang tidak dapat diprediksi. Misalnya, jika Anda meminta baris 10 hingga 20 tanpa menentukan klausa ORDER BY, tidak ada jaminan baris mana yang akan dikembalikan.

      Perencana kueri mempertimbangkan klausa LIMIT saat menghasilkan rencana kueri. Oleh karena itu, nilai LIMIT dan OFFSET yang berbeda kemungkinan besar menghasilkan rencana kueri dan urutan baris yang berbeda. Jika Anda memilih subset berbeda dari hasil kueri menggunakan nilai LIMIT dan OFFSET yang berbeda, Anda mungkin menerima hasil yang tidak konsisten kecuali Anda menegakkan urutan yang dapat diprediksi dengan klausa ORDER BY. Ini bukan bug. Ini adalah konsekuensi yang dimaksudkan dari fakta bahwa SQL tidak menjamin urutan tertentu untuk hasil kueri kecuali klausa ORDER BY digunakan untuk membatasi urutan tersebut.

      Jika Anda tidak menggunakan klausa ORDER BY untuk menegakkan subset deterministik, mengeksekusi kueri LIMIT yang sama beberapa kali mungkin mengembalikan subset baris tabel yang berbeda. Ini bukan bug. Determinisme tidak dijamin dalam kasus seperti ini.

Contoh penggunaan

  • Join dua tabel

    SELECT f.title, f.did, d.name, f.date_prod, f.kind FROM 
    distributors d, films f WHERE f.did = d.did;
  • Klausa WITH

    WITH distributor_name(name) AS (SELECT name from distributors)
    SELECT name FROM distributor_name ORDER BY name;
  • GROUP BY

    SELECT kind, sum(length) AS total FROM films GROUP BY kind;
  • Filtering dengan HAVING

    SELECT kind, sum(length) AS total FROM films GROUP BY kind 
    HAVING sum(length) < interval '5 hours';
  • GROUP BY CUBE

    SELECT  l_returnflag
            ,l_shipmode
            ,SUM(l_quantity)
    FROM    public.lineitem
    GROUP BY cube((l_returnflag),(l_shipmode))
    ORDER BY l_returnflag
             ,l_shipmode;
  • GROUP BY ROLLUP

    SELECT  l_returnflag
            ,l_shipmode
            ,SUM(l_quantity)
    FROM    public.lineitem
    GROUP BY ROLLUP ((l_returnflag),(l_shipmode))
    ORDER BY l_returnflag
             ,l_shipmode;
  • GROUP BY GROUPING SETS

    SELECT  l_returnflag
            ,l_shipmode
            ,SUM(l_quantity)
    FROM    public.lineitem
    GROUP BY GROUPING SETS ((l_returnflag,l_shipmode),())
    ORDER BY l_returnflag
             ,l_shipmode;
  • ORDER BY

    SELECT * FROM distributors ORDER BY name;