Topik ini menjelaskan Ekspresi Tabel Umum (CTEs) dan memberikan contoh sederhana.
Ikhtisar
CTE adalah set hasil bernama sementara yang hanya ada selama durasi satu kueri. Anda dapat mereferensikan CTE dalam kueri yang sama untuk menyederhanakan pernyataan. Saat ini, CTE hanya didukung dalam Pernyataan SELECT. Sintaksis standar untuk CTE adalah sebagai berikut:
WITH nama_ekspresi[(nama_kolom [,...])]
AS
(Definisi_CTE)
Pernyataan_SQL;Tentukan nama untuk CTE yang ingin Anda buat. Dalam pernyataan SQL, Anda dapat menggunakan nama tersebut untuk merujuk ke CTE.
Tentukan bidang keluaran dalam tanda kurung, dipisahkan dengan koma. Pastikan jumlah dan tipe data bidang keluaran sesuai dengan bidang keluaran yang ditentukan dalam klausa AS dari CTE. Jika tidak menentukan bidang keluaran secara eksplisit, sistem akan menggunakan bidang keluaran dari klausa AS.
Selanjutnya, gunakan AS untuk mendefinisikan klausa keluaran data dari CTE. Data keluaran akhir dari CTE akan dihasilkan oleh klausa ini.
Setelah mendefinisikan CTE, Anda dapat merujuk ke CTE dalam pernyataan SQL.
Contoh
Contoh berikut menunjukkan cara menggunakan CTE.
WITH T_CTE (i1_cte,i2_cte) AS (SELECT i1,i2 FROM t1)
SELECT * FROM T_CTEContoh sebelumnya menunjukkan CTE sederhana di mana pernyataan SELECT utama langsung mengeluarkan set hasil dari CTE.
WITH T_CTE (i1_cte,i2_cte) AS (SELECT i1,i2 FROM t1)
SELECT * FROM t2 JOIN T_CTE ON t2.i1 = T_CTE.i1_cte AND t2.i2 = T_CTE.i2_cteAnda juga dapat menggunakan CTE dalam klausa JOIN:
WITH T_CTE (i1_cte,i2_cte) AS (SELECT i1,i2 FROM t1)
SELECT * FROM t2 WHERE EXISTS (SELECT * FROM T_CTE WHERE t2.i1 = i1_cte AND t2.i2 = i2_cte)Atau Anda dapat menggunakannya dalam kueri Anda sendiri.
Pertanyaan Umum
Kinerja
CTE mendefinisikan set hasil sementara, tetapi ini tidak berarti CTE dieksekusi sebagai langkah terpisah. Sebagai gantinya, database memperluas definisi CTE saat membuat rencana eksekusi. Proses ini memungkinkan CTE dan kueri utama dioptimalkan bersama. Akibatnya, rencana eksekusi tidak lebih kompleks daripada kueri setara tanpa CTE, dan kinerjanya sama.