MySQL 5.1 リファレンスマニュアル :: 12 SQL ステートメント構文 :: 12.2 データ取り扱いステートメント :: 12.2.8 サブクエリ構文 :: 12.2.8.8 FROM 条項内のサブクエリ
« 12.2.8.7 相関サブクエリ

12.2.8.9 サブクエリ エラー »
Section Navigation      [Toggle]
  • 12.2.8 サブクエリ構文
  • 12.2.8.1 スカラ演算子としてのサブクエリ
  • 12.2.8.2 サブクエリを利用した比較
  • 12.2.8.3 ANY、IN、そして SOME を持つサブクエリ
  • 12.2.8.4 ALL を持つサブクエリ
  • 12.2.8.5 行サブクエリ
  • 12.2.8.6 EXISTS と NOT EXISTS
  • 12.2.8.7 相関サブクエリ
  • 12.2.8.8 FROM 条項内のサブクエリ
  • 12.2.8.9 サブクエリ エラー
  • 12.2.8.10 最適化サブクエリ
  • 12.2.8.11 MySQL 初期バージョンにおいて、サブクエリの接合としての書き換え

12.2.8.8. FROM 条項内のサブクエリ

サブクエリは SELECT ステートメントの FROM 条項内で正当です。実際の構文はこれです。

SELECT ... FROM (subquery) [AS] name ...

[AS] name 条項は強制なので、FROM 条項内の全てのテーブルは名前を持つ必要があります。subquery 選択リスト内の全てのカラムは固有の名前を持たなければいけません。このマニュアルの中で 「派生テーブル」 という言葉が利用されている他の場所で、この構文の説明を見付ける事ができます。

説明する為に、このテーブルを持っていると仮定してください。

CREATE TABLE t1 (s1 INT, s2 CHAR(5), s3 FLOAT);

ここに、この例のテーブルを利用して、FROM 条項の中でサブクエリを利用する方法の説明があります。

INSERT INTO t1 VALUES (1,'1',1.0);
INSERT INTO t1 VALUES (2,'2',2.0);
SELECT sb1,sb2,sb3
FROM (SELECT s1 AS sb1, s2 AS sb2, s3*2 AS sb3 FROM t1) AS sb
WHERE sb1 > 1;

結果: 2, '2', 4.0.

ここに別の例があります。グループ分けされたテーブルの、合計セットの平均を知りたいと仮定します。これは機能しません。

SELECT AVG(SUM(column1)) FROM t1 GROUP BY column1;

しかし、このクエリは要求された情報を提供します。

SELECT AVG(sum_column1)
FROM (SELECT SUM(column1) AS sum_column1
FROM t1 GROUP BY column1) AS t1;

サブクエリの中で利用されたカラム名(sum_column1) が外部クエリの中で認められている事に注意してください。

FROM 条項内のサブクエリは、スカラ、カラム、行、そしてテーブルを返す事ができます。FROM 条項内のサブクエリは、JOIN 演算の ON 条項内で利用されない限り、相関サブクエリになる事ができません。

FROM 条項内のサブクエリは、EXPLAIN ステートメント(派生テンポラリ テーブルが作られた) に対しても実行する事ができます。これは、上位レベルクエリが最適化の段階で全てのテーブルの情報を必要とする為に起こります。

Copyright © 1997, 2010, Oracle and/or its affiliates. All rights reserved. Legal Notices
Top / Previous / Next / Up / Table of Contents
© 2010, Oracle Corporation and/or its affiliates