サンプルデータベースworldには、3つのテーブルが格納されています。まずはそれを確かめて見ましょう。
まず、MySQL Workbenchを起動し、MySQLに接続します。
左ペインの「Schemas」タブを選択し、「world」-「Tables」をクリックします。

以下のように入力し、赤枠のボタンをクリックします。
show tables;
「show tables」は、データベースに格納されているテーブルの一覧を表示します。以下のような実行結果が表示されると思います。
city country countrylanguage
それぞれのテーブルには以下の情報が格納されています。
| country | 世界中の国について情報 |
|---|---|
| city | 上記の国々にある都市についての情報 |
| countryLanguage | 各国で話されている言語の情報 |
今回はcontryとcityの2表を利用します。それぞれのテーブルの構造は以下のとおりです。
contry
| 列 | 意味 |
|---|---|
| Name | 国名 |
| Continent | 所在大陸名 |
| Region | 所在地域 |
| Population | 人口 |
| GNP | GNP(国民総生産) |
| GNPOld | 旧GNP |
| Capital | 首都 |
city
| 列 | 意味 |
|---|---|
| ID | IDとなる一意の数値 |
| Name | 都市名 |
| ContryCode | 国別記号 |
| District | 所在地域 |
| Population | 人口 |
では早速、この2表からいろいろなデータを検索してみましょう。データの検索はSELECT文を用いて行います。さて、そのSELECT文ですが、ひとつひとつ丁寧に解説しようとするとものすごく大変です。以降の内容は、SQLに関する詳細な説明は割愛しており、SQLに触れたことがある方は問題ありませんが、そうでない方には説明が不足しているところが多々あるかと思います。ただそれでも、まずはサンプルどおりにSQLを書いてみて、実際にデータを検索してみてください。一度に全てを覚えようとせず、SQLとはどういったものか、何ができるのか、まずはそれらの感覚を掴むところからはじめることが、より効果的な覚え方だと考えます。
東アジアに位置する国名を表示
SELECT Name FROM country WHERE Region = 'Eastern Asia';
China Hong Kong Japan South Korea Macao Mongolia North Korea Taiwan
SELECT文では、選択したい行の条件をWHERE句で指定します。ここでは、Region(所在地域)が東アジアの国名を選択して表示しています。当然、日本もありますね。
人口0人の国名を検索する
SELECT Name FROM country WHERE Population = 0;
Antarctica French Southern territories Bouvet Island Heard Island and McDonald Islands British Indian Ocean Territory South Georgia and the South Sandwich Islands United States Minor Outlying Islands
国は人がいて成り立つものであり、人口が0人の国なんて、国ではないのではないか。と、思うかもしれませんが、そんな国もあるんですね。例えば、Antarcticaは南極大陸のことです。French Southern territories(フランス領南方)は、そのほとんどが無人、あるいは研究機関・軍関係者しか住んでいない地域と言われています。
人口が700万以上の都市を検索する
SELECT * FROM city WHERE Population > 7000000 ORDER BY Population DESC;
| ID | Name | CountryCode | District | Population |
|---|---|---|---|---|
| 1024 | Mumbai (Bombay) | IND | Maharashtra | 10500000 |
| 2331 | Seoul | KOR | Seoul | 9981619 |
| 206 | S??o Paulo | BRA | S??o Paulo | 9968485 |
| 1890 | Shanghai | CHN | Shanghai | 9696300 |
| 939 | Jakarta | IDN | Jakarta Raya | 9604900 |
| 2822 | Karachi | PAK | Sindh | 9269265 |
| 3357 | Istanbul | TUR | Istanbul | 8787958 |
| 2515 | Ciudad de M??xico | MEX | Distrito Federal | 8591309 |
| 3580 | Moscow | RUS | Moscow (City) | 8389200 |
| 3793 | New York | USA | New York | 8008278 |
| 1532 | Tokyo | JPN | Tokyo-to | 7980230 |
| 1891 | Peking | CHN | Peking | 7472000 |
| 456 | London | GBR | England | 7285000 |
| 1025 | Delhi | IND | Delhi | 7206704 |
人口が700万人以上の都市を多い順(降順)に並べて表示しています。並び順を指定するにはORDER BY句を用います。DESCキーワードでを指定することで降順となります。ASKキーワード、もしくは何も指定しないと昇順で並びます。こうみると、アジアの人口の多さが垣間見えます。日本の東京も11位にいます。ただ、このデータは少し古く、2019年現在の東京の人口はもっと多く1,385万人だそうです。日本の総人口が1億2千万人ぐらいなので、あの小さな範囲に、いったいどれだけ人が密集しているのでしょうか。東京の人口は増加しているその一方で、日本の総人口は2004年をピークに、今後100年間で100年前(明治時代後半)の水準に戻っていくと言われており、急激に減少しているそうです。
人口100万人以上の日本都市
SELECT * FROM city WHERE countryCode = 'JPN' AND Population > 1000000;
| ID | Name | CountryCode | District | Population |
|---|---|---|---|---|
| 1532 | Tokyo | JPN | Tokyo-to | 7980230 |
| 1533 | Jokohama [Yokohama] | JPN | Kanagawa | 3339594 |
| 1534 | Osaka | JPN | Osaka | 2595674 |
| 1535 | Nagoya | JPN | Aichi | 2154376 |
| 1536 | Sapporo | JPN | Hokkaido | 1790886 |
| 1537 | Kioto | JPN | Kyoto | 1461974 |
| 1538 | Kobe | JPN | Hyogo | 1425139 |
| 1539 | Fukuoka | JPN | Fukuoka | 1308379 |
| 1540 | Kawasaki | JPN | Kanagawa | 1217359 |
| 1541 | Hiroshima | JPN | Hiroshima | 1119117 |
| 1542 | Kitakyushu | JPN | Fukuoka | 1016264 |
日本の都市に限定して、人口100万人以上の都市を多い順に並べて表示しています。東京、横浜、大阪、名古屋と続いています。
人口の少ない都市ベスト5
SELECT * FROM city ORDER BY Population LIMIT 5;
| ID | Name | CountryCode | District | Population |
|---|---|---|---|---|
| 2912 | Adamstown | PCN | ?? | 42 |
| 2317 | West Island | CCK | West Island | 167 |
| 3333 | Fakaofo | TKL | Fakaofo | 300 |
| 3538 | Citt?? del Vaticano | VAT | ?? | 455 |
| 2316 | Bantam | CCK | Home Island | 503 |
次に、再び世界に目を向けて、人口の少ない都市のペスト5を検索してみます。ベスト○○のように、指定した数に限定するには、LIMIT句を使用します。ORDER BY句と併用することで、上記のように「人口が最も少ない都市ベスト5」のような検索ができます。最も少ない都市となったAdamstown(アダムスタウン)は、日本の学校の1クラスのような人数ですね。戦艦バウンティ号の反逆者が最後にたどりついた地として有名であり、現在の住民の多くは、伝説的な船員の直接の子孫なんだそうです。
人口の多い都市ベスト11
SELECT * FROM city ORDER BY Population desc LIMIT 11;
| ID | Name | CountryCode | District | Population |
|---|---|---|---|---|
| 1024 | Mumbai (Bombay) | IND | Maharashtra | 10500000 |
| 2331 | Seoul | KOR | Seoul | 9981619 |
| 206 | S??o Paulo | BRA | S??o Paulo | 9968485 |
| 1890 | Shanghai | CHN | Shanghai | 9696300 |
| 939 | Jakarta | IDN | Jakarta Raya | 9604900 |
| 2822 | Karachi | PAK | Sindh | 9269265 |
| 3357 | Istanbul | TUR | Istanbul | 8787958 |
| 2515 | Ciudad de M??xico | MEX | Distrito Federal | 8591309 |
| 3580 | Moscow | RUS | Moscow (City) | 8389200 |
| 3793 | New York | USA | New York | 8008278 |
| 1532 | Tokyo | JPN | Tokyo-to | 7980230 |
今度は逆に、人口の多い都市ベスト11を検索してみます。本当はベスト10にしたかったのですが、東京が11位だったので中途半端になってしまいました。インドのMumbai(ムンバイ)が第1位なんですね。インドは次の中国と言われているようで、その人口の多さからなる巨大市場への進出を様々な企業が企てているなどという話はよく耳にします。ただ、最新のデータではまた違う結果となっているのでしょう。
