重複したデータを除外してデータを取得する(DISTINCT)

SELECT 文を使ってデータを取得するときに、 DISTINCT を指定すると取得するカラムの値が一致しているデータは除外してデータを取得することができます。ここでは MySQL で DISTINCT を指定して重複したデータを除外してデータを取得する方法について解説します。

(Last modified: )

重複したデータを除外する

DISTINCT をつけて SELECT 文を実行すると、重複したデータは除外してデータを取得することができます。使い方は次の通りです。

SELECT DISTINCT col_name1 [, col_name2 ...] FROM table_name

除外されるデータは、 SELECT 文で取得するように記述したカラムの値がすべて一致しているデータです。

なお DISTINCT とは逆に重複するデータもすべて取得する場合には ALL を指定します。

SELECT ALL col_name1 [, col_name2 ...] FROM table_name

明示的に指定しなかった場合はデータをすべて取得しますので ALL をあえて指定する必要はありません。

-- --

それでは実際に試してみます。次のようなテーブルを作成しました。

create table product (id int, name varchar(10), color varchar(10));

重複したデータを除外する(1)

テーブルには次のようなデータを格納していあります。

insert into product values (1, 'Keyboard', 'Black');
insert into product values (2, 'Mouse', 'White');
insert into product values (3, 'Tablet', 'Black');
insert into product values (4, 'Mouse', 'Black');
insert into product values (5, 'Keyboard', 'Black');
insert into product values (6, 'Tablet', 'White');
insert into product values (7, 'Mouse', 'White');

重複したデータを除外する(2)

このテーブルから name カラムの値を取得してみます。最初はすべてのデータを取得します。

select name from product;

重複したデータを除外する(3)

次に重複したデータを除外してこのテーブルから name カラムの値を取得してみます。

select distinct name from product;

重複したデータを除外する(4)

次に重複したデータを除外してデータを取得することができました。

今度は重複したデータを除外してこのテーブルから name カラムと color カラムの値を取得してみます。取得するデータは name カラムの値を記述に並べ替えをしてみます。

select distinct name, color from product order by name;

重複したデータを除外する(5)

name カラムと color カラムの値の組み合わせが同じデータを除外してデータを取得することができました。このように複数のカラムの値を取得している場合は、name カラムや color カラムだけみたら重複しているデータもあります。

-- --

DISTINCT を指定して重複したデータを除外してデータを取得する方法について解説します。

( Written by Tatsuo Ikura )

プロフィール画像

著者 / TATSUO IKURA

これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。