WITH as 構文
WITH as 構文は主に次の 2 つの部分に分かれています:
1) WITH : キーワード。1 つ以上の一時テーブルを導入するために使用されます。
2) AS: キーワード。1 つ以上の一時テーブルを定義するために使用されます。
WITH as ステートメントの一般的な構文は次のとおりです:
WITH [RECURSIVE] cte_name (column_name1,column_name2,...) AS ( subquery1 UNION [ALL] subquery2 UNION [ALL] subquery3 ... ) SELECT * FROM cte_name;
そのうち、
cte_name: 一時テーブルの名前;
column_name1 ,column_name2,...: 一時テーブルの列名;
subquery1、subquery2、subquery3...: サブクエリ ステートメント。
実際のアプリケーションとしての
ステートメントとしての WITH の実際のアプリケーション シナリオには、主に次の側面が含まれます:
1)再帰的クエリ
WITH ステートメントを使用すると、再帰的クエリを実装し、階層的な結果セットを取得できます。以下では、例として従業員テーブルを取り上げて説明します。
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;
上記のステートメントでは、再帰クエリの基本的な部分は、テーブル内のルート ノード (つまり、マネージャーのいない従業員) を検索することです。各再帰反復で、テーブル サブクエリは各ノードの下位を一度に検索し、結果セットに追加します。
2) 結果セットを整理する
WITH ステートメントを使用すると、複数のクエリ結果を結合して、複数テーブル結合クエリを実行できます。以下では、製品の売上と在庫のテーブルを例として説明します。
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;
上のステートメントでは、最初に 2 つの一時テーブル (売上と在庫) を定義し、次にこれら 2 つのテーブルに対して結合クエリを実行して出力します。結果を設定します。この結果セットには、販売テーブルからの販売情報と在庫テーブルからの在庫情報が含まれています。
3) サブクエリの最適化
WITH as ステートメントを使用してサブクエリを最適化することもできます。サブクエリ ステートメントは非効率であることが多く、混乱を招くコードやエラーにつながる可能性があります。 WITH as ステートメントを使用すると、クエリの可読性と保守性が向上します。以下では、注文と注文詳細テーブルを例として説明します。
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);
条件を満たす注文情報を保存するために、「ord」という名前の一時テーブルを定義します。次に、後続のクエリで、WHERE order_id IN (SELECT order_id FROM ord) ステートメントを直接使用して、注文の詳細をクエリします。これにより、クエリの効率が向上するだけでなく、コードの可読性と保守性も向上します。
以上がwith as mysqlの構文は何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。