Using nested SELECT/ja

From SQLZOO
Jump to navigation Jump to search
Language:Project:Language policy 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')

SELECT within SELECT Tutorial/jaに戻る。