【MySQL入門】DISTINCTを使ってテーブルの重複値を1回だけ取得する方法
重複する値を1回だけ選択するには?
テーブル内に同じ値が何度も繰り返し格納されている場合、DISTINCTキーワードを使用することで、重複を排除した状態で値を1回だけ取得できます。
基本構文
構文は以下のとおりです。
SELECT DISTINCT yourColumnName FROM yourTableName;
それでは、実際にテーブルを作成して動作を確認してみましょう。
サンプルテーブルの作成
まず、以下のクエリでテーブルを作成します。
mysql> create table displayOnlyDistinctValue
-> (
-> UserId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> UserName varchar(100),
-> UserAge int
-> );
Query OK, 0 rows affected (0.47 sec)テストデータの挿入
次に、INSERTコマンドを使っていくつかのレコードを挿入します。意図的に「Larry」や「Sam」などの名前や年齢を重複させています。
mysql> insert into displayOnlyDistinctValue(UserName,UserAge) values('Larry',23);
Query OK, 1 row affected (0.23 sec)
mysql> insert into displayOnlyDistinctValue(UserName,UserAge) values('Mike',23);
Query OK, 1 row affected (0.13 sec)
mysql> insert into displayOnlyDistinctValue(UserName,UserAge) values('Larry',21);
Query OK, 1 row affected (0.16 sec)
mysql> insert into displayOnlyDistinctValue(UserName,UserAge) values('Sam',23);
Query OK, 1 row affected (0.20 sec)
mysql> insert into displayOnlyDistinctValue(UserName,UserAge) values('Carol',25);
Query OK, 1 row affected (0.16 sec)
mysql> insert into displayOnlyDistinctValue(UserName,UserAge) values('Sam',26);
Query OK, 1 row affected (0.14 sec)
mysql> insert into displayOnlyDistinctValue(UserName,UserAge) values('Sam',27);
Query OK, 1 row affected (0.13 sec)
mysql> insert into displayOnlyDistinctValue(UserName,UserAge) values('Bob',22);
Query OK, 1 row affected (0.17 sec)
mysql> insert into displayOnlyDistinctValue(UserName,UserAge) values('Larry',22);
Query OK, 1 row affected (0.16 sec)現在のテーブル内容を確認
SELECT文ですべてのレコードを表示してみましょう。
mysql> select *from displayOnlyDistinctValue;
実行結果は以下のとおりです。
+--------+----------+---------+ | UserId | UserName | UserAge | +--------+----------+---------+ | 1 | Larry | 23 | | 2 | Mike | 23 | | 3 | Larry | 21 | | 4 | Sam | 23 | | 5 | Carol | 25 | | 6 | Sam | 26 | | 7 | Sam | 27 | | 8 | Bob | 22 | | 9 | Larry | 22 | +--------+----------+---------+ 9 rows in set (0.00 sec)
このように、UserName列には「Larry」が3回、「Sam」が3回、UserAge列にも「23」や「22」などが複数回登場しています。
DISTINCTを使った重複排除の実例
ここからは、DISTINCTキーワードを使って重複する値を1回だけ取得する方法を、2つのケースに分けて紹介します。
ケース1:UserName列で重複を排除する
ユーザー名の一意なリストを取得するクエリは以下のとおりです。
mysql> select distinct UserName from displayOnlyDistinctValue;
実行結果:
+----------+ | UserName | +----------+ | Larry | | Mike | | Sam | | Carol | | Bob | +----------+ 5 rows in set (0.00 sec)
重複していた「Larry」と「Sam」がそれぞれ1回だけ表示され、一意な名前が5件取得できました。
ケース2:UserAge列で重複を排除する
次に、年齢の一意なリストを取得するクエリです。
mysql> select distinct UserAge from displayOnlyDistinctValue;
実行結果:
+---------+ | UserAge | +---------+ | 23 | | 21 | | 25 | | 26 | | 27 | | 22 | +---------+ 6 rows in set (0.00 sec)
重複のなかった年齢も含め、一意な値が6件返されました。
まとめ
このように、SELECT DISTINCTを使うことで、指定した列から重複する値を取り除き、一意な値だけを簡単に抽出できます。データの集計や分析、マスタデータの確認など、さまざまな場面で活用できる基本的かつ重要な構文なので、ぜひ覚えておきましょう。
-
【MySQL】EXISTSとサブクエリで別テーブルの列値と一致する行だけを抽出する方法
サブクエリとEXISTSを組み合わせるあるテーブルの列値が別のテーブルの列値と一致する場合にのみデータを取得したいときは、サブクエリとEXISTSを組み合わせると簡単に実現できます。まず、1つ目のテーブルを作成しましょう。mysql> create table DemoTable1 -> ( -> Id int, -> SubjectName varchar(20) -> )
-
MySQLでテーブルから順序付けられた3行のみを取得する方法
ORDER BY句とLIMITを組み合わせて順序付きの3行を取得する MySQLでテーブルから特定の順序で並べ替えた行を、指定した件数だけ取得したい場合は、ORDER BY句とLIMITを組み合わせます。ここでは、従業員IDの降順に並べ替えた上位3行を取得する具体例を紹介します。 1. サンプルテーブルの作成 まず、動作確認用のテーブルを作成しましょう。 mysql> create table DemoTable1551 -> ( -> EmployeeId int NOT NULL AUTO_INCREMENT PRIM