logo

MySQL Ortak Tablo İfadesi (CTE)

MySQL'de her ifade veya sorgu geçici bir sonuç veya ilişki üretir. Ortak bir tablo ifadesi veya CTE kullanılır. bu geçici sonuç kümesine ad verin CREATE gibi söz konusu ifadenin yürütme kapsamında mevcut olan, SOKMAK , SEÇME , GÜNCELLEME , SİLMEK , vesaire.

java dili mülakat soruları

CTE ile ilgili önemli noktalardan bazıları şunlardır:

  • Kullanılarak tanımlanır. İLE cümle.
  • With deyimi, tek bir sorguda birden fazla CTE belirtmemize olanak tanır.
  • Bir CTE, aynı With yan tümcesinin parçası olan diğer CTE'lere başvurabilir, ancak bu CTE'lerin daha önce tanımlanması gerekir.
  • CTE'nin yürütme kapsamı, kullanıldığı belirli ifadenin içinde mevcuttur.

MySQL CTE Söz Dizimi

MySQL CTE'nin sözdizimi, adı, isteğe bağlı bir sütun listesini ve ortak tablo ifadesini (CTE) tanımlayan bir ifadeyi/sorguyu içerir. CTE'yi tanımladıktan sonra onu SELECT, INSERT, UPDATE ve DELETE sorgusunda view olarak kullanabiliriz.

Aşağıda CTE'nin temel sözdizimi verilmiştir. MySQL :

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

CTE argümanlarındaki sütun sayısının sorgudaki sütun sayısıyla aynı olmasını sağlamak içindir. CTE argümanlarındaki sütunları tanımlamamışsak, CTE'yi tanımlayan sorgu sütunlarını kullanacaktır.

Türetilmiş tabloya benzer şekilde, bir nesne olarak saklanamaz ve sorgunun yürütülmesi tamamlanır tamamlanmaz kaybolur. CTE daha iyi okunabilirlik sağlar ve türetilmiş tabloyla karşılaştırıldığında performansı artırır.

Türetilmiş bir tablodan farklı olarak, CTE bir alt sorgu Bu olabilir kendine referans verme kendi adını kullanıyor. Aynı zamanda şu şekilde de bilinir: özyinelemeli CTE ve aynı sorguda birden çok kez başvurulabilir.

Özyinelemeli CTE ile ilgili temel noktalardan bazıları şunlardır:

  • With RECURSIVE yan tümcesi kullanılarak tanımlanır.
  • Özyinelemeli bir CTE'nin bir sonlandırma koşulu içermesi gerekir.
  • Hiyerarşik veya ağaç yapılı verilerin seri üretimi ve geçişi için yinelemeli CTE'yi kullanacağız.

MySQL Özyinelemeli CTE Sözdizimi

Aşağıda MySQL'deki özyinelemeli CTE'nin temel sözdizimi verilmiştir:

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

Burada alt sorgu, cte_name'i kendi adı olarak kullanan bir MySQL sorgusudur.

MySQL CTE Örnekleri

Çeşitli örnekler kullanarak CTE'nin MySQL'de nasıl çalıştığını anlayalım. Burada bir tablo kullanacağız 'çalışanlar' bir gösteri için. Bu tablonun aşağıdaki verileri içerdiğini varsayalım:

numpy nokta çarpımı
MySQL Ortak Tablo İfadesi (CTE)

CTE kavramını anlamak için aşağıdaki ifadeyi yürütün. Bu örnekte CTE adı şöyledir: çalışan_in_california , CTE'yi tanımlayan alt sorgu emp_name, emp_age ve city adlı üç sütunu döndürür. Bu nedenle, CTE Employee_in_california, Kaliforniya'da bulunan tüm çalışanları iade edecektir. Kaliforniya şehri .

CTE Employee_in_california'yı tanımladıktan sonra buna referans verdik. SEÇME yalnızca Kaliforniya'da bulunan çalışanların seçilmesine ilişkin beyan.

 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; 

Yukarıdaki ifadeyi çalıştırdıktan sonra aşağıdaki çıktıyı verecektir. Burada sonucun yalnızca Kaliforniya'da bulunan çalışan verilerini döndürdüğünü görebiliriz.

MySQL Ortak Tablo İfadesi (CTE)

Daha gelişmiş MySQL CTE örneği

Diyelim ki adında bir tablomuz var. müşteri Ve emir aşağıdaki verileri içerir:

Tablo: müşteri

java'da string.format
MySQL Ortak Tablo İfadesi (CTE)

Tablo: siparişler

MySQL Ortak Tablo İfadesi (CTE)

Gelişmiş CTE örneğini açıklayan aşağıdaki ifadeye bakın. İÇ BİRLEŞİM cümle.

 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); 

Çalıştırdıktan sonra aşağıdaki gibi çıktı alacağız:

MySQL Ortak Tablo İfadesi (CTE)

MySQL Özyinelemeli CTE Örneği

Aşağıdaki örnekler özyinelemeli CTE'nin çalışmasını açıklamaktadır. Bir dizi üreten aşağıdaki ifadeyi göz önünde bulundurun ilk beş tek sayı :

 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>

İkinci olarak, bir alt sorgunun veya türetilmiş bir tablo alt sorgusunun başında With yan tümcesini aşağıdaki gibi kullanabiliriz:

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

Üçüncü olarak, SELECT yan tümcesini içeren SELECT ifadelerinin hemen öncesindeki With yan tümcesini aşağıdaki gibi kullanabiliriz:

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

CTE kullanmanın faydaları

  • Sorgunun daha iyi okunabilirliğini sağlar.
  • Sorgu performansını artırır.
  • CTE, onu VIEW konseptine alternatif olarak kullanmamıza izin veriyor
  • Sorguyu basitleştirmek için CTE'nin zincirleme olarak da kullanılabilir.
  • Ayrıca özyinelemeli sorguları kolayca uygulamak için de kullanılabilir.