PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Urutan Pemrosesan Logis atau Standar SQL dalam klausa WHERE

Ini adalah aturan dari standar SQL (yang agak rumit karena mencakup banyak detail yang mungkin tidak dipikirkan oleh pengguna SQL).

Ada dua prinsip di balik aturan tersebut. Yang pertama adalah bahwa standar tidak memaksakan urutan operasi, kecuali jika diperlukan secara logis (having klausa, misalnya, harus diproses secara logis setelah group by ). Ini adalah dasar dari pengertian di SQL adalah deskriptif bahasa, di mana hasilnya dijelaskan. Setiap mesin database tertentu dapat menentukan jalur eksekusinya sendiri.

Prinsip kedua adalah menghindari ambiguitas. Di sinilah aturan pelingkupan masuk, yang menentukan apa yang diketahui oleh kompiler SQL.

Perhatikan pernyataan berikut:

select a as b, b as a, a + 1 as d
-----------------------^
from t

Pertanyaannya adalah:a . yang mana? apakah a+1 lihat, kolom a pada tabel atau kolom b (yang disebut sebagai a ) di select . Menurut standar ini tidak ambigu. Kolom alias tidak dikenal di select klausa di mana mereka didefinisikan.

Ini meluas ke where klausa juga, yang dievaluasi dalam lingkup yang sama. Perhatikan contoh yang sama:

select a as b, b as a, a + 1 as d
from t
where a > 100

Yang a melakukan where kondisi merujuk? Standarnya tidak ambigu. where klausa tidak memahami alias kolom di select . Ini karena select (secara logis) dievaluasi setelah where . Jadi, ketika Anda mengatakan:

select row_number() over (order by a) as seqnum
from t
where a > 100

Nilai yang dikembalikan dimulai dengan a pertama setelah 100. Pencacahan tidak terjadi terlebih dahulu, dengan baris yang difilter mendapatkan nomor urut yang difilter.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL - ambil baris yang memiliki nilai Max untuk sebuah kolom

  2. Bagaimana cara menjalankan aplikasi python dan postgres dalam satu wadah buruh pelabuhan?

  3. Menggunakan sails.js dengan database postgres yang ada

  4. Bagaimana INTERSECT Bekerja di PostgreSQL

  5. Tentukan daftar definisi kolom dblink dari tipe lokal yang ada