SELECT from WORLD Tutorial/ja

From SQLZOO
Jump to navigation Jump to search
Language:Project:Language policy English  • 日本語 • 中文
namecontinentarea populationgdp
AfghanistanAsia6522302550010020343000000
AlbaniaEurope28748 2831741 12960000000
AlgeriaAfrica2381741 37100000 188681000000
AndorraEurope46878115 3712000000
AngolaAfrica1246700 20609294 100990000000
...
テーブル名 world

name:国名
continent:大陸
area:面積
population:人口
gdp:国内総生産


このチュートリアルでは world テーブルで SELECT コマンドを使う:

導入

このテーブルについて

全ての国の国名と大陸と人口を表示する SQL コマンドを実行して結果を観察する。

SELECT name, continent, population FROM world
SELECT name, continent, population FROM world

大きな国々

WHERE でレコードを選択する方法

人口が2億人(200000000 ゼロが8個ある)以上の国の名前を表示

SELECT name FROM world
WHERE population = 64105700
SELECT name FROM world
WHERE population>200000000

国民一人当たりの国内総生産

人口population2億人以上の国の国名nameと国民一人当たりの国内総生産を表示

国民一人当たりの国内総生産は、国内総生産 GDP を 人口 population で割った値。式は GDP/population

SELECT name, gdp/population FROM world
  WHERE population > 200000000

南アメリカを100万人単位で

大陸continentが South America の国のnamepopulationを 百万人単位 に変換して表示する。人口 population を 1000000 で割ると100万人単位の人口になる。

SELECT name, population/1000000 FROM world
  WHERE continent='South America'

フランス、ドイツ、イタリア

国名nameと人口population を France, Germany, Italy について表示する。

SELECT name, population FROM world
  WHERE name IN ('France','Germany','Italy')

ユナイテッド

国名に 'United' を含む国の国名を特定する。

SELECT name FROM world
  WHERE name LIKE '%United%'

ビッグになる2つの道

ビッグになる2つの道: ビッグな国とは、面積が 3000000 平方キロ以上 または 人口が 250000000 以上の国とする。

面積か人口がビッグな国を表示する。国名 人口 面積(name, population , area)を表示する。

select name,population,area
from world
where area>3000000
or population>250000000

どちらか片方だけ(両方はダメ)

排他的論理和 Exclusive OR (XOR)の問題。面積か人口のどちらかだけ(両方は除く)が大きな国を表示する。国名 人口 面積を表示する(name, population, area)。

  • オーストラリアは面積は大きく人口は少ないので、含まれる。
  • インドネシアは人口は大きく面積は狭いので、含まれる。
  • 中国は人口も面積も大きいので除かれる。
  • イギリスは人口も面積も小さいので除かれる。
select name, population,area
from world
where
(population>250000000 or area>3000000)
and not(population>250000000 and area>3000000)

端数の丸め

南アメリカ大陸にある国の、国名name、人口population(100万人単位)、GDP(10億ドル単位)を表示する。 ROUND ROUND 関数で小数点以下の数値を2桁に丸める。

南アメリカ大陸にある国の国名と人口(100万人単位)とGDP(10億ドル単位)を小数点以下2桁に丸めて表示する。
1000000 (ゼロが6個 zeros)で割ると100万単位。1000000000(ゼロが9個)で割ると10億単位
SELECT name, ROUND(population/1000000,2),
             ROUND(gdp/1000000000,2)
  FROM world
 WHERE continent='South America'

1兆ドル経済

国内総生産 GDP が1兆ドル以上(0が12個)の国の国名と国民一人当たりのGDPを表示する。 GDPの単位は$1000単位にまとめる。

GDPが1兆ドル以上の国の国名と国民一人当たりのGDPを1000ドル単位に丸めて表示する。

select name, ROUND(gdp/population,-3)
from world
where
gdp>1000000000000

国名と首都が同じ文字数

ギリシャ(Greece) の首都はアテネ(Athens)。 GreeceとAthensの綴りはどちらも同じ6文字。

国名 name と首都 capital が同じ長さの国の、国名と首都を表示する。

  • LENGTH 関数で文字列の文字数を求める。
SELECT name, LENGTH(name), continent, LENGTH(continent), capital, LENGTH(capital)
  FROM world
 WHERE name LIKE 'G%'
SELECT name, capital
  FROM world
 WHERE LENGTH(name)=LENGTH(capital)

国名と首都の一致

スウェーデン Sweden の首都はストックホルム Stockholm 。どちらもSから始まる。

国名と首都の先頭の文字が同じである国の、国名と首都名を表示する。ただし、国名と首都名が同じ場合は除く。
  • 文字列の先頭一文字を切り取るには、 LEFT を使う。
  • 記号 <>NOT EQUALS 演算子の代わりに利用できる。
SELECT name, LEFT(name,1), capital
FROM world
SELECT name,capital
FROM world
WHERE LEFT(name,1)=LEFT(capital,1)
AND name<>capital

全ての母音

Equatorial Guinea (エクアトリアル ギニア)と Dominican Republic(ドミニカ共和国)はどちらも全ての母音(a e i o u)を国名に含んでいる。これらの国は、名前に単語が2つ以上あるので以下の対象としない。

国名に全ての母音を含む国で、空白を含まない単語1つの国名を検索する。

  • name NOT LIKE '%a%' で特定の文字を含む国を除外できる。
  • 入力済みのSQLはBから始まる国名を表示するが、バハマ Bahamas と ベラルーシ Belarus は少なくとも1つ以上のaを含むので表示されない。
SELECT name
   FROM world
WHERE name LIKE 'B%'
  AND name NOT LIKE '%a%'
SELECT name
  FROM world
WHERE name LIKE '%a%'
AND name LIKE '%e%'
AND name LIKE '%i%'
AND name LIKE '%o%'
AND name LIKE '%u%'
AND name NOT LIKE '% %'


次は