MySQL 速習チュートリアル

MySQL SELECT DISTINCT文

1. MySQL SELECT DISTINCT文とは

SELECT DISTINCT ステートメントは、重複のない一意の(ユニークな)値のみを返すために使用されます。

データベースのテーブル内では、1つのカラムに同じ値が何度も出現する(重複する)ことがよくあります。特定の用途では、それらの重複を無視して、どのような種類の値が含まれているかというリストだけが必要になる場合があります。

以下のSQLは、「Customers」テーブルから重複を除いたユニークな「Country(国)」の値のみを選択します。

/* Customersテーブルから
   ユニークな国のリストを取得する */
SELECT DISTINCT Country FROM Customers;

2. SELECT DISTINCTの構文

基本的な構文は以下の通りです。

SELECT DISTINCT column1, column2, ...
FROM table_name;
  • column1, column2, ...:ユニークな値を取得したい対象のカラム名を指定します。
  • table_name:操作対象のテーブル名を指定します。

3. デモ用データベース

本チュートリアルでは、お馴染みの Northwind サンプルデータベースを使用します。
以下は、「Customers」テーブルから抜粋したデータです。

CustomerIDCustomerNameContactNameAddressCityPostalCodeCountry
1Alfreds FutterkisteMaria AndersObere Str. 57Berlin12209Germany
2Ana Trujillo Emparedados y heladosAna TrujilloAvda. de la Constitución 2222México D.F.05021Mexico
3Antonio Moreno TaqueríaAntonio MorenoMataderos 2312México D.F.05023Mexico
4Around the HornThomas Hardy120 Hanover Sq.LondonWA1 1DPUK
5Berglunds snabbköpChristina BerglundBerguvsvägen 8LuleåS-958 22Sweden

4. DISTINCTを使用しない場合の例

もし DISTINCT キーワードを省略すると、SQLステートメントは「Customers」テーブルの全レコードからすべての「Country」の値を返します。

/* 重複を含めた
   すべての国のデータを取得する */
SELECT Country FROM Customers;

5. ユニークな値の数をカウントする

COUNT() 関数DISTINCT キーワードを組み合わせることで、ユニークな値がいくつあるかを数えることができます。

以下のSQLは、「Customers」テーブルに含まれるユニークな国の数をカウントします。

/* ユニークな国の
   総数をカウントする */
SELECT COUNT(DISTINCT Country) FROM Customers;

注意:COUNT() 関数についての詳細は、このチュートリアルの後半で詳しく説明します。