Lompati ke konten utama
Modul 14 · Pelajaran 1 dari 353/57 dalam kursus~12 min
Pelajaran modul (1/3)

Pengantar CTE (DENGAN)

Pengantar CTE (DENGAN)

Cepat atau lambat hal ini terjadi pada semua orang: Anda perlu memfilter data berdasarkan hasil agregasi, lalu mengambil filter itu dan GABUNG dengan kueri gabungan lainnya. Anda mulai menulis SELECT di dalam SELECT, yang kemudian berakhir di FROM dari SELECT lainnya.

Hasilnya? Spaghetti SQL, kueri yang tidak dapat dibaca oleh manusia mana pun.

CTEs (Common Table Expressions) memungkinkan Anda mengatasi kekacauan ini. Anda mengaktifkannya dengan kata kunci WITH, yang memungkinkan Anda menentukan kueri bernama sementara dan kemudian menggunakannya kembali sebagai "tabel virtual" di kueri akhir.

Sintaks Dasar

SQL
WITH premium_customers AS (
  SELECT customer_id, SUM(total_amount) AS total_spent
  FROM orders
  GROUP BY customer_id
  HAVING SUM(total_amount) > 1000
)
SELECT customers.first_name, premium_customers.total_spent
FROM customers
JOIN premium_customers ON customers.id = premium_customers.customer_id;

Seperti yang Anda lihat, kueri utama di bagian bawah terbaca dari premium_customers seolah-olah itu adalah tabel nyata! Dan itu jauh lebih mudah dibaca daripada mega inner-join dengan subkueri bersarang.

Latihan#sql.m14.l1.e1
Upaya: 0Memuat…

Kami menginginkan produk yang sangat mahal. Gunakan CTE bernama 'luxury_products' untuk memilih 'id' dan 'price' dari 'products' dengan 'price > 500'. Kemudian jalankan kueri utama pada CTE ini dan tampilkan semuanya (*).

Memuat editor…
Tunjukkan petunjuk

Mulailah dengan DENGAN produk_mewah SEBAGAI (...) lalu PILIH * DARI produk_mewah.

Solusi tersedia setelah 3 upaya

Latihan#sql.m14.l1.e2
Upaya: 0Memuat…

Kami ingin mencari pengguna yang menulis ulasan. Buat 'reviewer' CTE yang mengekstrak nilai 'customer_id' unik (DISTINCT) dari 'reviews'. Kemudian ekstrak 'id', 'first_name', 'last_name' dari tabel 'customers' dan \`JOIN\` dengan CTE 'reviewers' di id.

Memuat editor…
Tunjukkan petunjuk

DENGAN pengulas SEBAGAI (PILIH BEDA customer_id DARI ulasan) PILIH id, nama_depan, nama_belakang DARI pelanggan GABUNG pengulas PADA pelanggan.id = reviewers.customer_id;

Solusi tersedia setelah 3 upaya