【基本】SQLで重複したデータを取得・削除しよう
DISTINCTとは
DISTINCTとは、SELECT 文を使ってデータを取得する際に指定すると、取得するカラムの値が重複してしまっているデータをまとめて一件のデータとして取得することができます。 そのため、データを取得したいときのみ重複しているデータをまとめることができるので、データベース上の重複しているデータを直接削除はしたくない場合に便利なコマンドです。
DISTINCTの基本的な書式
DISTINCTの基本的な書き方は以下の通りです。 SELECT DISTINCT カラム名[,カラム名...] FROM テーブル名; 通常のSELECT文で、重複データがあるか調べたいカラム名とテーブル名を指定し、その中にDISTINCTを記述することによって、重複しているデータを除外して指定したデータを取得することができます。
DISTINCTの使用例
DISTINCTの書式が確認できたところで、具体的にテーブルを作成し確認していきましょう。 まずは、使用するテーブルとして商品情報を管理する「itemsテーブル」を作成します。 CREATE TABLE items (id int, name varchar(10), price int,category varchar(10)); 上記のusersテーブルが作成できたら、データの格納を行います。
INSERT INTO items VALUES (1, 'りんご', 100,'果物'); INSERT INTO items VALUES (2, 'にんじん', 200,'野菜'); INSERT INTO items VALUES (3, 'りんご', 100,'果物'); INSERT INTO items VALUES (4, '洗剤', 200,'日用品'); INSERT INTO items VALUES (5, 'ティッシュペーパー', 300,'日用品'); INSERT INTO items VALUES (6, 'たまねぎ', 200,'野菜'); INSERT INTO items VALUES (7, 'にんじん', 200,'野菜'); INSERT INTO items VALUES (8, 'パイナップル', 400,'果物');
ここまで作成すると以下のような表になります。
id | name | price | category |
---|---|---|---|
1 | りんご | 100 | 果物 |
2 | にんじん | 200 | 野菜 |
3 | りんご | 100 | 果物 |
4 | 洗剤 | 200 | 日用品 |
5 | ティッシュペーパー | 300 | 日用品 |
6 | たまねぎ | 200 | 野菜 |
7 | にんじん | 200 | 野菜 |
8 | パイナップル | 400 | 果物 |
ここからはSELECT文を使用してnameカラムとpriceカラムを抜き出します。 では、DISTINCTを使用する場合としない場合を比較してみましょう。
・DISTINCTを使用しない場合
SELECT name,price FROM users; 【実行結果】
name | price |
---|---|
りんご | 100 |
にんじん | 200 |
りんご | 100 |
洗剤 | 200 |
ティッシュペーパー | 300 |
たまねぎ | 200 |
にんじん | 200 |
パイナップル | 400 |
・DISTINCTを使用した場合
SELECT DISTINCT name,price FROM items; 【実行結果】
name | price |
---|---|
りんご | 100 |
にんじん | 200 |
洗剤 | 200 |
ティッシュペーパー | 300 |
たまねぎ | 200 |
パイナップル | 400 |
データベース上の重複データの削除
ここまでは重複したデータをSELECTとDISTINCTで削除し取得するという内容でしたが、データベースのデータ自体の削除を行いたい場合もご紹介していきます。 ここでも先ほどのデータベースのデータを使用します。
id | name | price | category |
---|---|---|---|
1 | りんご | 100 | 果物 |
2 | にんじん | 200 | 野菜 |
3 | りんご | 100 | 果物 |
4 | 洗剤 | 200 | 日用品 |
5 | ティッシュペーパー | 300 | 日用品 |
6 | たまねぎ | 200 | 野菜 |
7 | にんじん | 200 | 野菜 |
8 | パイナップル | 400 | 果物 |
id | name | price | category |
---|---|---|---|
1 | りんご | 100 | 果物 |
2 | にんじん | 200 | 野菜 |
4 | 洗剤 | 200 | 日用品 |
5 | ティッシュペーパー | 300 | 日用品 |
6 | たまねぎ | 200 | 野菜 |
8 | パイナップル | 400 | 果物 |
まとめ
いかがでしたでしょうか? データベースにおいてデータの削除は間違えてしまうとデータが消えてしまい取り返しのつかないことにもなりかねません。 データの削除をする場合には、よく確認し準備を十分にして作業をすることをおすすめします。