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の適切な適用についての簡単な説明
ハッシュモード(デフォルト)動作原理:ウェブページのハッシュ値の変化を監視する—> onhas...
目次MySQL の基本的な共通コマンド1. SQL文2. テーブルを作成する3. フィールドのプロパ...
目次背景分析するデータシミュレーション1. 従業員テーブルと部門テーブルの2つのテーブルを作成します...
Navicat を使用してリモート Linux MySQL データベースに接続すると、不明なエラー ...
目次DragEvent インターフェースデータ転送インターフェースの概要DataTransfer の...
目次chmod例権限に関する特別な注意分析するチョーンchgrp umask Linux オペレーテ...
この記事では、一般的な MySQL ストレージ エンジンの機能と使用方法を例を使って説明します。ご参...
Mavenパッケージを解凍する tar xf apache-maven-3.5.4-bin.tar....
この機能を実装するにあたり、本家ブロガーさんから拝借した方法では色の切り替えが実現できず、長い間考え...
MySQLソフトウェアのインストールとデータベースの基礎は参考用です。具体的な内容は次のとおりです。...
トライデント コア: IE、MaxThon、TT、The World、360、Sogou Brows...
目次1. レンダリング2. 実施原則3. まとめ1. レンダリング 2. 実施原則幅と高さが等しい拡...
キャッシュを使用する目的は、バックエンドの負荷を軽減し、Web サイトの同時実行性を向上させることで...
目次情事の概念取引の状態取引の役割取引の特徴トランザクション構文トランザクション対応ストレージエンジ...
アンカーリンクをクリックするとスムーズにスクロールし、自由にトップ位置に調整できます。 1. アンカ...