MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLサブクエリにおける派生テーブル(Derived Table)とは?基本概念と実例をわかりやすく解説

MySQLでは、サブクエリがFROM句から始まる場合、そのサブクエリが生成する結果セットは「派生テーブル(Derived Table)」と呼ばれます。また、このように派生テーブルを生み出すサブクエリのことは「物化サブクエリ(Materialized Subquery)」と呼びます。

派生テーブルの基本イメージ

派生テーブルとは、通常のテーブルではなく、クエリの実行時に一時的に作成される仮想的なテーブルのことです。外側のクエリは、この派生テーブルをあたかも普通のテーブルであるかのように扱って集計や抽出を行うことができます。

サンプルデータの確認

ここでは、次の「cars」テーブルのデータを使って派生テーブルの動作を確認していきます。

mysql> Select * from Cars;
+------+--------------+---------+
| ID   | Name         | Price   |
+------+--------------+---------+
|  1   | Nexa         | 750000  |
|  2   | Maruti Swift | 450000  |
|  3   | BMW          | 4450000 |
|  4   | VOLVO        | 2250000 |
|  5   | Alto         | 250000  |
|  6   | Skoda        | 1250000 |
|  7   | Toyota       | 2400000 |
|  8   | Ford         | 1100000 |
+------+--------------+---------+
8 rows in set (0.02 sec)

派生テーブルを生成するクエリ例

それでは、実際にFROM句内にサブクエリを記述し、派生テーブルを作成してみましょう。

mysql> Select AVG(P) FROM(SELECT Name, SUM(Price) P FROM cars GROUP BY Name)AS totals;
+--------------+
| AVG(P)       |
+--------------+
| 1612500.0000 |
+--------------+
1 row in set (0.76 sec)

このクエリでは、まず内側のサブクエリが車種ごとの合計価格を計算した結果セット(=派生テーブル)を返します。その後、外側のクエリがその派生テーブルに対してAVG関数を適用し、平均値を算出しています。

派生テーブルにはエイリアスが必須

MySQLで派生テーブルを利用する際には、必ずエイリアス(別名)を付ける必要がある点に注意しましょう。上記の例では、「totals」というエイリアスを派生テーブルに付けています。エイリアスがないと構文エラーになるため、忘れずに指定してください。

サブクエリ単体を実行して派生テーブルの中身を見る

内側のサブクエリだけを単独で実行すると、派生テーブルがどのようなデータを持っているのかを確認できます。

mysql> SELECT Name, SUM(Price) P FROM cars GROUP BY Name ;
+--------------+---------+
| Name         | P       |
+--------------+---------+
| Alto         | 250000  |
| BMW          | 4450000 |
| Ford         | 1100000 |
| Maruti Swift | 450000  |
| Nexa         | 750000  |
| Skoda        | 1250000 |
| Toyota       | 2400000 |
| VOLVO        | 2250000 |
+--------------+---------+
8 rows in set (0.03 sec)

このように、サブクエリの結果セットが「totals」という名前の一時的なテーブルとして扱われ、外側のクエリから参照されていることがわかります。派生テーブルを活用することで、集計結果に対してさらに集計や条件絞り込みを行うなど、複雑な処理を段階的に記述できるようになります。

  1. JavaでMySQLテーブルのカラム数を取得・カウントする方法

    MySQLテーブルのカラム(列)数をJavaで取得するには、ResultSetMetaDataインターフェースを使用します。ResultSetMetaDataを活用すれば、カラムの総数だけでなく、各カラムの名前やデータ型といった詳細情報も簡単に取得できます。前提:サンプルテーブルの作成まずは動作確認用のテーブルを作成しましょう。以下のSQLでは、3つのカラムを持つ「DemoTable」を作成しています。mysql> create table DemoTable     -> (     -> St

  2. MySQLの構文エラーとは?予約済みキーワードでテーブルを作成する方法

    MySQLの予約済みキーワードによる構文エラーとはMySQLでは、テーブル名に予約済みキーワード(reserved keyword)を使用すると、そのままではSQL構文エラーが発生します。ここでは例として、「groups」という名前のテーブルを作成しようとした場合を見てみましょう。「groups」はMySQLの予約済みキーワードであるため、通常の記述方法ではテーブルを作成できません。エラーが発生するケース以下のように、予約語「groups」を使ってテーブルを作成しようとすると、ERROR 1064という構文エラーが出力されます。mysql> create table groups->