Categories: SQL言語

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関連の記事を発信していきますので、またご覧ください。

Analytics沖縄

データサイエンス・機械学習・ディープラーニングを本格的に研究するフリーランスエンジニア。 「Google データアナリティクス プロフェッショナル」の認定証を取得済み。 この分野は専門知識がなければ理解し辛い情報が多いのですが、当サイトでは初学者も意識して発信していきますので、ご関心があればぜひご覧ください。

Recent Posts

MySQLの日付型や時刻型で使う関数のフォーマット指定子

今回は、MySQLの日付型や時…

4か月 ago

SQL│文字列を日付型に変換するTo_Date・Convert

今回は、SQLで文字列を日付型…

4か月 ago

SQL│文字列型CHAR・VARCHARの違いと使い分けを解説

今回は、SQLのデータ型のうち…

4か月 ago

SQL|通貨型MONEY・SMALLMONEYの使い所は?

今回は、SQLの通貨型MONE…

5か月 ago