mysqlとしてのものはありますか?

WBOY
リリース: 2023-05-08 18:57:08
オリジナル
1439 人が閲覧しました

はい、WITH AS は MySQL で一般的に使用されるクエリ ステートメントであり、一時テーブルを作成し、後続のクエリで使用するために使用されます。ここではWITH ASの使い方と実践例を詳しく紹介します。

  1. WITH as 構文

WITH as 構文は主に次の 2 つの部分に分かれています:

1) WITH: キーワード。 or を導入するために使用されます。複数の一時テーブル。

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;

where,

cte_name: 一時テーブルの名前;

column_name1、column_name2、...: 一時テーブルの列名;

subquery1、subquery2、subquery3...: サブクエリ発言。

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

ステートメントとしての WITH の実際のアプリケーション シナリオには、主に次の側面が含まれます。

1) 再帰クエリ

WITH as ステートメントは再帰クエリを実行して、階層構造を持つ結果セットを取得できます。次に、従業員テーブルを例として説明します。

WITH RECURSIVE emp AS (
SELECT emp_id, emp_name, emp_manager_id
FROMemployees
WHERE emp_manager_id IS NULL
UNION ALL
SELECT e2.emp_id, e2.emp_name, e2.emp_manager_id
FROM 従業員 e2
INNER JOIN emp ON e2.emp_manager_id = emp.emp_id
)
SELECT * FROM emp;

上記のステートメントでは、再帰クエリの基本部分は、テーブル内のルート ノード (つまり、マネージャーのいない従業員) を検索することです。各再帰反復で、テーブルのサブクエリは、次の位置にある各ノードの下位ノードを検索します。一度実行して結果に追加します。

2) 結果セットを整理する

WITH as ステートメントは、複数のクエリ結果をまとめて整理し、複数テーブルの結合クエリを実行できます。以下では、製品の売上と在庫のテーブルを例として説明します。

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 在庫 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;

上記のステートメントでは、まず sales と2 つの一時テーブルをインベントリし、これら 2 つのテーブルに対して結合クエリを実行して結果セットを出力します。この結果セットには、販売テーブルからの販売情報と在庫テーブルからの在庫情報が含まれています。

3) サブクエリの最適化

WITH as ステートメントを使用してサブクエリを最適化することもできます。通常、サブクエリ ステートメントの実行効率は非常に低く、コードの混乱やエラーが発生しやすくなります。 WITH as ステートメントを使用すると、クエリの可読性と保守性が向上します。以下では、注文と注文の詳細テーブルを例として説明します:

WITH ord AS (
SELECT order_id
FROMorders
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) ステートメントを直接使用して、注文の詳細をクエリします。これにより、クエリの効率が向上するだけでなく、コードの可読性と保守性も向上します。

概要:

この記事では、MySQL での WITH ステートメントの使用法と実際の応用シナリオを紹介します。実際の開発では、特定のニーズに応じて WITH as ステートメントを柔軟に使用して、クエリの効率性、コードの可読性、保守性を向上させることができます。

以上がmysqlとしてのものはありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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