SQL DISTINCT句とは?重複データを除外して一意な値を取得する方法
データベースを扱っていると、特定のデータセットから「一意な値」だけを抽出したい場面に遭遇することがあります。例えば、過去に販売した商品名の一覧を取得したい場合や、映画データベースに登録されているすべてのジャンルの一覧を取得したい場合などが挙げられます。
こうしたニーズに応えるために、SQLにはDISTINCTという便利な機能が組み込まれています。DISTINCT演算子を使えば、重複するレコードを取り除き、データセット内の一意な値の組み合わせだけを取得できます。
このチュートリアルでは、SQLにおけるDISTINCTの基本と、その活用シーンについてわかりやすく解説します。
SQLクエリの基本のおさらい
データベースから情報を取得するには、クエリ(問い合わせ)を記述します。SQLのクエリはほぼすべてSELECT文で始まり、どの情報を取得したいのかを指定します。基本的な構文は以下の通りです。
SELECT column_name FROM table_name WHERE your_query_conditions;
具体例で見てみましょう。次のクエリは、自社に勤務するすべての従業員の氏名と役職を返します。
SELECT name, title FROM employees;
実行結果:
| name | title |
| Luke | Sales Associate |
| Mike | Sales Associate |
| Hannah | Sales Associate |
| Geoff | Senior Sales Associate |
| Alexis | Sales Associate |
| Jonah | Vice President of Sales |
| Emma | Marketing Director |
複数のカラムを取得したい場合は、上の例のようにカラム名をカンマで区切って指定します。また、すべてのカラムの情報を取得したい場合は、テーブルの全カラムを表すアスタリスク(*)を使用します。
さらに、WHERE句を使えば、特定の条件を満たすレコードだけを絞り込むことも可能です。例えば、自社の営業担当者(Sales Associate)全員を取得したい場合は、次のようなクエリを実行します。
SELECT name, title FROM employees WHERE title = 'Sales Associate';
実行結果:
| name | title |
| Luke | Sales Associate |
| Mike | Sales Associate |
| Hannah | Sales Associate |
| Alexis | Sales Associate |
(4行)
クエリの基本が理解できたところで、次はSQLでのDISTINCTの使い方を見ていきましょう。
SQL DISTINCT句の使い方
データベースからデータを取得すると、結果には重複した行や値が含まれることがあります。例えば、従業員が持っているすべての役職の一覧を取得したいとしましょう。通常のSELECTクエリを使うと、重複した値がそのまま返されます。
SELECT title FROM employees;
実行結果:
| title |
| Sales Associate Sales Associate Sales Associate Senior Sales Associate Sales Associate Vice President of Sales Marketing Director |
(7行)
ご覧のとおり、「Sales Associate」という役職が4回表示されています。これは、その役職を持つ従業員が4人いるためです。しかし、「何人の人がその役職についているか」ではなく、「データベースにどんな役職が存在するのか」だけを知りたい場合はどうすればよいのでしょうか。
そこで登場するのがSQL DISTINCT句です。DISTINCT句を使用すれば、クエリ結果から重複データをすべて除去できます。
DISTINCTキーワードは、SELECT文と組み合わせて使用します。先ほどと同じクエリにDISTINCTを付けた例がこちらです。
SELECT DISTINCT title FROM employees;
実行結果:
| title |
| Vice President of Sales Sales Associate Senior Sales Associate Marketing Director |
(4行)
このクエリは、従業員が持つすべての役職の一覧を返しましたが、複数の従業員が持つ役職は1回しか表示されていません。出力には重複した値が一切含まれていません。
DISTINCT演算子は、大規模なデータセットを扱う場合に特に役立ちます。先ほどの例では従業員は7人だけでしたが、もし500人いたら、DISTINCTを使わずに誰がどの役職についているのかを把握するのは非常に困難です。
まとめ
これで、SQLサーバーでDISTINCT演算子を使う方法がわかりました。
これまで見てきたように、SELECT DISTINCTを使うと、テーブルからデータを取得しつつ、結果から重複する行や値を除去できます。例えば、企業のすべての支店の一覧を作成したい場合にも、DISTINCTが活用できます。重複が邪魔になりやすい大規模なデータセットを扱う際には、特に有用な機能なので、ぜひ使いこなせるようになっておきましょう。
-
MS SQL Serverとは?特徴・主な用途・バージョン履歴・インスタンスの基インスタンスの基礎を徹底解説
SQL Server(MS SQL Server)とは? SQL Serverは、Microsoftが開発したリレーショナルデータベース管理システム(RDBMS)です。従来のRDBMSの枠組みにとどまらず、オブジェクト指向の概念も取り入れたORDBMS(オブジェクトリレーショナルデータベース管理システム)としての側面も併せ持っています。主な特徴は以下の通りです。 Microsoftが開発したRDBMSベースのデータベースソフトウェアである ORDBMS(オブジェクトリレーショナルデータベース管理システム)としても機能する 特定のプラットフォームに依存しない独立した環境で動作する コマンドライ
-
Oracle Database 19cのSQL検疫(SQL Quarantine)機能とは?リソースマネージャによる暴走クエリ対策の完全ガイド
本記事では、Oracle Database 19cの新機能であるSQL検疫(SQL Quarantine)について詳しく解説します。Oracle® Resource Managerを使用すると、CPUやI/Oといったシステムリソースの使用量を制御・制限できます。さらに注目すべきは、定義された閾値を超える長時間実行クエリの実行自体を防止できる点です。 SQL検疫(SQL Quarantine)とは何か? 「検疫(Quarantine)」とは隔離を意味します。SQL検疫は、暴走クエリ(Runaway Query)がもたらすオーバーヘッドを排除するために使用できる、19cの新機能です。暴走クエリとは