Using nested SELECT/ja
Language: | English • 日本語 • 中文 |
---|
元のチュートリアル に戻る。
SELECT の中で SELECT を使う
導出テーブル(SELECTの実行結果としてのテーブル)の使い方は SELECT FROM SELECT を見る。
SELECT 文の実行結果は、他のSELECT文の中で 値やテーブルとして利用できる。
次の例文:
SELECT continent FROM world WHERE name = 'Brazil'
の実行結果は'South America'
で、この値をブラジル'Brazil'と同じ大陸にある全ての国名のリストを得るために利用する
ブラジル'Brazil' と同じ大陸にある各国のリストを求める
SELECT name FROM world WHERE continent =
(SELECT continent
FROM world WHERE name = 'Brazil')
エイリアス
SQL のバージョンによってはサブクエリにエイリアス(別名)を付けることが必要となる。単にAS 別名
を閉じた括弧(サブクエリ)の後ろに書けばよい:
SELECT name FROM world WHERE continent = (SELECT continent FROM world WHERE name='Brazil') AS brazil_continent
実行結果が複数の値となる場合
サブクエリで複数の値を一度の実行結果として得ることが出来る。もしもそのようなことが起きた場合、上記の例のクエリでは、1個の値と2個以上の値を比較しているので、失敗(実行結果がエラー)となる。 IN を使うことで、この様な可能性により安全に対処できる。
次の文 (SELECT continent FROM world WHERE name = 'Brazil' OR name='Mexico')
で、2つの値('North America' and 'South America')が求まる。これを次のように使う:
SELECT name, continent FROM world WHERE continent IN (SELECT continent FROM world WHERE name='Brazil' OR name='Mexico')
ブラジル'Brazil' またはメキシコ'Mexico' と同じ大陸にある各国とその大陸をリストアップする。
SELECT name, continent FROM world
WHERE continent IN
(SELECT continent
FROM world WHERE name='Brazil'
OR name='Mexico')
SELECT 文のフィールド中のサブクエリ
一つの値だけが求められるようなサブクエリは、SELECT 文のフィールで利用できる。
中国 China の人口 population をイギリス United Kingdom の何倍あるかで表示する
SELECT
population/(SELECT population FROM world
WHERE name='United Kingdom')
FROM world
WHERE name = 'China'
集合に対するオペレータ(演算子)
2項演算のオペレータは通常は2つのパラメータを伴う:
= 等しい > より大きい < より小さい >= より大きいか等しい <= より小さいか等しい
ALL または ANY のキーワードをオペレータの右側に指定すると複数の値を扱うことが出来る様になる。
ヨーロッパ Europe のすべてのALL 国の人口よりも大きな人口の国を表示する。
注)ヨーロッパのそれぞれの一国の人口より大きいことを意味する。ヨーロッパ全体の人口(合算)ではない。
SELECT name FROM world
WHERE population > ALL
(SELECT population FROM world
WHERE continent='Europe')