with as mysqlの構文は何ですか

WBOY
リリース: 2023-05-29 22:28:31
転載
1756 人が閲覧しました

  1. 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...: サブクエリ ステートメント。

  1. 実際のアプリケーションとしての

ステートメントとしての 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 サイトの他の関連記事を参照してください。

関連ラベル:
ソース:yisu.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート