MySQL - DISTINCT句: 独自性の力を解き明かす
こんにちは、将来のデータベース魔術師たち!今日は、MySQLの特に便利な機能であるDISTINCT句について楽しい旅に出発します。プログラミングが初めてであっても心配しないでください。私はあなたの親切なガイドとして、このトピックをステップバイステップで取り扱います。お気に入りの飲み物を一杯取り、一緒に潜りましょう!
MySQLのDISTINCT句とは?
パーティーで、どれだけ異なる飲み物が提供されているか知りたいと考えたことがありますか?各コカコーラの缶を個別に数えることはないでしょう、でしょう?「コカコーラ」と一度だけメモするでしょう。これがMySQLのDISTINCT句がやっていることです。データベーステーブルからユニークな値を特定して取得するのを助けます。
DISTINCT句はSELECT文で使用され、結果セットから重複行を排除します。これは、クラブのVIPバウンサーのようなものです。同じグループの同一のゲストを一人ずつだけ入れるようにします。
簡単な例を見てみましょう:
SELECT DISTINCT column_name
FROM table_name;
このクエリは、指定されたカラムのすべてのユニークな値を返します。
実世界の例
employees
という名前のテーブルが以下のようなデータを持っているとします:
id | name | department |
---|---|---|
1 | Alice | Sales |
2 | Bob | Marketing |
3 | Carol | Sales |
4 | David | IT |
5 | Eve | Marketing |
会社のすべての異なる部署を知りたい場合、以下のように使用します:
SELECT DISTINCT department
FROM employees;
これで以下の結果が得られます:
department |
---|
Sales |
Marketing |
IT |
重複をきれいに削除しているのが見えますね。これがDISTINCTの魔法です!
DISTINCT句とCOUNT()関数
次に、DISTINCTをCOUNT()関数と組み合わせてレベルアップしましょう。この強力なペアにより、カラムのユニークな値の数を数えることができます。
SELECT COUNT(DISTINCT column_name)
FROM table_name;
前の例を使用して、異なる部署の数を知りたい場合、以下のように使用します:
SELECT COUNT(DISTINCT department)
FROM employees;
これで以下の結果が得られます:
COUNT(DISTINCT department) |
---|
3 |
「どれだけのアイスクリームの味を提供していますか?」という質問に対して「どれだけのアイスクリームを売り上げましたか?」という質問に置き換えるようなものです。
複数のカラムに対するDISTINCT
ここでさらに面白いことに進みましょう。DISTINCTは複数のカラムに対しても効果を発揮します。複数のカラムの組み合わせを一つのユニークなユニットとして扱います。
SELECT DISTINCT column1, column2
FROM table_name;
employees
テーブルを拡張してみましょう:
id | name | department | city |
---|---|---|---|
1 | Alice | Sales | New York |
2 | Bob | Marketing | Chicago |
3 | Carol | Sales | New York |
4 | David | IT | Boston |
5 | Eve | Marketing | Chicago |
6 | Frank | Sales | Boston |
すべてのユニークな部署-都市の組み合わせを知りたい場合、以下のように使用します:
SELECT DISTINCT department, city
FROM employees;
これで以下の結果が得られます:
department | city |
---|---|
Sales | New York |
Marketing | Chicago |
IT | Boston |
Sales | Boston |
「Sales」が異なる都市で2回出現しているのを見てください。
NULL値に対するDISTINCT
ここで面白い事实があります。DISTINCTの世界では、NULLはユニークな値として扱われます。カラムに複数のNULL値が存在しても、DISTINCTは一つのNULL値だけを返します。
employees
テーブルを修正してみましょう:
id | name | department | project |
---|---|---|---|
1 | Alice | Sales | Alpha |
2 | Bob | Marketing | NULL |
3 | Carol | Sales | Beta |
4 | David | IT | NULL |
5 | Eve | Marketing | Alpha |
以下を実行すると:
SELECT DISTINCT project
FROM employees;
以下の結果が得られます:
project |
---|
Alpha |
NULL |
Beta |
テーブルに2つのNULL値があったにも関わらず、一つのNULL値だけが返っているのを見てください。
クライアントプログラムを使用したDISTINCT句
これまでの知識をMySQLクライアントプログラムで実践してみましょう。ここではMySQLコマンドラインクライアントを使用しますが、原則は他のMySQLクライアントにも適用できます。
まず、employees
テーブルを作成しましょう:
CREATE TABLE employees (
id INT PRIMARY KEY,
name VARCHAR(50),
department VARCHAR(50),
project VARCHAR(50)
);
INSERT INTO employees VALUES
(1, 'Alice', 'Sales', 'Alpha'),
(2, 'Bob', 'Marketing', NULL),
(3, 'Carol', 'Sales', 'Beta'),
(4, 'David', 'IT', NULL),
(5, 'Eve', 'Marketing', 'Alpha');
次に、学んだクエリをいくつか試してみましょう:
-
すべてのユニークな部署を取得する:
SELECT DISTINCT department FROM employees;
-
異なるプロジェクトの数を数える:
SELECT COUNT(DISTINCT project) FROM employees;
-
すべてのユニークな部署-プロジェクトの組み合わせを取得する:
SELECT DISTINCT department, project FROM employees;
これらをMySQLクライアントで試してみて、DISTINCT句の魔法を体験してみてください!
結論
そして、みなさん!DISTINCTの土地を旅したことができました。DISTINCTは、データを整理し、重複を排除してクリーンな情報を提供する便利なアシスタントです。
MySQLの旅を続ける中で、DISTINCTは信頼できるツールとしてあなたのデータベースツールキットに加わります。特に大きなデータセットを扱う際に、ユニークな値や組み合わせを素早く特定するのに非常に便利です。
練習を続け、好奇心を持ち続けると、経験豊富なデータベースプロとしての自信を持って複雑なクエリを書けるようになるでしょう。次回まで、楽しいクエリを楽しんでください!
Credits: Image by storyset