SQLZOOのSELECT namesを解いてみた
さいきんSQLを勉強していまして、Gunosyの「非エンジニアが最速でSQLをマスターする方法」に書いてある『10年戦えるデータ分析入門』→SQLZOO (https://sqlzoo.net/wiki/SQL_Tutorial) という順番で学習を進めています。
SQLZOOは出力が合っているのか違っているのかは教えてくれるのですが、どんなSQL文を書けば正解できるのか教えてくれません。すでに日本語でSQLZOOの解答を公開してくださっている方もおられますが、私も自分の勉強のアウトプットとして、解答例を公開したいと思います。
SQLZOOは問題文が英語なので、あまり自信はありませんが問題文の和訳も用意しました。意訳なので正確さに欠けるかもしれませんが……
- SELECT basics の解答例はこちら → https://rnsr0371.boy.jp/2020/12/16/sqlzooselect-basics/
Pattern Matching Strings
1.
WHERE name LIKE ‘B%’というSQL文はBから始まる国を見つけるために使えます。% はワイルドカードで、どの文字列とも照合することができます。Yから始まる国を見つけてください。
解答例
SELECT name
FROM world
WHERE name LIKE 'Y%’;
2.
yで終わる国を見つけてください。
解答例
SELECT name
FROM world
WHERE name LIKE '%y’;
3.
ルクセンブルグはxがつづりに含まれています。他にもそのような国があります。それらを列挙してください。xを含む国を見つけてください。
解答例
SELECT name
FROM world
WHERE name LIKE '%x%’;
4.
アイスランド、スイスはlandで終わりますが、他にもそのような国はあるでしょうか? landで終わる国を見つけてください。
解答例
SELECT name
FROM world
WHERE name LIKE '%land’;
5.
コロンビアはCで始まり、iaで終わります。このような国がもう2つあります。Cで始まりiaで終わる国を見つけてください。
解答例
SELECT name
FROM world
WHERE name LIKE 'C%ia’;
6.
ギリシャにはeeが含まれています。ではooが含まれる国は? 国名にooが含まれる国を見つけてください。
解答例
SELECT name
FROM world
WHERE name LIKE '%oo%’;
7.
バハマには3つのaが含まれます。他はどうでしょう? 国名にaが3つ以上含まれる国を見つけてください。
解答例
SELECT name
FROM world
WHERE name LIKE '%a%a%a%’;
8.
インドとアンゴラは二文字目がnです。一文字のワイルドカードとして_が使えます。(SQL文省略)二文字目がtである国を見つけてください。
解答例
SELECT name
FROM world
WHERE name LIKE '_t%’;
9.
レソトとモルドヴァは二文字挟んで2つのoが並んでいます。二文字挟んで2つのoが並んでいる国を見つけてください。
解答例
SELECT name
FROM world
WHERE name LIKE '%o__o%’;
10.
キューバとトーゴは4文字です。4文字ピッタリの国を見つけてください。
解答例
SELECT name
FROM world
WHERE name LIKE '____’;
11.
ルクセンブルグの首都はルクセンブルグです。国名と首都が同じ国をすべて表示してください。国名が首都である国を見つけてください。
解答例
SELECT name
FROM world
WHERE name = capital;
12.
メキシコの首都はメキシコシティです。国名とCityが一緒になった首都を持つ国を表示してください。国名にCityを加えた首都を持つ国を見つけてください。
解答例
SELECT name
FROM world
WHERE capital = name ||' City’;
13.
国の名前を含んだ首都を持つ国の名前と首都を見つけてください。
解答例
SELECT capital, name
FROM world
WHERE capital LIKE '%'||name||'%’;
14.
国の名前を拡張した首都を持つ国の名前と首都を見つけてください。メキシコより長いのでメキシコシティは含めますが、ルクセンブルグは国名と首都の名前が同じなので含めてはいけません。
解答例
SELECT capital, name
FROM world
WHERE capital LIKE '%' || name || '%' AND capital <> name;
15.
たとえば、モナコビルは国名がモナコで、国名をビルで拡張したものです。首都が国名の拡張である国の名前とその拡張を表示してください。
解答例
SELECT
name
,REPLACE(capital, name, '') AS extension
FROM world
WHERE capital LIKE '%' || name || '%' AND capital <> name;