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を使用すると、データを数分で簡単に視覚化し、リアルタイムのダッシュボードで監視できます。今日お試しください。