SQL│SELECT DISTINCTで重複を除外して抽出する

この記事では、SQLのSELECT DISTINCTを使って、重複データを除外してデータを抽出する方法を説明します。また、MySQLPostgreSQLでSELECT DISTINCTを実行した際の実画像も紹介します。

目次

SQL_重複データを除外してデータを抽出(SELECT DISTINCT)

この章では、RDBMSに登録されているテーブルから、SELECT DISTINCT文を使って重複データを除外して抽出する方法を説明します。

テーブルのデータは下記の通りです(ここでは、便宜上、Excel形式にしています)。

このテーブルの[syupansha]の列のデータを重複を除外して抽出します。

当記事で使用するテーブル(テーブル名:Book)
出版社の一覧を重複を除外して抽出したい

基本のSELECT DISTINCT文

テーブルから重複を除外してデータを抽出するときには、[SELECT DISTINCT]というSQL文を実行します。

下記のように、SELECTと列名の間に[DISTINCT]を記述します。

基本文法

–1列のみを抽出する
SELECT DISTINCT 列名 FROM テーブル名;

–複数列を抽出する
SELECT DISTINCT 列名1,列名2 FROM テーブル名;

実際のSELECT DISTINCT文

下記のテーブルから、[syupansha]列の情報を抽出してみます。

重複を削除してsyupansha列のデータを抽出する(テーブル名:Book)

SQL[SELECT文]

SELECT DISTINCT syupansha FROM Book;

実行結果

syupansha
ABC書店
DEF書店
GHI書店
xyz書店

複数列を抽出するSELECT DISTINCT文

次に、重複を除外してデータを抽出する列を[syupansha][hanbai_tanka]の2列に拡大してみます。

なお、[syupansha]の列と[hanbai_tanka]の列、2列分を組み合わせても重複しているのは、下記の2レコードのみです。

重複を削除して[syupansha][hanbai_tanka]列のデータを抽出する(テーブル名:Book)

SQL[SELECT文]

SELECT DISTINCT syupansha,hanbai_tanka FROM Worker;

実行結果

syupansha      hanbai_tanka
ABC書店           1200
ABC書店               1300 
DEF書店               3200
GHI書店               2800
xyz書店               3600
DEF書店               2600
ABC書店               1800
DISTINCTの記述箇所

DISTINCTは、SQL文の先頭の列名の前にしか記述できません。そのため、重複データの除外が複数列に跨る場合でも、必ず先頭の列名の前に記述します。

SELECT DISTINCT syupansha,hanbai_tanka FROM Worker;

これは「抽出対象の複数列の中から、2列目のみ重複データを除外する」等という指定は、論理的に成り立たないためです。

実例_MySQLのSELECT DISTINCT

実際のRDBMS、MySQLでSELECT DISTINCT文を実行してテーブルから重複データを除外したデータを抽出した実画像を紹介します。

1列のみを抽出(SELECT DISTINCT)

SELECT DISTINCT syupansha FROM Book;

2列を抽出(SELECT DISTINCT)

SELECT DISTINCT syupansha,hanbai_tanka FROM Book;

実例_PostgreSQLのSELECT DISTINCT

実際のRDBMS、PostgreSQLでSELECT DISTINCT文を実行してテーブルから重複データを除外したデータを抽出した実画像を紹介します。

1列のみを抽出(SELECT DISTINCT)

SELECT DISTINCT syupansha FROM Book;

2列を抽出(SELECT DISTINCT)

SELECT DISTINCT syupansha,hanbai_tanka FROM Book;

あとがき

今回は、SELECT DISTINCT文を使って重複データを除外したデータを抽出する方法について、記事にしました。

RDBMSからのデータ抽出は、SELECT単体で実行される機会は少なく、今回のように重複を削除したり、条件に合致したデータのみに限定したりと、加工をして抽出することがほとんどです。

引き続き、当サイトではSQL関連の記事を発信していきますので、またご覧ください。

目次