Database
 sql >> Teknologi Basis Data >  >> RDS >> Database

Ekspresi Tabel Umum:Kapan dan Bagaimana Menggunakannya

Apa itu Common Table Expressions (CTE)?

Common Table Expression (CTE) adalah kumpulan hasil kueri yang ada sementara dan hanya untuk digunakan dalam konteks kueri yang lebih besar. Sama seperti tabel turunan, hasil CTE tidak disimpan dan hanya ada selama kueri. Artikel ini akan fokus pada CTE non-rekursif.

Bagaimana CTE membantu?

CTE, seperti tampilan database dan tabel turunan, memungkinkan pengguna untuk lebih mudah menulis dan memelihara kueri kompleks melalui peningkatan keterbacaan dan penyederhanaan. Pengurangan kompleksitas ini dicapai dengan mendekonstruksi kueri yang biasanya kompleks menjadi blok sederhana untuk digunakan, dan digunakan kembali jika perlu, dalam menulis ulang kueri. Contoh kasus penggunaan meliputi:

  • Perlu mereferensikan tabel turunan beberapa kali dalam satu kueri
  • Alternatif untuk membuat tampilan di database
  • Melakukan penghitungan yang sama beberapa kali di beberapa komponen kueri

Cara membuat CTE

  • Memulai CTE menggunakan “WITH”
  • Berikan nama untuk hasil kueri yang akan segera ditentukan
  • Setelah menetapkan nama, ikuti dengan “AS”
  • Tentukan nama kolom (langkah opsional)
  • Tentukan kueri untuk menghasilkan kumpulan hasil yang diinginkan
  • Jika beberapa CTE diperlukan, mulai setiap ekspresi berikutnya dengan koma dan ulangi langkah 2-4.
  • Referensikan CTE yang ditentukan di atas dalam kueri berikutnya

Sintaks

WITH
expression_name_1 AS
(CTE query definition 1)

[, expression_name_X AS
   (CTE query definition X)
 , etc ]

SELECT expression_A, expression_B, ...
FROM expression_name_1

##Contoh CTEKueri berikut menjawab pertanyaan bisnis:“berapa biaya bulanan rata-rata per kampanye untuk upaya pemasaran perusahaan?” Ini bisa dicapai dengan kueri turunan (ditampilkan di bawah); namun, menggunakan CTE meningkatkan keterbacaan

-- define CTE:
WITH Cost_by_Month AS
(SELECT campaign_id AS campaign,
       TO_CHAR(created_date, 'YYYY-MM') AS month,
       SUM(cost) AS monthly_cost
FROM marketing
WHERE created_date BETWEEN NOW() - INTERVAL '3 MONTH' AND NOW()
GROUP BY 1, 2
ORDER BY 1, 2)

-- use CTE in subsequent query:
SELECT campaign, avg(monthly_cost) as "Avg Monthly Cost"
FROM Cost_by_Month
GROUP BY campaign
ORDER BY campaign

Menggunakan kueri turunan:

SELECT campaign, avg(monthly_cost) as "Avg Monthly Cost"
FROM
    -- this is where the derived query is used
    (SELECT campaign_id AS campaign,
       TO_CHAR(created_date, 'YYYY-MM') AS month,
       SUM(cost) AS monthly_cost
    FROM marketing
    WHERE created_date BETWEEN NOW() - INTERVAL '3 MONTH' AND NOW()
    GROUP BY 1, 2
    ORDER BY 1, 2) as Cost_By_Month
GROUP BY campaign
ORDER BY campaign

Dokumentasi

  • Postgres
  • Pergeseran Merah
  • Oracle
  • SQLServer

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Penyembunyian Data Dinamis Berbasis Proksi di FieldShield

  2. Desain Basis Data 101

  3. Menggunakan OAuth untuk Mengautentikasi Koneksi ODBC Anda ke Salesforce.com

  4. Tujuan Baris, Bagian 2:Semi Bergabung

  5. Alat online untuk mencoba desain dan kueri SQL