PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Ред на логическа обработка или SQL стандарт в клаузата WHERE

Това е правилото от SQL стандарта (който е доста сложен, защото навлиза в много подробности, за които потребителите на SQL вероятно не се замислят).

Зад правилото стоят два принципа. Първият е, че стандартът не налага подреждане на операциите, освен когато е логически необходимо (having клауза, например, трябва да се обработва логически след group by ). Това е основата на идеята, че SQL е описателен език, където са описани резултатите. Всеки конкретен двигател на базата данни може да определи свои собствени пътища за изпълнение.

Вторият принцип е избягване на двусмислието. Тук се намесват правилата за обхват, които определят какво знае кога SQL компилаторът.

Разгледайте следното твърдение:

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

Въпросът е:кой a прави a+1 препраща към колоната a в таблицата или колоната b (който е псевдоним като a ) в select . Според стандарта това е недвусмислено. Псевдонимите на колони не са известни в select клауза, където са дефинирани.

Това се простира до where клауза, която се оценява в същия обхват. Помислете за същия пример:

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

Кой a прави where състояние се отнася? Стандартът е недвусмислен. where клаузата не разбира псевдоними на колони в select . Това е така, защото select (логически) се оценява след where . Така че, когато кажете:

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

Върнатата стойност започва с първия a след 100. Изброяването не се извършва първо, като филтрираните редове получават поредни номера, които се филтрират.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как документирате кода на вашата база данни, за да видите зависимостите между обектите на базата данни?

  2. Как да възстановите непоследователен PostgreSQL Slave

  3. Кой е най-добрият PostgreSQL GUI? Сравнение за 2021 г

  4. Как date_part() работи в PostgreSQL

  5. Как да попълните външни ключове на таблица от други таблици