Menulis CTE Pertama Anda
Sintaks asas WITH dan masa CTE meningkatkan kebolehbacaan berbanding subpertanyaan
Menulis CTE Pertama Anda ialah pelajaran Persediaan Temu Duga Pengaturcaraan percuma di CoddyKit. Ini ialah pelajaran 1 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Persediaan Temu Duga Pengaturcaraan, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Persediaan Temu Duga Pengaturcaraan merangkumi sejumlah 4 pelajaran.
Apakah Sebenarnya CTE
Ungkapan Jadual Biasa (CTE) ialah set hasil sementara bernama yang ditakrifkan dengan kata kunci WITH dan hanya wujud sepanjang tempoh satu kueri. Penemu duga gemar CTE kerana ia menunjukkan sama ada anda boleh menstrukturkan logik dengan jelas.
Anggap CTE sebagai pemberian nama kepada subkueri supaya anda boleh merujuknya seperti jadual dalam pernyataan utama yang mengikutinya. Ia tidak mencipta objek kekal dan hilang sebaik sahaja kueri selesai.
Sintaks Asas WITH
Setiap CTE bermula dengan WITH, nama, kata kunci AS dan kueri dalam kurungan. Selepas kurungan penutup, tulis pernyataan biasa yang menggunakan CTE mengikut namanya.
WITH cte_name AS ( ... )mentakrifkan blok tersebut.- Kueri yang muncul sejurus selepas kurungan ialah kueri utama.
- Nama CTE berfungsi seperti jadual yang boleh anda gunakan sebagai sumber SELECT.
WITH recent_orders AS (
SELECT *
FROM orders
WHERE order_date >= '2024-01-01'
)
SELECT *
FROM recent_orders;Mengapa Tidak Menggunakan Subkueri Sahaja
Logik yang sama boleh ditulis sebagai subkueri sebaris dalam klausa FROM. Jadi, mengapa penemu duga bertanya tentang CTE?
- Kebolehbacaan: langkah yang dinamakan boleh dibaca dari atas ke bawah seperti resipi.
- Penggunaan semula: anda boleh merujuk CTE yang sama beberapa kali dan bukannya mengulangi subkueri.
- Kemudahan penyahpepijatan: anda boleh menjalankan SELECT terhadap CTE sahaja untuk memeriksanya.
Jawapan yang tepat dalam temu duga biasanya ialah: gunakan CTE apabila ia menjadikan kueri lebih mudah dibaca dan diselenggara.
Contoh Berpandu: Menapis Kemudian Mengagregat
Andaikan soalan itu ialah: cari jumlah hasil daripada pesanan yang dibuat tahun ini. CTE membolehkan anda mengasingkan langkah penapisan, kemudian melakukan pengagregatan terhadap hasil yang dinamakan itu.
Kueri utama menganggap recent_orders sebagai jadual sebenar, lalu menjadikan pengagregatan lebih kemas dan jelas.
WITH recent_orders AS (
SELECT amount
FROM orders
WHERE order_date >= '2024-01-01'
)
SELECT SUM(amount) AS total_revenue
FROM recent_orders;Menamakan Lajur Hasil
Anda boleh menamakan semula lajur yang didedahkan oleh CTE dengan menyenaraikannya sejurus selepas nama CTE. Ini berguna apabila kueri dalaman menghasilkan ungkapan atau apabila anda mahukan nama yang lebih jelas dalam langkah seterusnya.
Jika anda memberikan senarai lajur, bilangannya mesti sepadan dengan bilangan lajur yang dikembalikan oleh kueri dalaman; jika tidak, pangkalan data menghasilkan ralat.
WITH revenue (region, total) AS (
SELECT region, SUM(amount)
FROM orders
GROUP BY region
)
SELECT region, total
FROM revenue
ORDER BY total DESC;CTE Hanyalah Kueri Bernama
Satu cara berfikir yang mengagumkan penemu duga ialah menganggap CTE secara logiknya setara dengan menggantikan takrifannya secara sebaris. Pangkalan data boleh memilih untuk memasukkannya secara sebaris atau menyimpan hasilnya sebagai bahan, tetapi dari segi semantik hasilnya sama seperti jika anda menampal subkueri itu.
Ini bermakna apa-apa yang sah dalam SELECT biasa juga sah di dalam CTE: gabungan, GROUP BY, WHERE, fungsi tetingkap dan banyak lagi.
Contoh Lebih Mendalam: CTE dengan Gabungan
CTE amat berguna apabila anda perlu membentuk lebih awal satu sisi gabungan. Di sini, bina kiraan pesanan bagi setiap pelanggan dahulu, kemudian gabungkannya semula dengan jadual pelanggan supaya setiap baris pelanggan menyertakan jumlahnya.
Perhatikan bagaimana kueri utama hampir boleh dibaca seperti bahasa biasa: daripada pelanggan, gabungkan kiraan pesanan mereka.
WITH order_counts AS (
SELECT customer_id, COUNT(*) AS num_orders
FROM orders
GROUP BY customer_id
)
SELECT c.name, oc.num_orders
FROM customers c
JOIN order_counts oc
ON oc.customer_id = c.id;Tempat CTE Berada dalam Kueri
Blok WITH mesti muncul sebelum pernyataan yang menggunakannya. CTE hanya kelihatan kepada satu pernyataan yang muncul sejurus selepas takrifannya.
- Anda tidak boleh merujuk CTE dalam kueri berasingan yang berikutnya.
- CTE yang ditakrifkan untuk SELECT tidak boleh digunakan semula oleh SELECT lain yang dijalankan kemudian.
- Skop berakhir pada titik koma yang menamatkan pernyataan.
CTE Berfungsi dengan INSERT, UPDATE, DELETE
Soalan susulan yang kerap ditanya: CTE tidak terhad kepada SELECT. Dalam kebanyakan pangkalan data moden, anda juga boleh menambahkan klausa WITH pada pernyataan pengubahsuaian data.
Ini membolehkan anda mengira satu set baris sekali, kemudian memprosesnya, dan cara ini jauh lebih jelas berbanding subkueri bersarang di dalam klausa WHERE.
WITH stale AS (
SELECT id
FROM sessions
WHERE last_seen < NOW() - INTERVAL '30 days'
)
DELETE FROM sessions
WHERE id IN (SELECT id FROM stale);Kesilapan Biasa Pemula
Penemu duga memerhatikan kesilapan berikut:
- Terlupa menulis kueri utama selepas CTE; blok
WITHsahaja bukan pernyataan yang lengkap. - Meletakkan titik koma antara CTE dengan kueri utama.
- Menyangka CTE kekal merentas beberapa pernyataan.
- Senarai nama lajur pilihan tidak sepadan dengan lajur dalam kueri dalaman.
Cara Membincangkan CTE dalam Temu Duga
Apabila diminta menstrukturkan semula subkueri yang berserabut, jelaskan pemikiran anda: Saya akan memindahkan subkueri penapisan ini ke dalam CTE bernama recent_orders supaya pengagregatan lebih kemas.
Menunjukkan bahawa anda memilih CTE untuk kejelasan dan penggunaan semula, bukan secara membuta tuli, menandakan kematangan peringkat pertengahan. Nyatakan bahawa CTE tidak semestinya menjadikan kueri lebih pantas; nilai utamanya ialah kebolehbacaan.
Semakan Pantas
Uji pemahaman Anda tentang sintaks asas CTE dan skopnya.
Imbas Kembali: CTE Pertama Anda
Anda telah mempelajari bahawa CTE menggunakan WITH name AS ( ... ) untuk menamakan set hasil sementara, kemudian merujuk kepadanya seperti jadual dalam pernyataan berikutnya.
- CTE meningkatkan kebolehbacaan, penggunaan semula dan kebolehan nyahpepijat berbanding subpertanyaan sebaris.
- Skopnya terhad kepada satu pernyataan dan CTE akan hilang selepas itu.
- CTE berfungsi dengan SELECT serta INSERT/UPDATE/DELETE.
- CTE tidak semestinya meningkatkan prestasi.
Seterusnya: merangkaikan beberapa CTE menjadi saluran paip.
Pelajari Persediaan Temu Duga Pengaturcaraan dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 90
- Pelajaran
- 360
Soalan Lazim
Adakah pelajaran “Menulis CTE Pertama Anda” percuma?
Ya — teks penuh “Menulis CTE Pertama Anda” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus Persediaan Temu Duga Pengaturcaraan, tingkat taraf kepada CoddyKit PRO. Kursus Persediaan Temu Duga Pengaturcaraan merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “Menulis CTE Pertama Anda”?
Sintaks asas WITH dan masa CTE meningkatkan kebolehbacaan berbanding subpertanyaan Anda berlatih Persediaan Temu Duga Pengaturcaraan menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan Persediaan Temu Duga Pengaturcaraan?
Tiada pengalaman terdahulu diperlukan. Pembelajaran Persediaan Temu Duga Pengaturcaraan di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 1 daripada 4.
Berapa lamakah pelajaran “Menulis CTE Pertama Anda” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran Persediaan Temu Duga Pengaturcaraan ini?
Ya. Setiap pelajaran Persediaan Temu Duga Pengaturcaraan menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- Menulis CTE Pertama Anda
- Merantaikan Pelbagai CTE
- CTE berbanding Subpertanyaan berbanding Jadual Sementara
- Menyusun Semula Pertanyaan Bersarang kepada CTE