前提として
SELECT celebrities.name,language
の時点で
countrylanguages.language
のように
テーブル名を明記してない、記載カラムの順序が揃っていない…等、
お作法的な話で既に問題はありますが…
想定していない結果になっている原因を述べると、phpMyadmin上で
現在の選択には、ユニークなカラムが含まれていません。
という警告が
出ている通りかと思われます。
まず、ON celebrities.country_code = countrylanguages.country_code
で
結合しようとした時に、countrylanguagesテーブルのcountry_codeカラムが一意ではないので
重複しているカラムが全て結合後、出力されています。
噛み砕いて説明すると…(長文ご容赦ください)
以下(1)、(2)のデータがあるとします。(例:Johnny Depp)
(1) celebritiesテーブルに名前が「Johnny Depp」
国コードが「USA」のデータ(下記、図.1を参照)
図.1 celebritiesテーブル
name |
country_code |
Johnny Depp |
USA |
(2) countrylanguagesテーブルに国コードが「USA」で言語が「Chinese」のデータ、
国コードが「USA」で言語が「English」のデータ…等、
国コードが同じで言語が複数種類あるデータ(下記、図.2を参照)
図.2 countrylanguagesテーブル
country_code |
language |
USA |
Chinese |
USA |
English |
USA |
French |
USA |
German |
この時、(1)と(2)を国コードで結合しようとすると、国コードが「USA」というだけで
言語が「Chinese」なのか「English」なのか、
はたまた別の言語なのか判別できませんよね。
そのため、国コードが「USA」という条件に合致した情報が全て出力されます。
なので、各人物が言語ごとに列挙される、という状態になっています。
パッと見で「USA」が重複しているのが分かるでしょうか。(下記、図.3を参照)
図.3 (1)と(2)が結合されたテーブル
name |
country_code |
language |
Johnny Depp |
USA |
Chinese |
Johnny Depp |
USA |
English |
Johnny Depp |
USA |
French |
Johnny Depp |
USA |
German |
(これが、「一意でない」、若しくは「ユニークでない」という状態になります)
そのため「一意」にするための、重複しない情報が必要になります。
(例えば、「国コード」と別に「地域コード」などを用意して、
組み合わせて特定できるようにする。
「国コード」を「言語」毎に「00001」、「00002」など詳細に分け、重複を避ける等)
(countrylanguagesテーブルのFRAとUSAが
どうなっているのか画像からは分からないのであくまで推測ですが)
上記はあくまで方針ですので、
どのような設計にするかはご自身でお考えください。
また、ON celebrities.country_code = celebrities.name
で国コードと人物名が一致していることを条件に結合しようとしているようですが、
何を想定してこの条件にしているのか不明です。
補足ですが、
質問の際にはDBのER図もあれば親切かと思います。
もしよろしければ、以下サイトの
「左外部結合(LEFT OUTER JOIN)」の章を確認してみてはいかがでしょうか。