logo

МиСКЛ Цоммон Табле Екпрессион (ЦТЕ)

У МиСКЛ-у, свака изјава или упит даје привремени резултат или релацију. Користи се уобичајени табеларни израз или ЦТЕ именујте те привремене скупове резултата који постоје у оквиру извршног опсега те конкретне изјаве, као што је ЦРЕАТЕ, ИНСЕРТ , СЕЛЕЦТ , АЖУРИРАЊЕ , ИЗБРИШИ , итд.

миш и врсте миша

Неке од кључних тачака које се односе на ЦТЕ су:

  • Дефинише се коришћењем ВИТХ клаузула.
  • Клаузула ВИТХ нам омогућава да наведемо више од једног ЦТЕ-а у једном упиту.
  • ЦТЕ може референцирати друге ЦТЕ-ове који су део исте клаузуле ВИТХ, али те ЦТЕ-ове треба дефинисати раније.
  • Опсег извршења ЦТЕ-а постоји унутар одређене изјаве у којој се користи.

МиСКЛ ЦТЕ синтакса

Синтакса МиСКЛ ЦТЕ укључује име, опциону листу колона и изјаву/упит који дефинише израз заједничке табеле (ЦТЕ). Након дефинисања ЦТЕ-а, можемо га користити као приказ у упиту СЕЛЕЦТ, ИНСЕРТ, УПДАТЕ и ДЕЛЕТЕ.

Следеће је основна синтакса ЦТЕ ин МиСКЛ :

 WITH cte_name (column_names) AS (query) SELECT * FROM cte_name; 

Потребно је осигурати да број колона у ЦТЕ аргументима мора бити исти као и број колона у упиту. Ако нисмо дефинисали колоне у ЦТЕ аргументима, користиће колоне упита које дефинишу ЦТЕ.

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

За разлику од изведене табеле, ЦТЕ је а подупит која може бити самореференцирање користећи своје име. Такође је познато као рекурзивни ЦТЕ а такође се може референцирати више пута у истом упиту.

Неке од битних тачака које се односе на рекурзивни ЦТЕ су:

  • Дефинише се коришћењем клаузуле ВИТХ РЕЦУРСИВЕ.
  • Рекурзивни ЦТЕ мора да садржи завршни услов.
  • Користићемо рекурзивни ЦТЕ за генерисање серија и обилажење хијерархијских података или података са структуром дрвета.

МиСКЛ рекурзивна ЦТЕ синтакса

Следеће је основна синтакса рекурзивног ЦТЕ-а у МиСКЛ-у:

 WITH RECURSIVE cte_name (column_names) AS ( subquery ) SELECT * FROM cte_name; 

Овде је потупит МиСКЛ упит који се односи на себе користећи цте_наме као сопствено име.

МиСКЛ ЦТЕ примери

Хајде да разумемо како ЦТЕ функционише у МиСКЛ-у користећи различите примере. Овде ћемо користити табелу 'запослени' за демонстрацију. Претпоставимо да ова табела садржи следеће податке:

инс кључ
МиСКЛ Цоммон Табле Екпрессион (ЦТЕ)

Извршите следећу изјаву да бисте разумели концепт ЦТЕ. У овом примеру, назив ЦТЕ је емплоиее_ин_цалифорниа , потупит који дефинише ЦТЕ враћа три колоне емп_наме, емп_аге и цити. Дакле, ЦТЕ емплоиее_ин_цалифорниа ће вратити све запослене који се налазе у Калифорнијски град .

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

 WITH employees_in_california AS ( SELECT * FROM employees WHERE city = 'California' ) SELECT emp_name, emp_age, city FROM employees_in_california WHERE emp_age >= 32 ORDER BY emp_name; 

Након извршења горње изјаве, она ће дати следећи излаз. Овде можемо видети да резултат враћа само податке о запосленима који се налазе у Калифорнији.

Логика 1. реда
МиСКЛ Цоммон Табле Екпрессион (ЦТЕ)

Напреднији МиСКЛ ЦТЕ пример

Претпоставимо да имамо табелу са именом купац и ред који садржи следеће податке:

Табела: купац

МиСКЛ Цоммон Табле Екпрессион (ЦТЕ)

Табела: наређења

МиСКЛ Цоммон Табле Екпрессион (ЦТЕ)

Погледајте изјаву у наставку која објашњава напредни ЦТЕ пример користећи ИННЕР ЈОИН клаузула.

 WITH total_customer_2020 AS ( SELECT cust_id, name, occupation FROM customer INNER JOIN orders USING (cust_id) ORDER BY age ) SELECT * FROM orders JOIN total_customer_2020 USING (cust_id); 

Након извршења, добићемо излаз као у наставку:

МиСКЛ Цоммон Табле Екпрессион (ЦТЕ)

МиСКЛ рекурзивни ЦТЕ пример

Следећи примери објашњавају рад рекурзивног ЦТЕ-а. Размотрите доњу изјаву која генерише низ првих пет непарних бројева :

сортирај низ јава
 WITH RECURSIVE odd_num_cte (id, n) AS ( SELECT 1, 1 union all SELECT id+1, n+2 from odd_num_cte where id <5 ) select * from odd_num_cte; < pre> <p>After executing the above statement, it will give the output as below:</p> <img src="//techcodeview.com/img/mysql-tutorial/80/mysql-common-table-expression-6.webp" alt="MySQL Common Table Expression (CTE)"> <p>The above statement consists of two parts one is non-recursive, and another is recursive.</p> <p> <strong>Non-recursive: SELECT 1, 1</strong> </p> <p>This part will produce the initial rows with two columns as &apos;id&apos; and &apos;n&apos; and a single row.</p> <p> <strong>Recursive: SELECT id+1, n+2 from odd_num_cte where id <5< strong> </5<></strong></p> <p>This part is responsible for adding rows to the previous output until the terminating condition (id <5) will not be satisfied. when the id reached 5, condition becomes false, and recursion process is terminated.< p> <h3>The WITH clause uses</h3> <p>MySQL provides many contexts to use the WITH clause for creating CTE. Let&apos;s discuss one by one in detail.</p> <p>First, we can use the WITH clause at the beginning of SELECT, UPDATE, and DELETE query as below.</p> <pre> WITH ... SELECT ... WITH ... UPDATE ... WITH ... DELETE ... </pre> <p>Second, we can use the WITH clause at the beginning of a subquery or a derived table subquery as below:</p> <pre> SELECT ... WHERE id IN (WITH ... SELECT ...); SELECT * FROM (WITH ... SELECT ...) AS derived_table; </pre> <p>Third, we can use the WITH clause immediately preceding of SELECT statements that include a SELECT clause as below:</p> <pre> CREATE TABLE ... WITH ... SELECT ... CREATE VIEW ... WITH ... SELECT ... INSERT ... WITH ... SELECT ... REPLACE ... WITH ... SELECT ... DECLARE CURSOR ... WITH ... SELECT ... EXPLAIN ... WITH ... SELECT ... </pre> <h3>Benefits of using CTE</h3> <ul> <li>It provides better readability of the query.</li> <li>It increases the performance of the query.</li> <li>The CTE allows us to use it as an alternative to the VIEW concept</li> <li>It can also be used as chaining of CTE for simplifying the query.</li> <li>It can also be used to implement recursive queries easily.</li> </ul> <hr></5)></p></5>

Друго, можемо користити клаузулу ВИТХ на почетку потупита или потупита изведене табеле као у наставку:

 SELECT ... WHERE id IN (WITH ... SELECT ...); SELECT * FROM (WITH ... SELECT ...) AS derived_table; 

Треће, можемо користити клаузулу ВИТХ која непосредно претходи СЕЛЕЦТ наредбама које укључују СЕЛЕЦТ клаузулу као у наставку:

 CREATE TABLE ... WITH ... SELECT ... CREATE VIEW ... WITH ... SELECT ... INSERT ... WITH ... SELECT ... REPLACE ... WITH ... SELECT ... DECLARE CURSOR ... WITH ... SELECT ... EXPLAIN ... WITH ... SELECT ... 

Предности коришћења ЦТЕ

  • Омогућава бољу читљивост упита.
  • Повећава перформансе упита.
  • ЦТЕ нам омогућава да га користимо као алтернативу концепту ВИЕВ
  • Такође се може користити као уланчавање ЦТЕ-а ради поједностављења упита.
  • Такође се може користити за лаку имплементацију рекурзивних упита.