SELECT names/ja

From SQLZOO
Jump to navigation Jump to search
Language:Project:Language policy English  • 日本語 • 中文
namecontinent
AfghanistanAsia
AlbaniaEurope
AlgeriaAfrica
AndorraEurope
AngolaAfrica
....

name:国名
continent:大陸



文字列のパターンマッチ

このチュートリアルでは LIKE 演算子を用いて国名をチェックする。SELECT コマンドを world テーブルに使うとよい:

WHERE name LIKE 'B%' というコードで、"B" から始まる国名を検索できる。

  • % 記号はワイルドカード といい、どんな文字列(複数の文字。0文字でも可)にもマッチする。

Y で始まる国名を見つける

SELECT name FROM world
  WHERE name LIKE 'F%'
SELECT name FROM world
  WHERE name LIKE 'Y%'


y で終わる国名を見つける

SELECT name FROM world
  WHERE name LIKE 'T%'
SELECT name FROM world
  WHERE name LIKE '%y'

ルクセンブルグ Luxembourg には x が一文字あり、同様の国はこの他にもある。どちらもリストアップする。

x を含む国名を見つける

SELECT name FROM world
  WHERE name LIKE 'T%'
SELECT name FROM world
  WHERE name LIKE '%x%'

アイスランド Iceland とスイス Switzerland は land で終わっている。他にもあるか?

land で終わる国名を検索する。

SELECT name FROM world
  WHERE name LIKE 'T%'
SELECT name FROM world
  WHERE name LIKE '%land'

コロンビア Columbia は C で始まり、ia で終わる。このような国は2つ以上ある。

C で始まり ia で終わる国を見つける

SELECT name FROM world
  WHERE name LIKE 'T%'
SELECT name FROM world
  WHERE name LIKE 'C%ia'

ギリシャ Greece は e を続けて2つ含む。o を続けて2つ含む国は?

oo を名前に含む国を見つける

SELECT name FROM world
  WHERE name LIKE '%ee%'
SELECT name FROM world
  WHERE name LIKE '%oo%'

バハマ Bahamas にはa が3つある。他にあるか?

a を3つ以上含む国名を見つける

SELECT name FROM world
  WHERE name LIKE 'T%'
SELECT name FROM world
  WHERE name LIKE '%a%a%a%'

インド India と アンゴラ Angola は n が2文字目にある。ある一文字を表すワイルドカードにはアンダースコア_を使う。

SELECT name FROM world
 WHERE name LIKE '_n%'
ORDER BY name

"t" を第2文字目に持つ国名を見つける

SELECT name FROM world
 WHERE name LIKE '_n%'
ORDER BY name
SELECT name FROM world
 WHERE name LIKE '_t%'
ORDER BY name

レソト Lesotho と モルドバ Moldova はどちらも2つの o が 2つの他の文字で隔てられている。

複数の"o"が他の2文字で隔てられている国名を見つける

SELECT name FROM world
 WHERE name LIKE '_n%'
SELECT name FROM world
 WHERE name LIKE '%o__o%'

キューバ Cuba と トーゴ Togo の国名は4文字。

ちょうど4文字の国名を見つける

SELECT name FROM world
 WHERE name LIKE 'Cu%'
SELECT name FROM world
 WHERE name LIKE '____'

より難しい問題

ここまでよく頑張りました。

以下は選択問題で基本問題が簡単すぎると感じた学生専用です。

ルクセンブルグ Luxembourg の首都は Luxembourg です。首都と国名が同じ国名をすべて表示する。

首都と国名が同じ国を見つける

SELECT name, capital, continent
  FROM world
 WHERE name LIKE '%x%'
SELECT name FROM world
 WHERE name = capital

Mexico の首都は Mexico City です。首都が国名に続けて "City" という国をすべて表示する。

国名 + "City" が首都の国を見つける。

concat 関数は結合(concatenate)を短縮した関数名です。この関数で2個以上の文字列を結合できます。

SELECT name, concat(name, 'town')
  FROM world
 WHERE name LIKE '%ina%'
SELECT name FROM world
 WHERE capital = concat(name, ' City')

国名を首都名に含む国の、首都と国名を表示する

SELECT capital, name FROM world
 WHERE capital LIKE concat('%', name, '%')

国名を拡張した首都名を持つ国の、首都と国名を見つける

検索結果にはMexico よりも長くなったMexico Cityを含めること。Luxembourg は首都と国名が同じなので含めないこと。

SELECT capital,name FROM world
 WHERE capital LIKE concat(name, '_%')

Monaco-Ville の国名は Monaco で、拡張部分は -Ville です。

国名と首都の拡張部分を見つける

SQL の関数 MIDLENGTH を使う。

select name,mid(capital,length(name)+1) ext
from world
where capital like concat(name,'_%')

プレイしよう 重複発見ゲーム Find Duplicates game