Rumah > pangkalan data > tutorial mysql > Apakah sintaks with as mysql

Apakah sintaks with as mysql

WBOY
Lepaskan: 2023-05-29 22:28:31
ke hadapan
1792 orang telah melayarinya

  1. 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;
Salin selepas log masuk

Antaranya,

cte_name: nama jadual sementara

nama_kolum1 ,column_name2,...: Nama lajur dalam jadual sementara;

subquery1, subquery2, subquery3...: pernyataan subquery.

  1. 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;
Salin selepas log masuk

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;
Salin selepas log masuk

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);
Salin selepas log masuk

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!

Label berkaitan:
sumber:yisu.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan