WITH as sintaks
WITH as sintaks terutamanya dibahagikan kepada dua bahagian berikut:
1) DENGAN : Kata kunci, digunakan untuk memperkenalkan satu atau lebih jadual sementara.
2) AS: kata kunci, digunakan untuk mentakrifkan satu atau lebih jadual sementara. Sintaks am bagi pernyataan
WITH as adalah seperti berikut:
WITH [RECURSIVE] cte_name (column_name1,column_name2,...) AS ( subquery1 UNION [ALL] subquery2 UNION [ALL] subquery3 ... ) SELECT * FROM cte_name;
Antaranya,
cte_name: nama jadual sementara
nama_kolum1 ,column_name2,...: Nama lajur dalam jadual sementara;
subquery1, subquery2, subquery3...: pernyataan subquery.
Aplikasi Praktikal WITH sebagai
Senario aplikasi sebenar WITH sebagai kenyataan terutamanya merangkumi aspek berikut:
1 ) Pertanyaan rekursif
Dengan menggunakan pernyataan WITH, anda boleh melaksanakan pertanyaan rekursif dan mendapatkan set hasil hierarki. Berikut mengambil jadual pekerja sebagai contoh untuk menggambarkan:
WITH RECURSIVE emp AS ( SELECT emp_id, emp_name, emp_manager_id FROM employees WHERE emp_manager_id IS NULL UNION ALL SELECT e2.emp_id, e2.emp_name, e2.emp_manager_id FROM employees e2 INNER JOIN emp ON e2.emp_manager_id = emp.emp_id ) SELECT * FROM emp;
Dalam pernyataan di atas, bahagian asas pertanyaan rekursif ialah mencari nod akar dalam jadual (iaitu, pekerja tanpa pengurus). Dalam setiap lelaran rekursif, jadual Subkueri mencari subordinat setiap nod sekali gus dan menambahkannya pada set hasil.
2) Susun set hasil
Menggunakan pernyataan WITH, berbilang hasil pertanyaan boleh digabungkan bersama untuk melaksanakan pertanyaan gabungan berbilang jadual. Berikut mengambil jadual jualan dan inventori produk sebagai contoh untuk menggambarkan:
WITH sales AS ( SELECT p.product_id, p.product_name, s.sale_id, s.sale_date, s.quantity, s.price FROM products p INNER JOIN sales s ON p.product_id = s.product_id ), inventory AS ( SELECT p.product_id, p.product_name, i.inventory_id, i.quantity FROM products p INNER JOIN inventory i ON p.product_id = i.product_id ) SELECT s.sale_id, s.sale_date, s.product_id, s.product_name, s.quantity, s.price, i.inventory_id, i.quantity as inventory_quantity FROM sales s INNER JOIN inventory i ON s.product_id = i.product_id;
Dalam pernyataan di atas, kami mula-mula mentakrifkan dua jadual sementara, jualan dan inventori, kemudian melakukan pertanyaan bersama pada kedua-dua jadual ini untuk menghasilkan output keputusan yang ditetapkan. Set hasil ini mengandungi maklumat jualan daripada jadual jualan dan maklumat inventori daripada jadual inventori.
3) Pengoptimuman subquery
WITH as statement juga boleh digunakan untuk mengoptimumkan subquery. Pernyataan subquery selalunya tidak cekap dan boleh membawa kepada kod dan ralat yang mengelirukan. Pernyataan WITH sebagai boleh meningkatkan kebolehbacaan dan kebolehselenggaraan pertanyaan. Berikut mengambil jadual butiran pesanan dan pesanan sebagai contoh:
WITH ord AS ( SELECT order_id FROM orders WHERE order_date > '2022-01-01' ) SELECT * FROM order_details WHERE order_id IN (SELECT order_id FROM ord);
Kami mentakrifkan jadual sementara bernama "ord" untuk menyimpan maklumat pesanan yang memenuhi syarat. Kemudian dalam pertanyaan berikutnya, gunakan terus pernyataan WHERE order_id IN (SELECT order_id FROM ord) untuk menanyakan butiran pesanan. Ini bukan sahaja meningkatkan kecekapan pertanyaan, tetapi juga meningkatkan kebolehbacaan dan kebolehselenggaraan kod.
Atas ialah kandungan terperinci Apakah sintaks with as mysql. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!