MySQL 8 の WITH クエリについて学ぶ序文: 論理的に複雑な SQL の場合、 を使用すると一時テーブルの数が大幅に削減され、コードの可読性と保守性が向上します。 1. 例最初の公式例から、クエリ ステートメントによって 4 つの一時テーブル ( cte1(txt) を ("This " を選択) として指定すると、 cte2(txt) AS (SELECT CONCAT(cte1.txt,"is a ") FROM cte1)、 cte3(txt) AS (SELECT "nice query" UNION SELECT "素晴らしいクエリ" UNION SELECT "クエリ")、 cte4(txt) AS (SELECT concat(cte2.txt, cte3.txt) FROM cte2, cte3) cte4からMAX(txt)、MIN(txt)を選択します。 +----------------------------+----------------------+ | 最大(txt) | 最小(txt) | +----------------------------+----------------------+ | これは素晴らしいクエリです | これは素晴らしいクエリです | +----------------------------+----------------------+ セット内の1行(0,00秒) 2 番目の公式例は再帰の使用です。ドキュメントを読んで、以下のクエリ結果を分析しました。 再帰的なmy_cte AS ( 1 を n として選択 ユニオンオール my_cteから1+nを選択します。n<10 ) my_cte から * を選択します。 +------+ | いいえ | +------+ | 1 | | 2 | | 3 | | 4 | | 5 | | 6 | | 7 | | 8 | | 9 | | 10 | +------+ セット内の 10 行 (0,00 秒) 私の理解によれば、次の 2 つの異なるクエリを作成しましたが、クエリの結果は同じです。 これは、最初の行の一時テーブル列名を指定します。WITH RECURSIVE my_cte(a,b,c) AS ( 1,1,1を選択 ユニオンオール my_cte から 1+a,2+b,3+c を選択、a<10 の場合 ) my_cte から * を選択します。 最初の行は列名を指定せず、列名は最初のクエリWITH RECURSIVE my_cte ASによって返された結果によって決定されます。 ( 1 を a として、1 を b として、1 を c として選択します。 ユニオンオール my_cte から 1+a,2+b,3+c を選択、a<10 の場合 ) my_cte から * を選択します。 公式ドキュメントによると、一時テーブルの構文テンプレートは次のようになり、多数の行を持つクエリで構成できます。 WITH RECURSIVE cte_name [列名のリスト] AS ( SELECT ... <-- 初期セットを指定する ユニオンオール SELECT ... <-- 初期セットを指定する ユニオンオール ... SELECT ... <-- 新しい行を導出する方法を指定します ユニオンオール SELECT ... <-- 新しい行を導出する方法を指定します ... ) [、その他のCTE定義はいくつでも] 公式ドキュメントには、一時テーブルを使用する場合、新しいテーブルを追加、削除、変更、およびクエリできることも記載されています。詳細については、公式ドキュメントをお読みください。 3. 練習する再帰演習は主に親ノードIDなどを含むテーブルに使用されます。詳細については以下の演習を参照してください。 テーブルtbを作成します(id VARCHAR(3), pid VARCHAR(3), name VARCHAR(64)); INSERT INTO tb VALUES('002', 0, '浙江省'); INSERT INTO tb VALUES('001', 0, '広東省'); INSERT INTO tb VALUES('003', '002', '衢州市'); tb VALUES('004', '002', '杭州') に挿入します。 INSERT INTO tb VALUES('005', '002', '湖州市'); INSERT INTO tb VALUES('006', '002', '嘉興市'); INSERT INTO tb VALUES('007', '002', '寧波市'); INSERT INTO tb VALUES('008', '002', '紹興市'); INSERT INTO tb VALUES('009', '002', '泰州市'); INSERT INTO tb VALUES('010', '002', '温州市'); INSERT INTO tb VALUES('011', '002', '麗水市'); INSERT INTO tb VALUES('012', '002', '金華市'); INSERT INTO tb VALUES('013', '002', '舟山市'); tb VALUES('014', '004', 'Uptown') に挿入します。 tb VALUES('015', '004', 'Downtown') に挿入します。 INSERT INTO tb VALUES('016', '004', '拱壽区'); INSERT INTO tb VALUES('017', '004', '余杭区'); INSERT INTO tb VALUES('018', '011', 'Jindong District'); tb VALUES('019', '001', '広州') に挿入します。 INSERT INTO tb VALUES('020', '001', '深セン市'); 再帰的な cte AS ( tb から id、name を選択、id='002' を選択 ユニオンオール SELECT k.id, CONCAT(c.name,'->',k.name) AS name FROM tb k INNER JOIN cte c ON c.id = k.pid ) cte から * を選択します。 実行結果: 分析結果には、最初の行 これで、MySQL WITH クエリの詳細に関するこの記事は終了です。より関連性の高い MySQL WITH クエリの内容については、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: HTMLフォームアプリケーションにはチェックボックスとラジオボタンの使用が含まれます
>>: ページデザインにおけるテーブルとdivの適切な適用についての簡単な説明
Windows のデフォルトのスクロール バー スタイルは見苦しく、プロジェクト内でスクロール バー...
Web ページ上の色の表現は、さまざまな要因によって影響を受けます。Web ページで非常に美しい配色...
目次1. 配列の分解2. オブジェクトの分解3. 不完全な解体4. 分割代入を使用して変数交換を実装...
目次概要1. パスモジュール2. モジュールまで3. fsモジュール4. イベントモジュール5. h...
目次序文インストール導入環境の切り替え傍受を要求するレスポンスインターセプションAPIの統合管理要約...
1. 概要Group by は、by の後の規則に従ってデータをグループ化することを意味します。いわ...
目次変数意味があり発音しやすい変数名を使用する同じ型の変数には同じ語彙を使用する検索可能な名前を使用...
平日はニュースに注目して、テンセントをよく閲覧しています。しかし、コメントへの返信はほとんど見られま...
次のように、Win10でMysqlの解凍バージョンをインストールします。環境: win10 64ビッ...
目次レプリケーション ロジックの簡単な概要:遅延の原因と解決策〇メインデータベースへの頻繁なDMLリ...
1. mysql tar ファイルをダウンロードします。参考: 2. インストールパッケージがあるデ...
システムの入力と出力の管理1. システムの入力と出力を理解するLinuxシステムでは、1は正しい出力...
コードをコピーコードは次のとおりです。 <form action="/hehe&qu...
ドメイン名に続くパスがデフォルトの Web ディレクトリではなく、ローカル ディスク上の他のディレク...
この記事では、例を使用して MySQL カーソルの概念と使用方法を説明します。ご参考までに、詳細は以...