СКЛ ВИТХ клаузула

Skl Vith Klauzula



Када сте дубоко у СКЛ и упитима базе података, једна од најмоћнијих и најневероватнијих карактеристика на које ћете наићи је Цоммон Табле Екпрессионс који је опште познат као ЦТЕ.

У СКЛ-у, ВИТХ клаузула је такође позната као ЦТЕ. То је моћна функција која нам омогућава да креирамо привремене скупове резултата у оквиру упита. Једна од главних улога ЦТЕ-а је поједностављивање сложених упита у мање потупите који се могу поново користити. Ово помаже да се код учини читљивијим и одрживијим на дужи рок.

Придружите нам се у овом водичу док истражујемо функционисање израза заједничке табеле користећи клаузулу ВИТХ и подржану функционалност.







Захтеви:

За потребе демонстрације користићемо следеће:



  1. МиСКЛ верзија 8.0 и новија
  2. Сакила узорак базе података

Пошто су дати захтеви испуњени, можемо наставити да сазнамо више о ЦТЕ-овима и клаузули ВИТХ.



СКЛ ВИТХ клаузула

Клаузула ВИТХ нам омогућава да дефинишемо један или више привремених скупова резултата који су познати као заједнички изрази табеле.





Можемо референцирати резултујуће ЦТЕ-ове у главном упиту као било коју другу табелу или скуп резултата. Ово игра кључну улогу у креирању модуларних СКЛ упита.

Иако се синтакса ЦТЕ-а може незнатно разликовати у зависности од ваших захтева, следеће показује основну синтаксу ЦТЕ-а у СКЛ-у:



СА цте_наме (колона1, колона2, ...) АС (
-- ЦТЕ упит
СЕЛЕЦТ ...
ИЗ ...
ГДЕ ...
)
-- Главни упит
СЕЛЕЦТ ...
ИЗ ...
ПРИДРУЖИТЕ се цте_наме НА ...
ГДЕ ...

Почињемо са кључном речи ВИТХ која говори СКЛ бази података да желимо да креирамо и користимо ЦТЕ.

Затим наводимо име за ЦТЕ које нам омогућава да га референцирамо у другим упитима.

Такође наводимо опциону листу назива колона ако ЦТЕ укључује псеудониме колона.

Затим настављамо са дефинисањем ЦТЕ упита. Ово садржи све задатке или податке које ЦТЕ извршава затворене у пар заграда.

На крају, наводимо главни упит који упућује на ЦТЕ.

Пример употребе:

Један од најбољих начина да разумете како да користите и радите са ЦТЕ-овима је да погледате практичан пример.

Узмимо на пример базу података узорака Сакила. Претпоставимо да желимо да пронађемо првих 10 купаца са највећим бројем изнајмљених.

Погледајте следећи приказани ЦТЕ.

Коришћење СКЛ ВИТХ клаузуле да бисте пронашли 10 најбољих купаца са највећим бројем изнајмљивања:

СА ЦустомерРенталс АС (
СЕЛЕЦТ ц.цустомер_ид, ц.фирст_наме, ц.ласт_наме, ЦОУНТ(р.рентал_ид) АС рентал_цоунт
ОД купца ц
ПРИДРУЖИТЕ се изнајмљивању р ОН ц.цустомер_ид = р.цустомер_ид
ГРОУП БИ ц.цустомер_ид, ц.фирст_наме, ц.ласт_наме
)
СЕЛЕЦТ *
ФРОМ ЦустомерРенталс
ОРДЕР БИ рентал_цоунт ДЕСЦ
ЛИМИТ 10;

У датом примеру почињемо тако што ћемо дефинисати нови ЦТЕ користећи кључну реч ВИТХ иза које следи име које желимо да доделимо ЦТЕ-у. У овом случају то називамо „ЦустомерРенталс“.

Унутар ЦТЕ тела израчунавамо број изнајмљивања за сваког купца тако што ћемо здружити табелу купаца и изнајмљивања.

На крају, у главном упиту бирамо све колоне из ЦТЕ-а, поредамо резултате на основу броја изнајмљивања (опадајући редослед) и ограничавамо излаз на само првих 10 редова.

Ово нам омогућава да добијемо клијенте са највећим бројем изнајмљивања као што је приказано у следећем излазу:

  Аутоматски генерисана табела имена Опис

Рекурзивни ЦТЕ

У неким другим случајевима, можда имате посла са хијерархијским структурама података. Овде рекурзивни ЦТЕ ступају у игру.

Узмимо на пример случај када желимо да се крећемо по хијерархијској организацији или да представимо структуру налик стаблу. Можемо користити кључну реч ВИТХ РЕЦУРСИВЕ да креирамо рекурзивни ЦТЕ.

Пошто не постоје хијерархијски подаци које можемо користити у бази података Сакила да бисмо демонстрирали рекурзивни ЦТЕ, поставимо основни пример.

ЦРЕАТЕ ТАБЛЕ одељење (
департмент_ид ИНТ ПРИМАРИ КЕИ АУТО_ИНЦРЕМЕНТ,
Департмент_наме ВАРЦХАР(255) НОТ НУЛЛ,
парент_департмент_ид ИНТ,
СТРАНИ КЉУЧ (ид_родитеља) РЕФЕРЕНЦЕ одељење(ид_одељења)
);
ИНСЕРТ ИНТО одељење (име_одељења, ИД_одсека родитеља)
ВРЕДНОСТИ
('Корпоративна', НУЛЛ),
('Финансије', 1),
('ХР', 1),
('Рачуноводство', 2),
'Регрутовање', 3),
('Платни списак', 4);

У овом случају, имамо узорак табеле „одељења“ са неким случајним подацима. Да бисмо пронашли хијерархијску структуру одељења, можемо користити рекурзивни ЦТЕ на следећи начин:

СА РЕКУРСИВНОМ хијерархијом одељења АС (
СЕЛЕЦТ департмент_ид, департмент_наме, парент_департмент_ид
ИЗ одељења
ВХЕРЕ парент_департмент_ид ЈЕ НУЛЛ
УНИОН АЛЛ
СЕЛЕЦТ д.департмент_ид, д.департмент_наме, д.парент_департмент_ид
ИЗ одељења д
ПРИДРУЖИТЕ СЕ ДепартментХиерарцхи дх ОН д.парент_департмент_ид = дх.департмент_ид
)
СЕЛЕЦТ *
ФРОМ ДепартментХиерарцхи;

У овом случају, рекурзивни ЦТЕ почиње са одељењима која имају НУЛЛ „парент_департмент_ид“ (основни одељења) и рекурзивно преузима подређена одељења.

Закључак

У овом водичу смо научили о најосновнијим и најкориснијим функцијама у СКЛ базама података као што су изрази заједничких табела тако што смо разумели како да радимо са кључном речи ВИТХ.