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

広告
eyecatch

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

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

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 を指定して重複したデータを除外してデータを取得する方法について解説します。

MySQLの使い方の他の記事を見てみる

( Written by Tatsuo Ikura )

関連記事 (一部広告含む)
Profile
profile_img

著者 / TATSUO IKURA

初心者~中級者の方を対象としたプログラミング方法や開発環境の構築の解説を行うサイトの運営を行っています。