MySQL - Distinct 子句:揭開獨特性的力量

你好啊,未來的數據庫魔法師們!今天,我們將踏上一段令人興奮的旅程,進入 MySQL 的世界,並探索一個特別實用的功能——DISTINCT 子句。別擔心如果你是編程新手——我會成為你友善的導遊,我們將一步步解決這個主題。所以,拿起你喜歡的飲料,讓我們一起深入探討吧!

MySQL - Distinct Clause

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" 出現了兩次,因為它在不同的城市。

DISTINCT 與 NULL 值

這裡有一個有趣的知識:在 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

看見那麼即使我們表中有多個 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');

現在,讓我們嘗試我們學到的某些查詢:

  1. 獲取所有唯一的部門:

    SELECT DISTINCT department FROM employees;
  2. 計算唯一項目的數量:

    SELECT COUNT(DISTINCT project) FROM employees;
  3. 獲取所有唯一的部門-項目組合:

    SELECT DISTINCT department, project FROM employees;

在您的 MySQL 客戶端中嘗試這些查詢,並觀察 DISTINCT 子句發揮其魔法!

結論

好了,各位!我們已經穿越了 DISTINCT 的土地,從它的基本使用到更高级的應用。記住,DISTINCT 就像一個有用的助手,整理你的數據,移除重複,並給你一個更乾淨的信息視圖。

當你繼續你的 MySQL 冒險時,你會發現 DISTINCT 是你數據庫工具包中的一個可靠工具。它特別在處理大量數據集時,需要快速識別唯一值或組合時非常有用。

持續練習,保持好奇心,在你意識到之前,你將會以一個有經驗的數據庫專業人士的信心撰寫复雜的查詢。直到下次,快樂查詢!

Credits: Image by storyset