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, които се обработват в ред, обратен на изписването:

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

По-специално, тази схема може да покаже, че редът, в който са посочени източниците на данни в клаузата FROM, не влияе на резултата.
Следват два примера за прогнозиране на отговор чрез прилагане на техниката на междинна изчислителна последователност.
Пример за клауза SELECT 1
„Издаване на заповед за наемане на всички продавачи с техните заплати“:
(Тук се приема, че данните завсичкислужители са изчерпани от EMP таблицата. В база данни, различна от схемата на SCOTT, където данните не са ортогонализирани, това може да не е така.)
Междинен резултат след клаузите FROM и WHERE
Поради факта, че има само един източник на данни за заявката в този случай, клаузата FROM всъщност не изчислява нищо, а просто "взема" данните от EMP таблицата от базата данни. Истинската работа - филтриране на редове според условието - се извършва от клаузата WHERE:
Междинен резултат след клаузата ORDER BY
В набора от редове, получени от WHERE, клаузата ORDER BY подрежда нещата: