Using nested SELECT/ja

From SQLZOO
Revision as of 15:04, 18 April 2018 by Kobashi.kaz (talk | contribs) (Multiple Results)
Jump to: navigation, search

元のチュートリアル SELECT within SELECT Tutorial/ja に戻る。

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')

Subquery on the SELECT line

If you are certain that only one value will be returned you can use that query on the SELECT line.

Show the population of China as a multiple of the population of the 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