Common Table Expressions(CTE)を使用すると、MySQLで複雑なSQLクエリを簡単に記述できます。この記事では、MySQLの共通テーブル式とは何か、およびMySQLでCTEを作成する方法について説明します。
共通テーブル式とは
Common Table Expressionは、名前付きの結果セットであり、そのスコープは、定義および使用されるSQLクエリに限定されます。派生テーブルに似ていますが、オブジェクトとして保存されず、派生テーブルとは異なり、自己参照することができます。その結果、CTEはMySQLの派生テーブルよりも優れたパフォーマンスを提供します。
ボーナスリード:MySQLでマージンを計算する方法
MySQLの一般的なテーブル式
MySQLの一般的なテーブル式の構文は次のとおりです。
WITH cte_name (column_list) AS ( query ) SELECT * FROM cte_name;
上記のクエリでは、CTEの名前を指定する必要があります。SQLクエリの結果は、CTE名を使用して参照する必要があります。 column_listの列数に注意してください クエリのクエリと同じである必要があります 。
一般的なテーブル式(CTE)の例を見てみましょう。
ボーナスリード:SQLクエリを使用して最も売れている製品を取得する方法
sales(id、order_date、amount)があるとします。 テーブル。
mysql> create table sales(id int, order_date date, amount int); mysql> insert into sales(id, order_date, amount) values(1, '2021-01-01', 200), (2, '2021-01-02', 250), (3, '2021-01-03', 220), (4, '2021-01-04', 230), (5, '2021-01-05', 210), (6, '2021-01-06', 100), (7, '2021-01-07', 120), (8, '2021-01-08', 150), (9, '2021-01-09', 180), (10, '2021-01-10', 200); mysql> select * from sales; +------+------------+--------+ | id | order_date | amount | +------+------------+--------+ | 1 | 2021-01-01 | 200 | | 2 | 2021-01-02 | 250 | | 3 | 2021-01-03 | 220 | | 4 | 2021-01-04 | 230 | | 5 | 2021-01-05 | 210 | | 6 | 2021-01-06 | 100 | | 7 | 2021-01-07 | 120 | | 8 | 2021-01-08 | 150 | | 9 | 2021-01-09 | 180 | | 10 | 2021-01-10 | 200 | +------+------------+--------+
これは、金額が200を超える販売レコードのみを選択するためのCTEです。
with test_cte as ( select id,order_date,amount from sales where amount>200 ) select * from test_cte; +------+------------+--------+ | id | order_date | amount | +------+------------+--------+ | 1 | 2021-01-01 | 200 | | 2 | 2021-01-02 | 250 | | 3 | 2021-01-03 | 220 | | 4 | 2021-01-04 | 230 | | 5 | 2021-01-05 | 210 | | 10 | 2021-01-10 | 200 | +------+------------+--------+
上記のCTEでは、SELECTクエリを指定して、WITH句内で量が200を超える行をフィルタリングします。
ボーナスリード:MySQLでCASEステートメントを使用する方法
CTEは、SELECT、UPDATE、INSERT、およびDELETEステートメントで使用できることに注意してください。同じものの構文は次のとおりです。
WITH … SELECT … WITH … UPDATE … WITH … DELETE …
また、以下に示すように、サブクエリとしてCTEを使用することもできます
SELECT … WHERE id IN (WITH … SELECT …); SELECT * FROM (WITH … SELECT …) AS temporary_table;
SELECTステートメントの結果をCREATE/INSERT / REPLACEステートメントの入力として使用する場合は、その中でWITH句を使用することもできます。ここにいくつかの例があります、
CREATE TABLE … WITH … SELECT … CREATE VIEW … WITH … SELECT … INSERT … WITH … SELECT … REPLACE … WITH … SELECT … DECLARE CURSOR … WITH … SELECT … EXPLAIN … WITH … SELECT …
ボーナスリード:MySQLでさまざまな条件で複数のカウントを取得する
Ubiqの共通テーブル式
UbiqレポートツールはCTEベースのSELECTクエリをサポートし、さまざまな方法でSQL結果を簡単に視覚化できます。また、MySQLクエリ結果からダッシュボードとチャートを作成することもできます。これがUbiqでの上記のCTEクエリです。
実際、クエリを実行した後、視覚化タイプをクリックするだけで、結果をグラフにプロットできます。
MySQL用のレポートツールが必要ですか? Ubiqを使用すると、データを数分で簡単に視覚化し、リアルタイムのダッシュボードで監視できます。今日お試しください。