KNOW INTUIT, Лекция, Извадка от данни

Извадка от данни

Шапка без козирка бяла, раирана яка.

Смелите пионери попитаха направо:

„От коя година, момче, от кой кораб

И в кои морета си бил, моряк?"

SELECT клауза фрази

Клаузата SELECT в SQL се състои от фрагменти, които по примера на лингвистиката се наричат ​​фрази(клаузи). Понякога е удобно да ги наричаме с по-общата дума „конструкции“ или думите „част от изречение“.

Валидни фрази в SQL израз са: SELECT, FROM, WHERE, GROUP BY, HAVING, CONNECT BY, ORDER BY, PIVOT /UNPIVOT. Общите правила за използване на фрази в клауза SELECT са следните:

  • Всяка клауза трябва да съдържа клаузи SELECT и FROM. Останалите фрази не са задължителни.
  • Редът на фразите във всички клаузи е фиксиран (например GROUP BY винаги следва WHERE и FROM, а ORDER BY винаги идва в края).
  • Клаузата HAVING може да се използва само в допълнение към GROUP BY.

Започвайки с версия 10 в Oracle SQL, все още е възможно да се използва фразата MODEL, която обаче се отличава от останалите поради своята синтактична хетерогенност и нетрадиционна за SQL. Обхватът на приложението му също е специфичен - това са бази данни от типа "data warehouse", data warehouse. Не се разглежда по-долу.

Освен това може да има клауза WITH, която може да се разглежда като декоратор (от версия 9) и процедурна (от 11.2) добавка към "традиционната" клауза SELECT. Обсъжда се в съответния раздел по-долу.

Логическият ред, в който се обработва клаузата SELECT

Редът, в който се обработва клаузата SELECT, също е фиксиран и почти същият като реда, в който се записват фразите втекст. Изключенията са (a) клаузата SELECT, която, за разлика от правописа, се обработва последна, и (b) клаузите CONNECT BY и WHERE, които се обработват в ред, обратен на изписването:

intuit

Посоченият ред е логичен. Това означава, че СУБД може да предложи голямо разнообразие от технически планове за обработка на заявки и те не е задължително да възпроизвеждат горната последователност точно във всеки отделен случай. Причината е в чудовищните разходи, които просто следване на горната схема е изпълнено с. Въпреки това ефектът от всеки план, действително предложен от Oracle, никога няма да противоречи на тази логика на обработка. С други думи, когато един програмист трябва да разбере какъв може да бъде резултатът от дадена заявка, той е напълно оправдан да разчита на този общ логически поток на обработка и да не навлиза в детайлите на действителния план за изпълнение.

Базира се на редуването на етапи на изчисление (друга фраза), така че всеки етап приема някакъв набор от данни като вход и произвежда набор от данни като изход. С изключение на два екстремни случая: набор от данни във входа на клаузата FROM и крайния резултат в изхода на клаузата SELECT, такива набори могат да се нарекат междинни резултати от изчисленията в клаузата SELECT. Ето как изглежда логиката за обработка на клаузата SELECT, може би най-често срещаният вид условие SELECT … FROM a, b WHERE:

intuit

По-специално, тази схема може да покаже, че редът, в който са посочени източниците на данни в клаузата FROM, не влияе на резултата.

Следват два примера за прогнозиране на отговор чрез прилагане на техниката на междинна изчислителна последователност.

Пример за клауза SELECT 1

„Издаване на заповед за наемане на всички продавачи с техните заплати“:

(Тук се приема, че данните завсичкислужители са изчерпани от EMP таблицата. В база данни, различна от схемата на SCOTT, където данните не са ортогонализирани, това може да не е така.)

Междинен резултат след клаузите FROM и WHERE

Поради факта, че има само един източник на данни за заявката в този случай, клаузата FROM всъщност не изчислява нищо, а просто "взема" данните от EMP таблицата от базата данни. Истинската работа - филтриране на редове според условието - се извършва от клаузата WHERE:

Междинен резултат след клаузата ORDER BY

В набора от редове, получени от WHERE, клаузата ORDER BY подрежда нещата: