SQL 速習チュートリアル

SQL SELECT DISTINCT

1. SQL SELECT DISTINCT ステートメントとは

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

テーブル内では、1つのカラムに重複した値が含まれていることがよくあります。特定のユニークな値のリストだけを取得したい場合に、この DISTINCT キーワードが威力を発揮します。

1.1 実行例

Customers テーブルから、重複を除いたすべての国名(Country)を選択する:

/* Customers テーブルから重複を除いてユニークな国名を取得 */
SELECT DISTINCT Country FROM Customers;

2. SELECT DISTINCT の構文

SELECT DISTINCT column1, column2, ...
FROM table_name;

3. デモ用データベース

以下は、本ガイドの例題で使用する 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 を使用しない SELECT の例

DISTINCT キーワードを省略した場合、SQL ステートメントは Customers テーブルのすべてのレコードから "Country" の値を返します(重複もそのまま表示されます)。

4.1 実行例

/* Customers テーブルからすべての国名を取得(重複を含む) */
SELECT Country FROM Customers;

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

COUNT() 関数と DISTINCT キーワードを組み合わせることで、ユニークな国の数をカウントできます。

5.1 実行例

/* 重複を除いたユニークな国名の総数をカウントする */
SELECT COUNT(DISTINCT Country) FROM Customers;
COUNT(DISTINCT column_name) 構文は、Microsoft Access データベースではサポートされていません。

5.2 MS Access でのワークアラウンド(回避策)

MS Access を使用している場合は、以下のようにサブクエリを利用してユニーク数を取得します。

/* サブクエリを使用してユニークな国の数をカウントする(MS Access 用) */
SELECT Count(*) AS DistinctCountries
FROM (SELECT DISTINCT Country FROM Customers);