SQLのdistinctで重複行を表示しないサンプルです。
目次
サンプル | 重複行を表示しない(distinct) |
distinctで複数項目を指定+項目の値が全て重複 | |
distinctで複数項目を指定+項目の値は全て重複していない | |
distinctで指定した項目がnullのとき |
重複行を表示しない(distinct)
select distinct 項目名 from テーブル名 |
- distinctは、項目名で重複行を非表示にします。
- distinctは、明確なという意味です。
distinctの使用例
次のテーブルがあるとします。
id | name | romaji |
---|---|---|
1 | 鈴木 | suzuki |
2 | 田中 | tanaka |
3 | 鈴木 | suzuki |
SQL文
上記テーブルのnameに対してdistinctを使用します。
select distinct name from employee
where name = "鈴木";
1行目は、distinctを指定しています。
結果
結果は、以下のとおりです。
name |
---|
鈴木 |
1行のみ表示されます。
distinctを指定しない場合は、鈴木が2行表示されます。
distinctで複数項目を指定+項目の値が全て重複
distinctで複数項目を指定し、項目の値が全て重複している場合、重複行は表示されません。
次のテーブルがあるとします。
id | name | romaji |
---|---|---|
1 | 鈴木 | suzuki |
2 | 田中 | tanaka |
3 | 鈴木 | suzuki |
SQL
上記テーブルのnameとromajiに対してdistinctを使用します。
select distinct name,romaji from employee
where name = "鈴木";
1行目は、distinctの横に項目のnameとromajiがあります。
結果
結果は、以下のとおりです。
name | romaji |
---|---|
鈴木 | suzuki |
nameとromajiの値は重複しているので1行のみ表示されます。
distinctで複数項目を指定+項目の値は全て重複していない
distinctで複数項目を指定し、項目の値が全て重複していない場合、その分の行が表示されます。
次のテーブルがあるとします。
id | name | romaji |
---|---|---|
1 | 鈴木 | suzuki |
2 | 田中 | tanaka |
3 | 鈴木 | suzuki |
SQL
上記テーブルのidとnameとromajiに対してdistinctを使用します。
select distinct id,name,romaji from employee
where name = "鈴木";
1行目は、distinctの横に項目のidとnameとromajiがあります。
idの値は重複していません。nameとromajiの値は重複しています。
結果
結果は、以下のとおりです。
id | name | romaji |
---|---|---|
1 | 鈴木 | suzuki |
3 | 鈴木 | suzuki |
重複していない項目「id」があるので2行表示されます。
distinctで指定した項目がnullのとき
distinctで指定した項目がnullのときは、nullを取得します。
次のテーブルがあるとします。nameの値はすべてnullです。
id | name | romaji |
---|---|---|
1 | suzuki | |
2 | tanaka | |
3 | suzuki |
SQL
上記テーブルのnameに対してdistinctを使用します。
select distinct name from employee;
sqlを実行します。
結果
結果は、以下のとおりです。
name |
---|
nullで1行表示されます。
関連の記事
SQL 複数の行をまとめる(集約関数/group by/having)
SQL LEFT JOIN 外部結合のサンプル
SQL 副問合せのサンプル(サブクエリ)