Using nested SELECT/ja
Language: | [[:{{#invoke:String|sub|Using nested SELECT/ja
|1 |Expression error: Unrecognized punctuation character "{".}}|English]] |
---|
元のチュートリアル SELECT within SELECT Tutorial/ja に戻る。
Contents
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'
Operators over a set
These operators are binary - they normally take two parameters:
= equals > greater than < less than >= greater or equal <= less or equal
You can use the words ALL or ANY where the right side of the operator might have multiple values.
Show each country that has a population greater than the population of ALL countries in Europe.
Note that we mean greater than every single country in Europe; not the combined population of Europe.
SELECT name FROM world
WHERE population > ALL
(SELECT population FROM world
WHERE continent='Europe')
Return to the SELECT within SELECT Tutorial